我有一块 500 Gb 的磁盘,想确定将它们分成三个分区是否会对 Linux 的性能产生影响。例如,如果有多个线程写入同一磁盘上的不同分区,如果第一个线程正在写入磁盘 1 中的分区 1,那么第二个线程是否必须等待才能写入同一磁盘上的分区 2?
答案1
磁盘是带有物理写入头的物理设备(暂时忽略 SSD)。它一次只能写入一个位置。多个尝试同时写入的线程会相互竞争,实际上会使整体速度变慢,因为磁头必须更多地寻找正确的位置。最快的写入是在相邻扇区中进行一次长而连续的右向写入。
SSD 没有物理方面的问题,但它们的 IO 速度确实有限制。添加线程不会改变底层瓶颈,因此不会提高速度。
这一切都假设给定线程已准备好以最大速度写入。如果应用程序依赖于其他资源(用户输入、网络),则添加线程可能会使其写入速度更快,因为这些线程正在做更多工作来“排队”要写入磁盘的数据。
答案2
不,恰恰相反。普通磁性硬盘在写入磁盘上彼此靠近的区域时性能最佳。考虑一个简单的情况,即写入两个大文件,一次写入磁盘上几乎相同的区域,一次写入非常远的部分。在第一种情况下,写入磁头几乎可以连续移动,在后一种情况下,在两个远距离点之间移动磁头需要花费相当多的时间。
常见的文件系统驱动程序已经高度优化,可以合理地决定何时何地继续写入。如果您同时向磁盘的完全不同区域写入数据,使用文件系统驱动程序的两个实例,每个实例对未完成的写入都有各自的有限视图,那么许多优化都会失效。
即使是 SSD(无需花费更多时间处理物理距离)在一次写入大面积区域时(仅跨越整个块,而不是在这里进行小写入,然后在那里进行小写入),性能也会更好。因此,即使在 SSD 的情况下,您也可以预期单个文件系统的性能仍优于单独分区上的多个文件系统。
如果您对分区的想法也来自于希望确保一个文件系统已满不会阻止对其他文件系统的写入(为每个文件夹保留不同的最大空间) - 对于单文件系统也有解决方案。 在这种情况下,您要寻找的关键字是配额。