将“交换”分区放在“开头”比放在“结尾”更好吗?

我最近在一台RAID0(条带)设备上安装了Ubuntu 11.04,使用了备用安装光盘并手动分区了硬盘的ext4和swap分区。在这个过程中,我在一个论坛的指南中读到(不记得是哪个论坛了...)说将交换分区放在硬盘的开头可能会更好,原因是什么呢?
是不是因为交换分区在开头位置,所以访问速度更快,延迟更低?硬盘的“磁头”移动距离更短...
这让我感到困惑,因为我喜欢把硬盘比作武士刀(不是字面意思)!
有人告诉我,剑尖的最后一英寸或两英寸是最锋利的部分,因为它运动得最快。
(想象一下绳子上的球,当你把它甩起来时,绳子末端的球比靠近源头的球速度更快 - 你的手)
但是由于硬盘以(x)RPM的速度旋转,所以硬盘的外缘应该相对较快地旋转(+x),提供更快的读写速率。
交换位置是否会对性能产生影响?如果是,是将其放在开头以便立即访问更好,还是将其放在结尾以增加读/写速度?
我认为交换区的大小和位置应根据个人需求进行调整,但我该如何决定...
编辑:
需要注意的是,我的电脑有8GB的RAM(4x2GB),因此我注意到在我的地理信息系统(地图制作和分析)处理中未使用过交换空间。8GB是我的主板的全容量。

我以为硬盘最慢的部分是机械臂? - Allan
在这种情况下,与剑的比喻并不适用。当然,光盘的外缘旋转得最快,但是这个“优势”恰好被它需要行进的增加距离所抵消,因此光盘的外部部分和内部部分在同样的时间内完成一次革命。如果你真的成功获得了什么,那也是微乎其微到你根本察觉不到的程度。 - Kelley
@ Kelley 谢谢!这是一个很好的观点,因为有时我运行的进程可能需要几天才能完成,所以这些微/纳秒的累积可能会相加... - SaultDon
随着越来越多的人开始使用SSD,我觉得有趣的是有些人声称交换文件(或分区)对这些驱动器不好。https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04?comment=48109 - Alexis Wilke
7个回答

忘掉剑和系在绳子上的球。想象一堆CD盘,然后你会对硬盘有一个更接近实际情况的形象。 硬盘的维基百科页面 还要考虑计算机中的存储器量,并问一下,交换分区经常被使用吗?你的问题可能无关紧要。磁盘没有一个开始或者一个结束。它们有外缘和内缘。数据被放置在多个盘片上。寻道时间、访问时间以及旋转速度将任何答案都变成一个争论。
注意这个维基百科文章中关于HDD格式化的一点:
现代的HDD...在其接口上看起来是一组连续的逻辑块;通常为512字节长。
它只是看似有一个开始和一个结束。如果性能是一个问题,那么增加RAM的效果比交换分区的放置更大。

这解决了我对硬盘工作原理的困惑,谢谢。我的内存已经最大化了,目前硬盘每分钟转速为7200转,对我来说是可以接受的。 - SaultDon
我将这个标记为正确的答案,尽管其他回答也有其好处,但这一个简单而且通过讨论数据分散在“盘片”上真正澄清了问题。 - SaultDon

你应该使用RAM而不是SWAP,因为相比于RAM,SWAP速度非常慢。你可以将RAM用于睡眠模式。
当磁头从休眠位置移动时,访问磁盘的第一个或最后一个扇区的速度非常小(6-20毫秒),这不会影响你的体验。
如果你有很多次从SWAP读写的循环,以至于微小的间隔可能累积成可观的几分之一秒,那么你将持续从SWAP中读取数据,而不是从休眠位置重复移动,所以只有在外部扇区读取的位数多于内部扇区时,这才能成为一个论据。
但是你知道第一个块是在外部还是内部侧面吗?磁头在休眠位置又在哪里?
你确定更多的信息被放在外部扇区吗?也许那里的位数比例更宽,因为磁盘旋转得更快,所以每个扇区中的字节数是恒定的。至少维基百科(DE)的图表是这样暗示的。
然而,现代驱动器都有一个控制器,它向外界呈现为一个虚拟硬盘,并自行管理其内部结构,所以每个型号可能以不同的方式处理其几何结构。
如果您真的依赖于性能,您应该选择更多的内存,更多的内存,更多的内存。如果您无法为您的计算机获取更多的内存,您应该考虑购买一个更快的硬盘,而不是试图猜测其几何形状。

好的观点,我不知道第一个区块是在内侧还是外侧,刚开始使用Ubuntu,所以对整个Linux系统还不太熟悉。 - SaultDon
回答你的第二个问题,我不知道更多的信息是否存在于外部扇区,只是它可以从某些碎片整理工具中“放”进去(但根据我的理解,Linux并不真正需要进行碎片整理)。 - SaultDon
1请注意,休眠模式不使用RAM...您可能希望在回答中对此进行修改。 - Alexis Wilke

你可以使用“系统 > 管理 > 磁盘工具”(命令行中的“palimpsest”)来测量硬盘不同区域的速度:从列表中选择你的硬盘,然后点击“基准测试”。对于交换空间,请使用读写测试结果更为明显,但请注意该测试会擦除数据。生成的图表应该能让你了解硬盘内部性能差异。

不要紧,系统会花费大致相同的时间(可能是微秒甚至更短的延迟)。总之,无论是在开头还是结尾,你都不会察觉到交换的读写操作有什么区别。

我觉得结尾并不是特别重要,但以防万一,我会在我的常规机器上先处理它,而对于我的2U机架,它有4.5 TB的存储空间。其中,我用了360g来组成4个条带化的7200 Barracudas,用作交换文件和临时目录。

我进行了一项基准测试,以便亲自测试一些速度。在一个500G的ASMT硬盘上,我在开头和结尾创建了16G的分区。我在它们上面创建了ext2文件系统(没有日志记录)。测试了将一些文件复制到它们上面,并挂载为1和2。
# rm -r 1/{*,.*} 2/{*,.*} 2> /dev/null; time /bin/cp -a /mnt/4/Syncs/osmand/. 1; time /bin/cp -a /mnt/4/Syncs/osmand/. 2
real    0m3.500s
user    0m0.016s
sys     0m1.490s

real    0m21.152s
user    0m0.001s
sys     0m1.535s
# rm -r 1/{*,.*} 2/{*,.*} 2> /dev/null; time /bin/cp -a /mnt/4/Syncs/osmand/. 1; time /bin/cp -a /mnt/4/Syncs/osmand/. 2                                                              
real    0m4.721s
user    0m0.012s
sys     0m1.509s

real    0m19.691s
user    0m0.000s
sys     0m1.518s
# rm -r 1/{*,.*} 2/{*,.*} 2> /dev/null; time /bin/cp -a /mnt/4/Syncs/osmand/. 1; time /bin/cp -a /mnt/4/Syncs/osmand/. 2                                                                                               
real    0m4.784s
user    0m0.006s
sys     0m1.503s

real    0m19.664s
user    0m0.000s
sys     0m1.526s

在这些测试中,初始分区大约快了5倍。对于较大的测试,我经历了较小的差异,但是初始分区总是似乎更快。我怀疑在磁盘的末尾,写入可能更频繁地跨越多个碟片。

这完全无关紧要,差异只是几分之一秒而已。所以,如果你追求加载时间更快的几分之一秒,那么很可能最好选择开头部分。因为大部分时间都会读取开头到中间位置的内容。除非你的硬盘上有大量数据,那么在访问这些数据时,它将从离开头最远的位置开始读取...但归根结底,谁在乎呢。