문제

I need to make the process to run in real time as much as possible.

All the communication is done via shared memory - memory mapped files - no system calls at all - it uses busy waiting on shared memory.

The process runs under real time priority and all memory is locked with mlockall(MCL_CURRENT|MCL_FUTURE) which succeeds and process has enough ulimits to have all the memory locked.

When I run it on it perf stat -p PID I still get counts of minor page faults.

I tested this with both process affinity and without.

Question:

Is it possible to eliminate them at all - even minor page faults?

도움이 되었습니까?

해결책

I solved this problem by switching from memory mapped files to POSIX shared memory shm_open + memory locking.

다른 팁

If I understand the question correct, avoiding the minor page faults completely isn't possible. In most modern OS's including Linux, the OS doesn't load all the text and data segments into memory when the programs start. It allocates internal data structures and pages are essentially faulted in when the text and data are needed. This causing a page fault physical memory is made available to the process, swapping page from backing store. Therefore, minor page fault could be avoided without accessing backing store which might not possible.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top