[t:/]$ 지식_

vmtouch와 캐시

2022/10/31

filebacked mmap을 쓸 때, 해당 파일이 커널 페이지 캐시에 들어가 있는지를 확인하고 싶다면 vmtouch를 쓰면 간편하다.

우분투 등에 기본으로 안 깔려있다.

깔기 어렵다면 빌드해서 쓰면 된다.

https://raw.githubusercontent.com/hoytech/vmtouch/master/vmtouch.c?fbclid=IwAR2Hrmk21e-WnmivwvlFQyMeUq_ZyLjINHgcq0sbPf5IZeENrLaj456SCnY

gcc -o vmtouch vmtouch.c -O3

vmtouch 파일명 을 수행하면 캐시에 파일이 얼마나 올라가 있는지 알 수 있다. 랜덤 접근 + 노후(에이징)화 됐다면 일부만 올라와있는 것 처럼 보일 수도 있다. 커널이 쫓아(이빅션)냈기 때문이다.

mmap으로 작업성능을 실험할 때, 페이지 캐시에 올라가 있으면 의도하지 않게 성능이 잘 나온다. 페이지 폴트가 날 때까지 파일을 다시 읽지 않는다. 폴트가 나면 그 부분만 읽어온다. 정확히는 커널 버전에 따라 주변부를 몽창 읽어올 수도 있고 큰(huge) 페이징을 할 수도 있다.

vmtouch 파일명 -e 로 캐싱된 파일을 내릴(이빅션)수 있다. 이렇게 하면 캐시를 타지 않은 전체 성능 측정을 할 수 있다.

실제 서비스에서는 캐시를 타면서 실행될 것이므로 최상, 최악 성능을 각각 캐시를 올리고 내리면서 실험해 볼 수 있다.

캐시를 통으로 날리는 것은 슈퍼유저만 가능하다.

echo 3 > /proc/sys/vm/drop_caches을 수행하면 되는데 우리는 쩌리니까 이 명령을 쓸 수 없다.

troot 블로그에서 캐시등으로 검색하면 자료가 좀 더 나올텐데.. 글을 얼마나 복원했는지는 알 수 없다.









[t:/] is not "technology - root". dawnsea, rss