Con*_*ion 12 linux performance filesystems io
当一个 Linux 服务器正在处理许多并发请求以读取许多不同的文件时,它是否:
查找 File_1,读取整个文件,然后查找 File_2,读取整个文件,然后查找 File_3,等等
查找 File_1,读取其中的一部分(直到预读值?),然后查找 File_2,读取其中的一部分,然后查找返回到 File_1 停止的地方,阅读更多内容,然后查找 File_3,等等,等等
如果是第 2 种情况,则服务器执行的搜索比必要的要多得多,这会显着减慢速度。在这种情况下,我可以做任何调整吗?
Paw*_*cki 14
在磁盘 I/O 中有一种叫做电梯的东西。磁盘子系统试图避免整个盘片上的磁盘磁头颠簸。它将重新排序 I/O 请求(当未被屏障禁止时),以便磁头从磁盘内部移动到外部,然后返回,在途中执行请求的 I/O。
第二件事是 I/O 请求合并。如果在短时间内有很多请求访问文件的不同部分,I/O 子系统将尝试一次性获取所有数据,而不是发出多个不连贯的请求。
就调谐而言。如果您是应用程序编写者,您可以做很多事情。您可以随时发出大型顺序 I/O,并使用 fsync() 等。当您需要确保数据在盘片上时。
如果您是系统管理员,并且您绝对知道,2 个应用程序的数据请求会发生跳跃,并且它们会尝试按顺序读取文件(例如,您有 2 张 DVD 并行转码),那么是的,增加预读应该会有所帮助。否则,在进行任何调整之前,您需要查看您的 I/O 模式和大小,考虑您的 RAID 级别(如果有)和其他因素。看看你真正的瓶颈是什么,在你开始调优之前,可能很难猜测是什么真正限制了你的系统。