free 명령어에 대해서 정리하다가 컬럼에 나오는 buffer 와 cache 에 대해 정확히 무엇을 의미하는지 궁금해졌다.
그래서 혼자 열심히 찾아 공부한 내용을 정리해보려고 한다.
우선 메모리를 확인하는 명령어 중 하나인 free 명령어 결과를 확인해보면 buffer 와 cache 컬럼을 볼 수 있다.
$ free -h
total used free shared buff/cache available
Mem: 486M 78M 297M 4.4M 110M 391M
Swap: 2.0G 0B 2.0G
이전에 면접을 봤을 때 면접을 보시는 엔지니어분이 나에게 이런 질문을 했다.
현재 서비스가 작동중인 서버에 새로운 서비스를 작동시키기 위해서 free 명령어를 통해 메모리가 충분한지 확인해야 한다고 가정했을 때
그럼 free 명령어 결과 중 used 와 available 중 어떤 컬럼을 봐야 한다고 생각하세요?
라는 질문이었다.
이 질문에 대한 내 대답은?
사용하고 있는 공간보다는 사용 가능한 공간을 보는 게 맞을 것 같다는 애매한 설명과 함께 available 이라고 대답했다.
사실 무엇을 봐야하는지 잘 모르고 있었고 그 순간 생각나는 대로 아는 것을 최대한 끄집어내 대답한 기억이 난다.
그래서 이전 글을 통해 free 명령어에 대해서 다시 공부하고 정리해보았고 used 와 available 에 대해서 다시 정리해봤다.
used 는 사용 중인 메모리의 크기를 말하는데 전체 메모리에서 free, buff/cache 메모리의 크기를 제외한 크기를 말한다.
available 은 사용 가능한 메모리의 크기라고 생각했었지만 swapping 없이 새 응용 프로그램을 사용할 수 있는 메모리의 크기를 말한다.
다시 같은 질문을 받게 된다면 어떤 대답을 듣기 원하셨는지 잘 모르겠지만 새로운 서비스를 작동하기 위해서는 available 컬럼을 통해 현재 새 응용 프로그램을 사용하기 위한 메모리의 크기가 어느 정도인지 확인할 것 같습니다! 라고 대답할 것 같다.
우선 버퍼와 캐시에 대해 정리하기 전에 왜 버퍼와 캐시를 사용하게 됬는지에 대해서 이해하는 게 중요했다.
커널은 블록 디바이스라고 부르는 디스크에서 데이터를 읽고 쓴다고 하는데 쉽게 말해 디스크에서 데이터를 가져오고 저장한다는 말이다.
디스크에서 데이터를 가져오거나 저장할 때 매우 느리기 때문에 시스템에 부하를 발생시키기도 한다.
이러한 과정을 보다 빠르게 하기 위해서 디스크에서 한번 가져온 내용을 메모리의 캐싱 영역에 저장해 사용한다.
그래서 한 번 가져온 내용은 메모리 캐싱 영역에 저장되어있기 때문에 디스크보다 더 빠르게 가져와 사용할 수 있게 된다.
이때 사용되는 메모리의 캐싱 영역을 버퍼(Buffer)와 캐시(Cache) 라고 부른다.
간단하게 정리해보면, 데이터를 보다 빠르게 읽고 쓰기 위해 메모리에 캐싱 영역을 할당해 사용한다!
메모리의 캐싱 영역은 Buffer 와 Cache 영역으로 나뉘는데 어떤 차이가 있는지 찾아봤다.
Buffer
Buffer 는 Buffer Cache 로 블록 디바이스에 대한 메타데이터를 메모리에 저장한다.
여기서 블록 디바이스란 CD/DVD, 하드 디스크 등 저장 장치를 말한다.
그리고 메타데이터는 데이터에 대한 데이터, 데이터에 대한 정보를 말한다.
예를 들어, 파일의 이름, 마지막 수정 날짜 및 시간 등이라고 생각하면 된다.
간단하게 정리하면, Buffer 는 메타데이터를 저장한다.
Cache
Cache 는 Page Cache + slab 라고 한다.
Cache 에 대해 이해하려면 Page Cache 와 slabs 에 대해 알아야 한다.
Page Cache
Page Cache 는 저장 장치를 통해 한 번 읽어온 파일의 내용을 메모리에 저장한다.
여기서 Buffer 와 다른 점은 메타데이터를 저장하는 것이 아닌 파일의 내용을 저장한다는 점이다.
slab
slab 는 커널 내부에서 사용하는 메모리, 캐시라고 생각하면 된다.
그럼 마지막으로 셀프 질문!
메모리의 캐싱 영역을 사용하는 이유는?
디스크를 통해 파일을 읽고 쓸 때 속도가 느리기 때문에 메모리 캐싱 영역을 통해 보다 빠르게 파일을 읽고 쓸 수 있다.
시스템의 부하가 줄어들고 데이터 입출력 속도가 빠르기 때문이다.
메모리 캐싱 영역에서 버퍼와 캐시의 차이는?
Buffer 는 메타데이터를 저장하고 Cache 는 파일의 내용을 메모리에 저장한다!
사실 다 이해했다고 하기는 뭐하고..ㅎ 무엇인지 왜 사용하는 지에 대해서 간단하게 이해하는 정도다.
더 자세한 내용을 알아야 할 순간이 온다면 그 때 더 파고들어야지 ㅎㅎ
- 참고 사이트 -
https://dololak.tistory.com/290
https://joyfuls.tistory.com/24
'리눅스 > Linux' 카테고리의 다른 글
리눅스 정규 표현식(Regular Expression) 정리 (1) (0) | 2022.04.03 |
---|---|
리눅스 레이드(RAID) (0) | 2022.01.30 |
리눅스 시스템 재시작 로그 확인 (0) | 2021.11.18 |
리눅스 네트워크 확인 명령어 정리 (0) | 2021.09.12 |
centos7 네트워크 설정 파일 - ifcfg 파일 (0) | 2021.09.12 |