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