通过使用多个设备来减少磁盘 io 阻塞?

通过使用多个设备来减少磁盘 io 阻塞?

我在同一设备上运行一个 Web 服务器,并在 apache 中运行了几个 Web 应用程序。

有一天,我必须在一个包含超过 100 000 个文件的文件夹上运行 achown -R和 a 。chmod -R这花了一些时间,我意识到磁盘IO导致所有应用程序在很长一段时间内运行速度极慢。命令完成后的几分钟内,CPU 使用率也很高。

使用多个设备会减少磁盘 IO 阻塞吗?

如果我将每个应用程序放在不同的设备上,磁盘 IO 是否会以相同的方式影响服务器的整体性能?

磁盘 IO 阻塞是按磁盘划分还是按整个系统划分?

答案1

机械存储设备速度很慢,因为它们是机械的。 (其他非机械存储设备也可能很慢,但原因不同且方式不同。)机械磁盘上​​的每个 I/O 操作都需要固定的时间(寻道时间,以毫秒为单位)来定位磁盘上的位置,加上传输数据的可变时间(通常在 40 到 200 MiB/秒之间,具体取决于磁盘的特性)。当执行许多小操作时,寻道时间占主导地位;单个旋转磁盘每秒只能进行数百次 I/O 操作 (IOPS) - 昂贵的 15 kRPM SAS 磁盘可实现约 200 IOPS,常规 7.2 kRPM SATA 磁盘可实现 100 IOPS,而小型廉价的 5.4 kRPM磁盘大约为70。

使用多个磁盘可能会有所帮助——前提是 I/O 操作分布在可用磁盘中。在可用磁盘之间分配 I/O 操作可以通过适当的软件或硬件配置自动执行。使用专用硬件,例如通过连接的存储阵列存储区域网络企业级应用首选;对于私人用途,常见的方法是使用软件袭击;一个好的起点是Linux磁盘阵列维基百科。 RAID 可以提高吞吐量和/或可靠性;如果目标是提高吞吐量,那么您应该考虑带条带化的 RAID 级别,例如 RAID 0 和 RAID 10。

答案2

我认为问题在于大多数文件系统不能很好地支持这么多文件。

所以尽量不要在一个目录下有那么多文件,而是分成子目录。

当您执行缓慢的操作时,您可以nice/renice这样做chmod,以免它对网络服务器造成太大干扰。但正如我在第一段中所写,这是许多文件的问题,因此过多的锁定和内核模式下的时间,这并不能真正解决。

拥有其他设备可能会有所帮助,但恕我直言,由于目录巨大,真正的 IO 并不比内核操作那么多。

[注意:移动超大文件不会导致速度减慢,因此不仅仅是 I/O 问题]

相关内容