交换分区与文件的性能?

Bil*_*ray 81 linux windows pagefile swap virtual-memory

什么对性能更好?靠近磁盘内部的分区访问时间会更慢,我们必须等待驱动器在操作系统和交换分区之间切换。

另一方面,交换分区绕过所有文件系统,允许直接写入磁盘,这可能比文件更快。

什么是性能权衡?

固定大小的交换文件有多大区别?

是否会更改到交换分区会更长,但如果它是交换文件,则在交换分区上的性能会更好?

小智 43

  1. 在硬盘上,吞吐量和查找通常在磁盘开头处更快,因为数据存储在更靠近磁盘外部区域的地方,每个柱面有更多扇区。因此,在磁盘开头创建交换可能会提高性能。

  2. 对于 2.6 Linux 内核,交换分区和未分段的交换文件之间没有性能差异。当 swapon 启用交换分区/文件时,2.6 内核会查找交换文件存储在哪个磁盘块上,因此当需要交换时,它根本不必处理文件系统。

因此,如果交换文件没有碎片化,就好像在同一位置有一个交换分区一样。或者换句话说,如果您使用原始交换分区,或者使用文件系统对其进行格式化,然后创建一个填充所有空间的交换文件,您将获得相同的性能,因为该磁盘上的任何一种方式都有一个用于交换的连续区域,内核直接使用的。

因此,如果在文件系统新鲜时创建交换文件(从而确保它没有碎片并且在卷的开头),则性能应该与在卷之前具有交换分区相同。此外,如果有人在卷的中间创建了交换文件,在两侧都有文件,则可能会获得更好的性能,因为寻求交换的次数较少。

在 Linux 上,如果创建的交换文件没有碎片,并且从不扩展,它就不会变成碎片,至少对于像 ext3/4 这样的普通文件系统是这样。它将始终使用相同的连续磁盘块。

我的结论是,当您需要扩展时,专用交换分区的唯一好处是保证不碎片化;如果您的交换区永远不会扩展,则在新文件系统上创建的文件不需要额外的分区。

  • 这里唯一要补充的是,如果您的机器配置为“挂起到磁盘”,实际发生的是内存中的内容被写入交换。为此,交换必须在它自己的分区上,因为交换不能在活动文件系统上才能发生。因此,如果您有一台服务器,您可能不会使用此功能,而可以愉快地使用交换文件。如果您有一台笔记本电脑,您可能确实需要一个交换分区,这样您就可以“挂起到文件”以进行休眠。 (9认同)
  • @NathanS.Watson-Haigh 你能链接一个来源吗?Ubuntu 17.04 默认使用交换文件。如果它不能“暂停到磁盘”,那将是令人惊讶的。 (7认同)

Mar*_* M. 27

实际上,只要您不使用稀疏文件,它就没有太大区别。

使用 dd 创建一个“普通”文件将在一次运行中分配该文件(如果可能的话),而创建一个稀疏文件将告诉您您有一个 10GB 的文件,但实际上并没有用完所有空间。我不太确定 mkswap 是否无论如何都不会分配空间,但通常交换文件会随时间增长,因此不会分配连续扇区(如磁盘的一部分)而是根据需要分配块,这会导致随着时间的推移碎片化(当然取决于您对磁盘的使用情况)

在内部,Linux 内核或多或少会直接访问交换文件的底层块 - 我现在无法找到链接在引擎盖下发生了什么,除非有人会找到更正式的东西,否则您必须相信我。我现在能想到的是:

这一切仅适用于 2.6 行的 Linux 内核。

如果您想要最佳性能(那是什么,真的?...交换很慢,期间。增加 RAM 以便您不交换以获得最佳性能),您会想要使用分区。

  • 现代版本的 swapon 将完全拒绝使用格式化为 swap 的稀疏文件,理由是该文件有漏洞。 (22认同)

Mat*_*ons 3

我认为在我们现在所处的阶段,除非您运行的笔记本电脑的配置是在挂起/睡眠时将数据写入交换区,否则交换区确实应该被视为“最后的手段”。最好的办法是在一个盒子里放入足够的 RAM,这样它就不会分页到磁盘。

话虽如此,从性能角度来看,分区可能是更好的方法,尽管文件更灵活。只要确保它位于 7200+ RPM 的主轴上即可。

  • 因为使用文件可能需要更多的头部移动,因为当查找要读/写的页面时,数据可能位于文件系统上的任何位置,因此可能需要搜索 fs 结构,而使用交换分区时,每个页面将位于文件系统中的已知位置。分割。这使得访问时间(相对于批量吞吐量)成为一个差异化因素。 (5认同)
  • “除非需要休眠,否则不要配置交换”是一个有争议的观点。有时,当系统实际内存不足时,交换可以让系统恢复。没有交换会限制您运行分配大量内存但实际上并未触及大部分内存的程序(例如某些调试工具)。有时,占用但空闲的内存区域最好用作磁盘缓存,并且只有在有可用交换区的情况下才能进行这种权衡。请参阅 https://unix.stackexchange.com/questions/2658/why-use-swap-when-there-is-more-than-enough-free-space-in-ram 进行讨论。 (2认同)
  • @Anon 说的话。Chrome 是出了名的内存消耗大户,即使有 <100 个选项卡,当内存利用率约为 90% 并且没有交换文件时,我的 16GB 笔记本电脑也会在几分钟内无响应。令人惊讶的是,[Ubuntu 没有内置机制来警告用户操作系统内存不足](https://unix.stackexchange.com/a/289945/29324)。 (2认同)