it-swarm.cn

交换分区与文件以提高性能?

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

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

性能折衷是什么?

固定大小的交换文件有多少不同?

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

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

  2. 对于2.6 Linux内核,交换分区和磁盘分区之间没有性能差异。 不碎 交换文件。当通过swapon启用交换分区/文件时, 2.6内核会找到交换文件存储在哪个磁盘块上 ,因此在进行交换时,它不必处理文件系统。完全没有.

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

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

在Linux上,如果交换文件是无碎片地创建的,并且从未扩展,则至少在诸如ext3/4之类的普通文件系统中,它不会变得碎片化。它将始终使用连续的相同磁盘块。

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

33
Shay

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

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

在内部,Linux内核将或多或少地直接访问交换文件的基础块-我现在无法找到该链接的内幕,除非有人会找到更多官方的信息,否则您必须信任我。我现在能想到的是:

所有这些仅适用于2.6系列Linux内核。

如果您想要最佳性能(那是什么,真的吗?...交换速度很慢,周期。增加RAM,这样就不会交换最佳性能),则需要使用分区。

25
serverhorror

这是一个有趣的问题,并且已经阅读了很多有关该问题的文章。通常,由于基础文件系统的原因,交换分区比文件分区要好。但是,如果您始终需要增加交换大小,那么文件是一个更好的选择。在内核2.4之前,人们一直认为交换分区比文件快,但是现在随着内核2.6的改进,性能几乎相同。

我也在互联网上找到了一些东西。

http://www.go2linux.org/swap-file-vs-swap-partition

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html

3
Viky

我认为,在目前的阶段,除非您运行的笔记本电脑的配置在挂起/休眠时将数据写入交换区,否则交换区实际上应被视为“万不得已”。最好的选择是在框中放入足够的RAM),以使其永远不会分页到磁盘。

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

2
Matt Simmons

我们的工作思路是,由于Swap文件可能会变得碎片化,并且碎片化会减慢交换访问,因此分区是一种更好的方法。当然,定义一个静态大小的交换文件的功能大致相同,但这在主观上看起来更加整洁。

这是一种正确的方法吗?可能不是,因为这种做法是在10年前建立的。在过去的几年中,驱动器技术的唯一重大变化是我们使用的RAID控制器的复杂性(对于SSD来说,我们还不够丰富)。驱动器大小的增加意味着,与18GB驱动器出厂时的情况相比,我们创建的交换分区更接近驱动器的起点,因此交换速度甚至比以前更快。

当然,在我们基于ESX的Windows系统上,交换文件的位置完全没有意义。交换文件和物理磁盘盘片之间有太多的虚拟化层,这无关紧要。但是我们将其保留在单独的分区上,因为这只是标准。

2
sysadmin1138

使用交换文件可能会为文件到内存的转换使用一些额外的内存。我们正在谈论的是每1GB交换少于1MB的内存。文件系统缓存不缓存交换的数据,仅缓存组织数据,这应该是大多数额外的内存需求。

除此之外,我怀疑您是否会失去任何合理的性能,除非可能是单次额外寻道的1000倍。

有趣的事实是,将zswap与动态扩展的交换文件一起使用可显着提高交换操作的速度,而不用时的成本却很少。

0
Crass Spektakel