728x90
반응형

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

 

[Linux] 리눅스 파일 종류

리눅스 파일 종류 리눅스에서는 모든것을 파일 단위로 인식하며, 심지어 하드웨어도 파일로 인식합니다. 리눅스에는 크게 다음과 같은 유형의 파일들이 있습니다. 일반 파일 일반 파일은 보통

dololak.tistory.com

https://joyfuls.tistory.com/24

 

'메타데이터(metadata)'란?

"데이터를 위한 데이터" '속성정보'라고도 불리는 메타데이터는 '데이터에 관한 구조화된 데이터', '다른 데이터를 설명해 주는 데이터'이다. 대량의 정보 가운데에서 찾고 있는 정보를 효율적으

joyfuls.tistory.com

 

728x90
반응형
복사했습니다!