Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux上防止实时进程中的小页面错误_Linux_Real Time_Page Fault - Fatal编程技术网

在linux上防止实时进程中的小页面错误

在linux上防止实时进程中的小页面错误,linux,real-time,page-fault,Linux,Real Time,Page Fault,我需要尽可能使流程实时运行 所有通信都是通过共享内存完成的-内存映射文件-根本没有系统调用-它使用忙等待共享内存 进程在实时优先级下运行,所有内存都用mlockall(MCL_CURRENT | MCL_FUTURE)锁定,该锁定成功并且进程有足够的ulimits 锁定所有内存 当我在它上运行它时,我仍然会得到一些小的页面错误 我用进程亲和力和非亲和力测试了这一点 问题: 即使是小的页面错误,也能完全消除它们吗?如果我正确理解这个问题,完全避免小的页面错误是不可能的。在包括Linux在内的大多数

我需要尽可能使流程实时运行

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

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

当我在它上运行它时,我仍然会得到一些小的页面错误

我用进程亲和力和非亲和力测试了这一点

问题:


即使是小的页面错误,也能完全消除它们吗?

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

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

我说的是TLB未命中导致的小页面错误。STLB未命中是大多数现代CPU中处理的硬件。它应该对操作系统不可见;只会减慢一些内存访问并增加硬件性能监视计数器(英特尔的DTLB_LOAD_MISSES.ANY)。如何减少较小的页面错误?我确实有很多内存,但仍然受到一个小的页面错误问题的困扰,这个问题使得CPU的使用量过大,无法执行其他任务