在linux上实时防止小页面错误

时间:2012-12-02 15:59:49

标签: linux real-time page-fault

我需要尽可能让这个过程实时运行。

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

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

当我在它上面运行perf stat -p PID时,我仍然会看到次要页面错误。

我用过程亲和力测试了这个,没有。

问题:

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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