我从未完全理解为什么高磁盘I / O会导致系统速度如此之慢。对我来说这很奇怪,因为我希望减速只会影响那些依赖于硬盘/光盘数据的进程,但是减速甚至会影响加载到RAM上的内容。我在这里指的是iowait。
为什么处理器要等待而不是做其他工作?谁能解释这个限制以及为什么Linux内核没有解决这个限制?是否有没有这个问题的内核?
[ note ] 在此性能领域中已经取得了一些进展。一方面,后面的内核(在我的例子中为2.6.37)响应更快。
我从未完全理解为什么高磁盘I / O会导致系统速度如此之慢。对我来说这很奇怪,因为我希望减速只会影响那些依赖于硬盘/光盘数据的进程,但是减速甚至会影响加载到RAM上的内容。我在这里指的是iowait。
为什么处理器要等待而不是做其他工作?谁能解释这个限制以及为什么Linux内核没有解决这个限制?是否有没有这个问题的内核?
[ note ] 在此性能领域中已经取得了一些进展。一方面,后面的内核(在我的例子中为2.6.37)响应更快。
Answers:
操作系统利用虚拟内存,因此可以使用的内存多于可用的物理RAM。当内核决定更好地使用物理内存页面时,可以将其内容“调出”以存储在磁盘上。当在页面调出时访问这种虚拟内存页面时,它将产生页面错误并将其从磁盘移回RAM。
页面错误是性能的灾难,因为磁盘延迟以毫秒为单位,而RAM延迟以纳秒为单位。(1毫秒=百万纳秒!)
内存不仅由用户进程使用,而且由内核用于文件系统缓存之类的事情。在文件系统活动期间,内核将缓存最近使用的数据。假设很可能很快会再次使用相同的数据,因此缓存应可提高I / O性能。
用于文件系统高速缓存的物理内存不能用于进程,因此在文件系统活动期间,更多的进程内存将被调出,并且页面错误将增加。同样,更少的磁盘I / O带宽可用于将内存页面从磁盘移至磁盘或从磁盘移至磁盘。结果,进程可能会停顿。