交换分区与文件的性能?

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

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

什么是性能交易?

有一个固定大小的交换文件有多大作用有多大?

是不是转换到交换分区的时间会更长,但是如果交换分区是交换分区,交换分区的性能会更好?

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

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

    在内部,Linux内核将直接访问交换文件的底层块 – 我现在无法find链接的底下是什么,你必须相信我,除非有人find更正式的东西。 我现在所能想出的是:

    • 关于slashdot的讨论
    • 维基百科分页文章
    • Ubuntu的一些常见问题

    这全部适用于2.6内核版本的Linux内核。

    如果你想要最佳的性能(那是什么,真的?交换是慢的,周期。增加内存,所以你不交换最佳性能),你会想要使用一个分区。

    1. 在硬盘上,吞吐量和查找速度通常比磁盘开始更快,因为这些数据存储在更靠近磁盘外部区域,每个磁盘有更多的扇区。 因此,在磁盘开始创build交换可能会提高性能。

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

    因此,如果交换文件不是分段的,就好像在同一个位置有一个交换分区。 换句话说,如果你使用一个交换分区raw,或者用一个文件系统格式化,然后创build一个填充所有空间的交换文件,你将得到相同的性能,因为在该磁盘上的任何一个方式都有一个连续的区域用于交换,内核直接使用。

    因此,如果在文件系统是新鲜的时候创build交换文件(因此确保它不是分段的并且在卷的开始处),则性能应该与在卷之前具有交换分区相同。 而且,如果在卷的中间创build交换文件,并且在任何一方都有文件,那么可能会获得更好的性能,因为交换的次数更less。

    在Linux上,如果交换文件被创build为非碎片化,并且永远不会被扩展,那么至less在像ext3 / 4这样的普通文件系统中是不能碎片化的。 它将始终使用相同的磁盘块。

    我得出这样的结论:关于专用交换分区的唯一好处是,当需要扩展分区时,可以保证不分区; 如果你的交换不会被扩展,那么在新的文件系统上创build的文件不需要额外的分区。

    我认为在现在的阶段,除非你正在运行一台笔记本电脑,当它挂起/睡眠时将数据写入交换,交换应该被认为是“最后的手段”。 你最好的select是把足够的内存放在一个盒子里,这样它就不会被分页到磁盘。

    话虽如此,分区可能是更好的方法,性能明智,虽然文件更灵活。 只要确保它在7200+ RPM转轴上。

    这是一个有趣的问题,并已经读了很多关于这个问题。 由于底层的文件系统,通常交换分区比文件更好。 但是,如果你总是需要增加交换的大小,那么文件是一个更好的select。 直到内核2.4被认为交换分区比文件快,但现在随着内核2.6的改进,性能几乎相同。

    我在网上find的东西也是如此。

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

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

    我们工作的思想是,由于Swap文件可能变得碎片化,并且碎片会降低交换访问的速度,所以分区是更好的方法。 当然,定义一个静态大小的交换文件也是一样,但是这看起来似乎更主观。

    这种方法是唯一的方法吗? 可能不会,因为这种做法是在接近10年前build立的。 在这个年份里,驱动技术的唯一重大变化是我们使用的RAID控制器的复杂性(我们对于SSD还不够丰富)。 驱动器大小的增加意味着我们创build的交换分区比18GB驱动器正常运行时的驱动器启动更靠近硬盘启动,因此交换速度甚至比以前更快。

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

    使用交换文件可能会使用一些额外的内存来进行文件到内存的转换。 我们正在谈论每1GB交换less于1MB的内存。 文件系统caching不caching交换的数据,只caching组织数据,这应该是大部分额外的内存需求。

    除此之外,我怀疑你会失去任何合理的performance,除了可能只有一次额外的头追1000次。

    有趣的是,将zswap与dynamic扩展的交换文件结合使用,可以在不使用的情况下以非常低的成本加快交换操作。