Log memory accesses that cause major page faults

痴心易碎 提交于 2021-01-22 06:46:26

问题


Does anyone know how to get the memory accesses (pointers) that cause page faults? I'm interested mostly in the major page faults.

A bit of background about what I'm trying to achieve. I have an application with a large memory footprint (a database) and I want to correlate paging with the accesses to the large data structures (such as tables, indexes which are allocated using mmap()). The mappings of the process are easy to retrieve from /proc//maps. Now, if I have the memory accesses that cause page faults I can track how many page faults are caused when accessing each data structure.

I think perf or systemtap could do the job. Any ideas?


回答1:


See what is available at the probe point:

% stap -L vm.pagefault
vm.pagefault name:string write_access:long address:long $mm:struct mm_struct* \
   $vma:struct vm_area_struct* $address:long unsigned int $flags:unsigned int

Log, attempting to map addresses to symbol names

# stap -e 'probe vm.pagefault { if (execname()=="foo") { printf("%p (%s)\n", address, usymdata(address)) } }' -d /bin/foo --ldd

See also: http://sourceware.org/systemtap/examples/#memory/pfaults.stp




回答2:


Your guess is right. You can use perf tool to track the number of page faults that your application has caused.

I recommend you to read this tutorial to learn to use the tool.

To install just use:

You are looking for the event page-fault. You can install (in ubuntu or other apt distribution) by:

sudo apt-get install linux-tools-common linux-base 
sudo apt-get install linux-tools-YOUR-KERNEL number

You can obtain your kernel number with: uname -r

As an example, this command runs the perf tool on the "ls" command:

perf record -e page-faults:u -F 250 ls

and then you can look at the results (the binary of "ls" has no debug information, so don't expect a pretty output) with:

perf report


来源:https://stackoverflow.com/questions/15621263/log-memory-accesses-that-cause-major-page-faults

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!