有谁知道如何获取导致页面错误的内存访问(指针)?我主要关注主要页面错误。导致主要页面错误的日志内存访问
关于我想要实现的一些背景。我有一个具有大内存占用量(数据库)的应用程序,我想将分页与对大数据结构(如使用mmap()分配的表,索引)的访问相关联。该过程的映射很容易从/ proc //地图中检索。现在,如果我有导致页面错误的内存访问,我可以跟踪访问每个数据结构时导致多少页面错误。
我认为perf或systemtap可以完成这项工作。有任何想法吗?
有谁知道如何获取导致页面错误的内存访问(指针)?我主要关注主要页面错误。导致主要页面错误的日志内存访问
关于我想要实现的一些背景。我有一个具有大内存占用量(数据库)的应用程序,我想将分页与对大数据结构(如使用mmap()分配的表,索引)的访问相关联。该过程的映射很容易从/ proc //地图中检索。现在,如果我有导致页面错误的内存访问,我可以跟踪访问每个数据结构时导致多少页面错误。
我认为perf或systemtap可以完成这项工作。有任何想法吗?
看看有什么可以在探测点:
% 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
登录,试图地址映射为符号名
# stap -e 'probe vm.pagefault { if (execname()=="foo") { printf("%p (%s)\n", address, usymdata(address)) } }' -d /bin/foo --ldd
参见:http://sourceware.org/systemtap/examples/#memory/pfaults.stp
你的猜测是正确的。您可以使用perf工具来跟踪您的应用程序导致的页面错误数量。
我建议您阅读this tutorial以了解如何使用该工具。
只安装使用:
您正在寻找的事件页面出错。您可以通过安装(在Ubuntu或其他APT分布): 使用uname -r
举个例子,这个命令运行在“LS的PERF工具:
sudo apt-get install linux-tools-common linux-base
sudo apt-get install linux-tools-YOUR-KERNEL number
您可以获取您的内核数量“命令:
perf record -e page-faults:u -F 250 ls
,然后你可以看一下结果(的二进制‘LS’有没有调试信息,所以不要指望一个漂亮的输出)与:
perf report