"free -h" 명령 출력에서 ​​버퍼가 증가하는 이유

"free -h" 명령 출력에서 ​​버퍼가 증가하는 이유

저는 두 가지 실험을 했습니다.

첫 번째 실험(Ubuntu 20.04, ext4 파일 시스템):

  1. 명령 실행 free -h -w:
$ free -h -w
              total        used        free      shared     buffers       cache   available
Mem:           30Gi       2,6Gi        25Gi       106Mi       126Mi       2,1Gi        27Gi
  1. 명령 실행sudo find / | grep something
  2. 명령을 다시 실행하고 free -h -w"버퍼" 열이 크게 증가하고(약 1G) "캐시" 열도 증가하는 것을 확인합니다(약 500M).
$ free -h -w
              total        used        free      shared     buffers       cache   available
Mem:           30Gi       2,6Gi        24Gi       106Mi       1,2Gi       2,6Gi        27Gi

두 번째 실험(동일 PC):

  1. 명령 실행 free -h -w:
$ free -h -w
              total        used        free      shared     buffers       cache   available
Mem:           30Gi       2,6Gi        24Gi       106Mi       1,2Gi       2,6Gi        27Gi
  1. 명령을 실행하세요 dd if=/dev/nvme0n1p2 of=/dev/null bs=1M count=500. 여기에서 디스크가 또 다른 디스크가 됩니다.
  2. 명령을 다시 실행 free -h -w하고 버퍼가 500M 증가했는지 확인합니다.
$ free -h -w
              total        used        free      shared     buffers       cache   available
Mem:           30Gi       2,6Gi        24Gi       115Mi       1,7Gi       2,6Gi        27Gi

따라서 질문은 buffers첫 번째 경우에 열이 증가하는 이유와 두 번째 경우에 증가하는 이유는 무엇입니까? 나는 이것을 읽었다무료 출력의 버퍼 열은 무엇입니까?그러나 여기에 대한 대답은 나에게 적합하지 않습니다.

그들은 "버퍼 열에 파일에 대한 메타데이터가 포함되어 있다"고 말합니다. 그러나 "캐시" 열은 inode, dentry 및 buffer_head(실제로는 파일의 메타데이터)의 슬랩을 계산하기 때문에 이는 잘못된 것입니다. man free또한 cache열에 SReclaimable.

그들은 또한 "버퍼 열에 블록 장치의 블록 캐시가 포함되어 있습니다"라고 말합니다. 이는 사실과 더 비슷해 보이며 buffers명령을 실행할 때 열이 증가하는 이유를 설명하지만 실행할 때 열이 증가하는 dd이유는 설명하지 않습니다. 명령. 이 경우에도 이미 파일 캐시가 있다면 왜 필요한가요? DVD 디스크를 제외하고 누구도 블록 장치에서 데이터를 직접 읽거나 쓸 수 없습니다.buffersfinddd

답변1

여기서 답을 찾았습니다.과도한 버퍼 메모리 사용량의 원인을 확인하는 방법은 무엇입니까? Linux는 파일의 inode를 두 번 저장하는 것 같습니다. 첫 번째는 슬래브에 ext4_inode_cache/ 로 저장하고(명령을 사용하여 이 슬랩의 크기를 늘리는 것을 관찰했습니다 ), 두 번째는 버퍼에 저장합니다(inode가 블록 장치에서 직접 읽혀지기 때문입니다. 모든 블록은 블록 장치에서 직접 읽혀집니다(블록 장치는 이를 버퍼에 저장합니다). 따라서 명령을 실행하면 Linux는 블록 장치에서 inode의 블록을 읽고 이를 버퍼에 저장한 다음 슬랩에 inode의 캐시를 생성합니다. 결과적으로 출력의 및 열이 모두 증가합니다.inode_cacheslabtopfindcachebuffersfree

관련 정보