7

我需要使该过程尽可能实时运行。

所有通信都是通过共享内存完成的 - 内存映射文件 - 根本没有系统调用 - 它在共享内存上使用忙等待。

该进程以实时优先级运行,并且所有内存都被锁定mlockall(MCL_CURRENT|MCL_FUTURE),成功并且进程有足够ulimits 的内存锁定所有内存。

当我在它上面运行它时,perf stat -p PID我仍然会得到一些轻微的页面错误。

我用进程亲和力和没有进程亲和力对此进行了测试。

问题:

是否有可能完全消除它们——即使是轻微的页面错误?

4

2 回答 2

6

我通过从内存映射文件切换到 POSIX 共享内存shm_open+ 内存锁定解决了这个问题。

于 2012-12-03T15:21:02.337 回答
0

如果我正确理解了这个问题,那么完全避免轻微的页面错误是不可能的。在包括 Linux 在内的大多数现代操作系统中,操作系统不会在程序启动时将所有文本和数据段加载到内存中。它分配内部数据结构,当需要文本和数据时,页面本质上是错误的。这导致页面错误物理内存可供进程使用,从后备存储交换页面。因此,可以在不访问后备存储的情况下避免轻微的页面错误,这可能是不可能的。

于 2012-12-03T10:07:51.013 回答