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는 메모리를 페이지로 관리하면서
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의 기본 동작이 아닐까 싶다.
[출처] Kernel Page Cache의 효과에 대한 고찰|작성자 요술부엉
'Programming > Linux_Kernel' 카테고리의 다른 글
File System의 개요 (0) | 2014.05.12 |
---|---|
mmap 을 이용한 process memory mapping (0) | 2014.04.25 |
linux kernel 에서 사용 할 수 있는 file io functions (0) | 2014.04.18 |
linux user semaphore (0) | 2014.04.11 |
사용가용한 physical memory block 을 얻어오는 방법 (0) | 2014.04.07 |