为什么高磁盘I / O会降低系统响应速度/性能?


19

我从未完全理解为什么高磁盘I / O会导致系统速度如此之慢。对我来说这很奇怪,因为我希望减速只会影响那些依赖于硬盘/光盘数据的进程,但是减速甚至会影响加载到RAM上的内容。我在这里指的是iowait

为什么处理器要等待而不是做其他工作?谁能解释这个限制以及为什么Linux内核没有解决这个限制?是否有没有这个问题的内核?

[ note ] 在此性能领域中已经取得了一些进展。一方面,后面的内核(在我的例子中为2.6.37)响应更快。


xeno并没有完全解释您上次询问时Linux内核中如何解决此问题的吗?
Michael Mrozek

2
考虑到这些修改,我认为目的是让上一个问题与解决问题的进展有关,而这个问题与问题存在的原因有关。
史蒂文D

@mic史蒂文是对的。我们就上一个问题的含义进行了长时间的讨论。xeno的回答是如此之好,以至于我对问题进行了编辑以适合它,然后我在这里重新提出了原始问题。
tshepang 2011年

我理解,但是您的问题似乎与另一个问题相矛盾。在这里,您说“任何人都可以解释这个限制,为什么它不能在Linux内核中得到解决?那里有没有这个问题的内核?”,但是xeno的回答始于“我认为大部分已经解决了。”
Michael Mrozek

@mic不是。内核仍然执行iowait,这意味着它仍在等待。我认为xeno的答案是随着系统响应能力的提高。正如我在问题上所指出的,我同意。
tshepang 2011年

Answers:


9

操作系统利用虚拟内存,因此可以使用的内存多于可用的物理RAM。当内核决定更好地使用物理内存页面时,可以将其内容“调出”以存储在磁盘上。当在页面调出时访问这种虚拟内存页面时,它将产生页面错误并将其从磁盘移回RAM。

页面错误是性能的灾难,因为磁盘延迟以毫秒为单位,而RAM延迟以纳秒为单位。(1毫秒=百万纳秒!)

内存不仅由用户进程使用,而且由内核用于文件系统缓存之类的事情。在文件系统活动期间,内核将缓存最近使用的数据。假设很可能很快会再次使用相同的数据,因此缓存应可提高I / O性能。

用于文件系统高速缓存的物理内存不能用于进程,因此在文件系统活动期间,更多的进程内存将被调出,并且页面错误将增加。同样,更少的磁盘I / O带宽可用于将内存页面从磁盘移至磁盘或从磁盘移至磁盘。结果,进程可能会停顿。


我知道这和污垢一样古老,但是根据输入的方式,大量的I / O可能会导致生成大量中断,并且导致上下文切换浪费CPU时间。
布拉奇利

5

据我了解,IOwait意味着进程(而不是处理器)正在等待IO可用。处理器获得的速度比硬盘驱动器快得多,这意味着更多的代码将更快地完成,然后需要读取磁盘。如果需要读取的驱动器速度不够快,那么您将不得不等待处理器。决定谁读取/写入磁盘的方式由块调度程序决定,在大多数情况下为CFQ。如果您使用的是CFQ,并且需要一个过程来减少总的IO时间来提高系统响应速度,则可以使用ionice -c3 <processid>。这告诉系统仅在没有其他需求时才给该进程IO。

仍然很有趣,并且可以更好地解释iowait问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.