filebacked mmap을 쓸 때, 해당 파일이 커널 페이지 캐시에 들어가 있는지를 확인하고 싶다면 vmtouch를 쓰면 간편하다.
우분투 등에 기본으로 안 깔려있다.
깔기 어렵다면 빌드해서 쓰면 된다.
gcc -o vmtouch vmtouch.c -O3
vmtouch 파일명
을 수행하면 캐시에 파일이 얼마나 올라가 있는지 알 수 있다. 랜덤 접근 + 노후(에이징)화 됐다면 일부만 올라와있는 것 처럼 보일 수도 있다. 커널이 쫓아(이빅션)냈기 때문이다.
mmap으로 작업성능을 실험할 때, 페이지 캐시에 올라가 있으면 의도하지 않게 성능이 잘 나온다. 페이지 폴트가 날 때까지 파일을 다시 읽지 않는다. 폴트가 나면 그 부분만 읽어온다. 정확히는 커널 버전에 따라 주변부를 몽창 읽어올 수도 있고 큰(huge) 페이징을 할 수도 있다.
vmtouch 파일명 -e
로 캐싱된 파일을 내릴(이빅션)수 있다. 이렇게 하면 캐시를 타지 않은 전체 성능 측정을 할 수 있다.
실제 서비스에서는 캐시를 타면서 실행될 것이므로 최상, 최악 성능을 각각 캐시를 올리고 내리면서 실험해 볼 수 있다.
캐시를 통으로 날리는 것은 슈퍼유저만 가능하다.
echo 3 > /proc/sys/vm/drop_caches
을 수행하면 되는데 우리는 쩌리니까 이 명령을 쓸 수 없다.
troot 블로그에서 캐시
등으로 검색하면 자료가 좀 더 나올텐데.. 글을 얼마나 복원했는지는 알 수 없다.