【发布时间】:2012-04-20 20:29:01
【问题描述】:
我想在我的应用程序中设置一个信号处理程序,以便内核在处理页面错误陷阱时发送一个信号。当然,我可以使用SIGSEGV 信号处理程序,但我真正感兴趣的是捕获写时复制时发生的页面错误。例如,在 fork 之后(不跟随 exec),如果原始进程尝试写入某个页面,则会出现页面错误。我想收到有关此类页面错误的通知。我怎样才能做到这一点?
【问题讨论】:
-
我怀疑您将不得不破解页面错误处理程序。要非常非常小心,并始终保留可启动的备份。
-
如果在信号处理程序中出现页面错误会发生什么?
-
完全正确 - 双错误在网球中很糟糕,但在内核中更糟糕。非分页池中的信号量可能会这样做,但是对于这样的事情,我只会在非分页池中增加一个计数,并在轮询时让驱动程序返回它,(是的,马丁詹姆斯只是建议轮询某事:)跨度>
-
已删除答案的链接:lwn.net/Articles/550555。来自 Andrea Arcangeli 的用户空间页面错误处理补丁集可能使这成为可能。 (但也许只有你在用户空间做更多的工作?)。
-
perf stat/perf record -e page-faults也可以统计/记录缺页事件。