1. 리눅스의 buffer와 cache

안녕하세요, MJ 입니다.

리눅스 명령어 free 를 설명하다 보니 buffer 와 cache 에 대한 설명이 필요하게 되었는데, 내용이 짧지 않아 별도 포스트를 작성합니다.

우선 buffer 와 cache 는 I/O 성능 향상을 위한 메모리 영역입니다.

  1. buffer/cache 의 필요성 

    블록 디바이스(하드디스크 등 디스크에 해당하는 저장 장치)에 있는 데이터를 읽거나, 새로운 데이터를 저장하는데, 이런 저장 장치는 다른 장치들(메모리,CPU-cache)에 비해 속도가 느립니다. I/O 가 일어날 때 마다 디스크에 접근하여 파일을 읽고 쓴다면 너무 오래 걸려서 다른 프로세스의 처리에 지장이 생길 수 있습니다. 이러한 문제를 해결하기 위해 캐시가 필요하게 됩니다.

  2. 캐시란

    커널은 디스크를 빠르게 사용하고자 메모리의 일부를 디스크의 캐시로 사용합니다.

  3. 캐시의 동작

    한번 읽은 파일의 내용을 캐시 영역에 저장한 뒤, 다시 해당 파일을 읽으려 시도할 때, 메모리 영역에 아까 저장 해 둔 내용을 바로 처리할 수 있게 하는 것 인데, 바로 이 메모리를 buffer, cache 라고 합니다.

  4. buffer 와 cache의 차이

    buffer 와 cache 의 차이에 대해 설명 하기 위해 부가적인 설명을 추가합니다.

    [unix 파일시스템의 구조]

    → 유닉스의 파일시스템은 디렉토리와 파일을 찾기 쉽도록 유지 및 관리하는 시스템으로 4가지의 블록으로 구성되어있습니다.

    1. Boot block → 부팅에 필요한 정보를 담고 있습니다.
    2. Super block → 파일시스템의 어디부터가 i-node 블록인지, Data 블록인지 등의 정보를 담고 있습니다.
    3. i-node List → 파일 하나에 i-node 하나가 할당이 되는데 i-node 는 파일의 메타 데이터를 갖고 있습니다. 이 i-node 묶음으로 파일의 퍼미션, 소유자, 크기, inode 번호 등의 정보를 갖고있습니다.
    4. Data block 데이터가 저장되는 영역으로 각 데이터 블록은 한번에 하나의 파일만 할당이 될 수 있습니다.

    buffer 와 cache 의 차이를 설명하기에 앞서,
    buffer 는 buffer cache,
    cache 는 page cache
    용어를 정정하고 차이점을 설명 드립니다.

    buffer cache 는 Super Block 과 i-node list 에 해당하는 메타 데이터를 저장합니다. 디렉토리를 읽고자 하는 경우에는 디렉토리에 포함되어있는 파일들의 i-node block 들을 buffer cache 에 저장하고, 다음에 다시 그 파일에 접근하게 되면 buffer cache 에 존재하는 값을 가져다가 바로 보여주게 됩니다. 파일로의 접근을 빠르게 수행하기 위한 캐시라고 볼 수 있고,

    page cache 는 한번 읽었던 파일의 내용을 저장하여 동일한 파일로 I/O 요청이 일어나면, 디스크로부터 다시 파일의 내용을 읽어 올 필요가 없이, page cache 에 저장 된 내용을 보여줄 수 있어 I/O 성능이 향상 될 수 있습니다.

    → buffer (buffer cache)는 파일을 빠르게 접근 하기 위한 캐시, cache (page cache)는 파일의 내용을 빠르게 확인 하기 위한 캐시 가 되겠습니다.

    요청이 read 일때는 이렇습니다.


    write 요청이 일어나게되면, page cache 로 데이터를 작성하게 됩니다.

    아직 디스크에 저장하지 않은 이 데이터는 페이지 테이블이 수정 된 것이라는 의미로 dirty 플래그를 붙이게 되고, 이 플래그가 붙은 페이지를 dirty page 라고 부릅니다.
    dirty page 는 커널의 백그라운드로 처리되어 쓰기 작업에서도 메모리를 활용하여 성능이 향상됩니다.

     

    읽어주신 분들이 이해가 잘 되셨으면 좋겠습니다. 


        문의사항은 댓글을 달아 주시면 성심껏 답변 드리겠습니다.

            감사합니다.

댓글 없음:

댓글 쓰기

내 리눅스 서버, 대체 뭐가 문제야?

내 리눅스 서버, 대체 뭐가 문제야? 안녕하세요. 오늘은 리눅스 서버가 버벅거릴 때, 원인을 파악하는 방법에 대해 알아보려고 해요. 서버의 성능 저하 원인을 찾는 것은 시스템 관리에서 매우 중요한 부분이에요. CPU, 메모리 사용량부터 수상한 프로...

가장 많이 본 글