我正在 AMD opteron 服务器(4 个 CPU,每个 12 个内核,128GB RAM)上运行一个 CPU 和内存密集型应用程序,用于 3D 重建(如果相关,请访问 www.3dsurvey.si)。我注意到由于(我相信)页面错误,CPU 没有按预期使用。我们在处理时每秒会出现 100k+ 页面错误,而内存仅使用了 50% 左右。我们得到的平均处理器利用率约为 10%-20%。我还尝试禁用页面文件(不建议这样做),但没有任何改进且页面错误率相同。软件通常使用普通 PC 上的所有处理器。
使问题适用于他人
- 为什么在仍有大量可用 RAM 的情况下出现页面错误?
- 如何减少页面错误的数量?
页面错误可以分为主要错误和次要错误
当您的程序或其数据被换出到磁盘并且现在需要从磁盘换入时,就会发生重大页面错误。这些故障被标记为“严重”,因为与 CPU 速度相比,从磁盘换出/换入/换入磁盘非常慢。由于您有足够的可用 RAM(大约 50%),并且完全禁用交换并没有带来任何性能恢复,我认为您的问题与重大故障无关。
当 CPU 试图访问不在其小型快速 TLB 缓存中的虚拟内存地址时,会发生轻微的页面错误,因此,它必须查找存储在已知 DRAM 地址中的更大(且更慢)的映射表。当偶尔运行程序和/或访问大量内存时,预计会出现大量次要页面错误。当与非 NUMA 感知程序一起使用时,多插槽 NUMA 拓扑(与您的 Opteron 使用的相同)可能会加剧此问题。
如果您的程序不支持 NUMA,那么轻微的页面错误可能是您的性能问题的根源。如果是这种情况,要大致了解一下,请尝试在单插槽计算机上运行程序(或禁用服务器上除一个插槽以外的所有插槽)并检查 CPU 使用率是否高于预期。
无论如何,只有生产软件的软件公司(或对您的特定程序非常有经验的人)才能完全回答您的问题。