Question

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?

Was it helpful?

Solution

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

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top