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