什么对性能更好?靠近磁盘内部的分区将具有较慢的访问时间,我们必须等待驱动器在操作系统和交换分区之间切换。
另一方面,交换分区绕过所有文件系统,允许直接写入磁盘,这可能比文件更快。
什么是性能权衡?
拥有固定大小的交换文件有多大影响?
是不是换成交换分区会更长,但是如果它是交换文件,它在交换分区上时性能会更好?
什么对性能更好?靠近磁盘内部的分区将具有较慢的访问时间,我们必须等待驱动器在操作系统和交换分区之间切换。
另一方面,交换分区绕过所有文件系统,允许直接写入磁盘,这可能比文件更快。
什么是性能权衡?
拥有固定大小的交换文件有多大影响?
是不是换成交换分区会更长,但是如果它是交换文件,它在交换分区上时性能会更好?
在硬盘上,吞吐量和查找通常在靠近磁盘的开头更快,因为该数据存储在更靠近磁盘的外部区域,每个柱面有更多的扇区。因此,在磁盘开头创建交换可能会提高性能。
对于 2.6 Linux 内核,交换分区和未分段交换文件之间没有性能差异。当 swapon 启用交换分区/文件时,2.6 内核会查找交换文件存储在哪个磁盘块上,因此当需要交换时,它根本不必处理文件系统。
因此,如果交换文件没有碎片化,就好像在它的同一位置有一个交换分区。或者换一种说法,如果您使用原始交换分区,或者使用文件系统对其进行格式化,然后创建一个填充所有空间的交换文件,您将获得相同的性能,因为在该磁盘上的任何一种方式都有一个用于交换的连续区域,内核直接使用。
因此,如果在文件系统新鲜时创建交换文件(从而确保它没有碎片并且在卷的开头),则性能应该与在卷之前有一个交换分区相同。此外,如果有人在卷的中间创建交换文件,并且文件在任一侧,则可能会获得更好的性能,因为寻求交换的次数更少。
在 Linux 上,如果交换文件是未分段创建的,并且从不扩展,则它不会变成碎片,至少对于像 ext3/4 这样的普通文件系统来说是这样。它将始终使用相同的磁盘块,这些磁盘块是连续的。
我的结论是,专用交换分区的唯一好处是在您需要扩展它时保证不碎片化。如果您的交换永远不会扩展,则在新文件系统上创建的文件不需要额外的分区。
实际上,只要您不使用稀疏文件,它并没有太大的区别。
使用 dd 创建一个“普通”文件将在一次运行中分配文件(如果可能的话),而创建一个稀疏文件会告诉你你有一个 10GB 的文件,但实际上并没有用完所有空间。我不太确定 mkswap 是否不会分配空间,但通常交换文件会及时增长,因此不会分配连续扇区(如磁盘的一部分),而是根据需要分配块导致随着时间的推移碎片(当然取决于您对磁盘的使用)
在内部,Linux 内核或多或少会直接访问交换文件的底层块——我现在找不到链接,幕后发生了什么,除非有人能找到更官方的东西,否则你必须相信我。我现在能想到的只有:
这一切仅适用于 2.6 行的 Linux 内核。
如果您想要最佳性能(那是什么,真的吗?...交换很慢,期间。增加 RAM 以便您不会交换以获得最佳性能),您会想要使用分区。
这是一个有趣的问题,并且已经阅读了很多相同的内容。由于底层文件系统,通常交换分区优于文件。但是,如果您总是需要增加交换的大小,那么文件是一个更好的选择。在 kernel 2.4 之前,人们认为交换分区比文件快,但现在随着 kernel 2.6 的改进,性能几乎相同。
我也在网上找到的东西。
http://www.go2linux.org/swap-file-vs-swap-partition
和
http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html
我们工作的想法是,由于交换文件可能会变得碎片化,并且碎片会减慢交换访问的速度,因此分区是一种更好的方法。当然,定义一个静态大小的交换文件做同样的事情,但这只是主观上看起来更整洁。
这种方法是一种真正的方法吗?可能不会,因为这种做法是在将近 10 年前建立的。在这几年中,驱动技术的唯一重大变化是我们使用的 RAID 控制器的复杂性(我们对 SSD 的支持还不够丰富)。驱动器大小的增加意味着我们创建的交换分区比 18GB 驱动器标配时更接近驱动器的起始位置,因此交换速度甚至比过去更快。
当然,在我们基于 ESX 的 Windows 系统上,交换文件的位置完全没有实际意义。交换文件和物理磁盘盘片之间有很多虚拟化层,这无关紧要。但是我们将它保存在一个单独的分区上,因为这只是标准。
我认为在我们现在所处的阶段,除非您运行的笔记本电脑具有在挂起/睡眠时将数据写入交换的配置,否则交换应该被视为“最后的手段”。最好的办法是在一个盒子里放足够的 RAM,这样它就不会分页到磁盘。
话虽如此,分区可能是更好的方式,性能方面,虽然文件更灵活。只要确保它在 7200+ RPM 主轴上。
使用交换文件可能会为文件到内存的转换使用一些额外的内存。我们谈论的是每 1GB 交换不到 1MB 的内存。文件系统缓存不缓存交换的数据,只缓存组织数据,这应该是大部分额外的内存需求。
除此之外,我怀疑你会失去任何合理的性能,除非在 1000 次额外的头部搜索中可能只有一次。
有趣的事实是,将 zswap 与动态扩展的交换文件一起使用,可以在未使用时以非常低的成本显着加快交换操作。