2.2. 主要和次要页面错误
RHEL for Real Time 通过将物理内存拆分为称为页面的块来分配内存,然后将它们映射到虚拟内存。当进程需要没有映射或内存中不再提供的特定页面时,会实时发生故障。因此,故障实际上意味着 CPU 要求时页面不可用。当进程遇到页面错误时,所有线程都会冻结,直到内核处理这个错误为止。解决此问题的方法有多种,但最佳解决方案可以调整源代码以避免页面错误。
次要页面错误
当进程在初始化前试图访问一部分内存时,实时会出现次要页面错误。在这种情况下,系统会执行操作来填充内存映射或其他管理结构。次要页面错误的严重性取决于系统负载和其他因素,但它们通常很短,并会影响到不计。
主页错误
当系统必须与属于其他进程的磁盘、交换内存页面或执行任何其他输入输出(I/O)活动来释放内存时,会发生实时重大错误。当处理器引用没有为其分配物理页面的虚拟内存地址时会出现这种情况。对空页面的引用会导致处理器执行错误,并指示内核代码分配页面,这会显著增加延迟。
在实时,当应用程序显示性能丢弃时,检查 /proc/ 目录中页面错误的进程信息会很有帮助。对于使用 cat 命令的特定进程标识符(PID),您可以查看以下相关条目的 /proc/PID/stat 文件:
- 字段 2:可执行文件文件名。
- 字段 10:次要页面错误的数量。
- 字段 12:主页面错误的数量。
以下示例演示了使用 cat 命令查看页面错误并使用 pipe 功能,只返回 /proc/PID/stat 文件的第二行、第十和第十二行:
cat /proc/3366/stat | cut -d\ -f2,10,12 (bash) 5389 0
# cat /proc/3366/stat | cut -d\ -f2,10,12
(bash) 5389 0
在示例输出中,PID 3366 的进程是 bash,它有 5389 次要页面错误,且没有主要页面错误。