我需要使这个过程尽可能实时地运行。
所有的通信都是通过共享内存完成的--内存映射文件--根本没有系统调用--它使用繁忙的等待共享内存。
进程在实时优先级下运行,所有内存都被mlockall(MCL_CURRENT|MCL_FUTURE)
锁定,mlockall(MCL_CURRENT|MCL_FUTURE)
成功,进程有足够的ulimits
来锁定所有内存。
当我在perf stat -p PID
上运行它时,我仍然会得到一些小的页面错误。
我测试了这两个过程亲和力和没有。
问题:
是否有可能完全消除它们--甚至是微小的页面错误?
发布于 2012-12-03 15:21:02
我通过从内存映射文件切换到POSIX共享内存shm_open
+内存锁定来解决这个问题。
发布于 2012-12-03 10:07:51
如果我理解这个问题是正确的,那么完全避免小的页面错误是不可能的。在大多数现代操作系统(包括Linux )中,当程序启动时,操作系统并不会将所有文本和数据段加载到内存中。它分配内部数据结构,当需要文本和数据时,页面本质上是错误的。这会导致页错误物理内存提供给进程,从而从备份存储交换页。因此,在不访问备份存储的情况下可以避免小的页面错误,这可能是不可能的。
https://stackoverflow.com/questions/13670970
复制相似问题