본문 바로가기

Programming/Linux_Kernel

linux 에서 page cache(페이지 캐쉬)란?

disk I/O 의 효율을 위해 main memory 에 잡아놓은 cache buffer 의 명칭


아래와 같이 cache memory 의 상태를 알 수 있다.


# free -m

             total       used       free     shared    buffers     cached

Mem:          6759       3121       3638          0        220       2008

-/+ buffers/cache:        892       5867

Swap:         4692          0       4692



원문 : http://wnstjqdl.tistory.com/46


시스템이 특별히 메모리 자원의 사용량이 없는데 캐쉬메모리가 많아 할당되어 여유메모리 할당이 적게 나올 경우 메모리를 초기화 하는 방법은 아래와 같다.

To free pagecache(페이지캐쉬 초기화)

echo 1 > /proc/sys/vm/drop_caches


To free dentries and inodes(트리와 아이노드 초기화)

echo 2 > /proc/sys/vm/drop_caches


To free pagecache, dentries and inodes(1번과 2번 모두 초기화)

echo 3 > /proc/sys/vm/drop_caches



원문 : http://mcchae.egloos.com/viewer/10800263


Mac도 마찬가지고 거의 모든 OS는 메모리를 페이지로 관리하면서 

속도를 개선하기 위하여 캐슁을 합니다.
가령 어떤 실행 프로그램을 제일 첫번째 수행했을 때와
두번째 수행한 다음의 속도차이가 생기는 이유가 그럴 것입니다.
또는 find 명령과 같이 파일 시스템 관련 명령을 수행해도
첫번째와 달리 두번째 수행한 결과는 이전과 달리 상당히 빠르게 
결과가 나오는 것을 경험하셨을 것입니다.

그런데 이렇게 메모리가 캐슁되는 것이 때로는
Free 메모리를 많이 잡아먹어 오히려 새롭게 큰 Free 메모리를 
필요로 하는 경우 메모리 할당을 못해 메모리 Swap in/out이 생겨
속도가 현저하게 떨어질 수도 있습니다.

결국 수동으로 캐쉬된 메모리 페이지를 Free하는 방법이 필요합니다.


원문 : http://blog.naver.com/swblaster?Redirect=Log&logNo=80196983804

Linux Kernel은 Page Cache를 사용해서, Disk와 같은 Block Device와의 I/O를 효율적으로 관리한다. 기본적인 컨셉은... 속도가 빠른 메모리의 일정 영역에 먼저 I/O를 해 두고, 시간이 남을 때 실제 Device와 interfacing하는 구조이다. 

 

 Cache의 용량이 충분할 경우, 대부분 Device I/O의 속도가 많이 향상되는 것이 사실이다. 헌데, 오히려 속도를 저해하는 경우가 발생할 수도 있고, 가끔 상식선을 벗어나는 동작이 보이기도 한다. 예를 들어... 작은 용량을 반복해서 Disk에 Write하고 Read해야 한다고 생각해 보자. Kernel은 Write가 발생할 때마다 이를 Cache에 넣어놓고 관리할 것이다. 때문에 이후 Read는 Disk가 아닌, Cache에서 Data를 가져오기 때문에 Response Time이 매우 짧다. 헌데 만약 Dirty한 Data만을 Write하는 Smart한 Application이나 Device Driver가 있다면?? 이들은 Clean Data는 Disk로 내리지 않고 메모리에서 날려버리는 작업만을 수행하므로 Write time이 많이 줄어들지만, Read시에는 오히려 Cache가 아닌 실제 Disk까지 내려가야 하므로 오히려 Response Time이 늘어날 가능성이 있다. 물론 Read Time이 Write Time에 비해 굉장히 작기 때문에 이런 상황이 발생하기는 쉽지 않지만, Application 특성에 따라 Read의 비율이 Write보다 훨씬 높다면 충분히 발생은 가능하다.

 

 Kernel의 Page Cache는 임의로 Disable할 수는 없는 것으로 알고 있다. 때문에 위의 역설적인 문제를 마주친다면 Application을 조정하는 방법밖에는 해결책이 떠오르지 않는다. 좀 더 고민해볼 여지가 있는 Kernel의 기본 동작이 아닐까 싶다.