交换文件的使用是否会增加磁盘 I/O 和 CPU 负载?

交换文件的使用是否会增加磁盘 I/O 和 CPU 负载?

有人提请我注意,如果应用程序正在使用交换文件(当系统 RAM 非常低时),它会增加磁盘 I/0,结果就是 CPU 使用率 % 和 CPU 负载会增加。

这是真的吗,还是那家伙完全偏离了轨道?

答案1

交换是将内存分页到磁盘。如果你有东西将东西从 RAM 分流到交换区,你会看到:

  • CPU 使用率决定哪些内容可以进入交换区
  • 从物理移动到交换时的磁盘 IO 和 CPU
  • 将正在运行的应用程序地址空间映射到其交换位置的 CPU 使用率
  • 应用程序访问其交换内存空间的磁盘 IO。

这些如何量化或者它们有多大影响是完全有争议的,但遵循 Barney 的一条黄金法则:RAM 越多越好。

答案2

交换空间是 HDD 或 SSD 上的区域,是 PC 虚拟内存的一部分。虚拟内存只是物理内存(称为 RAM)和交换空间(称为 SWAP)的组合。交换空间暂时保存非活动内存。这是因为您的系统决定需要物理内存来处理活动进程,并且可用的未使用物理内存不足。如果系统恰好需要更多内存或空间,则物理内存中的非活动内存页面将移动到交换空间,从而释放该物理内存以供其他用途。

由于物理内存或 RAM 比位于 HDD 或 SDD 中的 SWAP(通常作为分区)快得多,因此访问时间较慢。但是,如果您使用 SSD(固态硬盘)而不是 HDD(硬盘驱动器,机械硬盘),则可以获得更快的速度。

考虑到这一点,您的问题的答案是,在两种情况下都是肯定的。是的,使用 SWAP 会增加您的 CPU 使用率和磁盘 I/O。当然,CPU 使用率会很小,但磁盘使用率不会很小。原因是 CPU 仅用于查看交换区中可以存储/检索的内容和位置(这是一个非常快的过程)。

对于磁盘 I/O 来说,情况有所不同。由于 Swap 位于 HDD 或 SSD 中,因此当您使用其他程序时,它也会使用磁盘 I/O,并且它的优先级很可能高于其他用户程序。

因此对于您的问题,您不需要过多担心 CPU 使用率,而需要担心磁盘使用率。

为了提高性能并降低磁盘使用率,您可以做以下几件事:

  • 将 HDD(通常为 5400 RPM 至 7200 RPM)更改为 SSD。区别在于磁盘性能提高 2 倍至 10 倍。这将极大地改变系统的整体性能。

  • 添加更多 RAM。如果您有更多内存,系统需要交换内存的可能性就会降低,从而提高整体性能,同时仍使用所有可用 RAM。

  • 使用占用较少内存的桌面。这也会扩展到其他应用程序。使用 KDE 或 Gnome 与使用 LXDE 或 XFCE 是不一样的。使用 abiword 甚至 nano o vim 与使用 LibreOffice 也是不一样的。

现在谈谈最后一点。您听说过增加磁盘 I/O 会增加 CPU 负载。这是真的,原因很简单:

您的 RAM 越少,应用程序所需的 SWAP 空间就越多。使用的 SWAP 空间越多,存储/检索 Swap 信息所需的 CPU 时间就越多。

两者相互依赖。因此,增加 RAM 数量将直接有助于降低 SWAP 使用率和 CPU 使用率。

下面是一张图片来说明效果:

在此处输入图片描述

每次 CPU 负载猛增,都是因为 Swap 被读取/写入。

答案3

会有一些增加(因为内核必须跟踪 RAM 和辅助存储之间的分页内存位置),但我怀疑增加的幅度不会很大,因为内核直接访问磁盘,在交换文件/分区的分页时绕过缓存和文件系统。执行的 IO 是异步的,因此 CPU 不会等待(导致其他进程不必要地减速)。

有关交换管理的完整描述,请阅读https://www.kernel.org/doc/gorman/html/understand/understand014.html您会发现这不是一个 CPU 密集型过程,大部分工作都围绕管理页面映射,而不是数据传输。

答案4

事实上情况恰恰相反:当程序必须停止并等待磁盘 IO 时,CPU 使用率会下降(因为它们在等待时不使用 CPU)。显然,大量数据被交换进和交换出磁盘磁盘 I/O。

相关内容