tsh*_*ang 19 linux performance kernel io
我一直不明白为什么高磁盘 I/O 会如此减慢系统速度。这对我来说很奇怪,因为我预计减速只会影响那些依赖于硬盘/光驱数据的进程,但减速甚至会影响加载到 RAM 上的内容。我在这里指的是iowait。
为什么处理器要等待,而不是做其他工作?谁能解释这个限制以及为什么它没有在 Linux 内核中解决?有没有没有这个问题的内核?
操作系统使用虚拟内存,因此可以使用比可用物理 RAM 多的内存。当内核决定更好地使用物理内存页面时,其内容可能会被“调出”以存储在磁盘上。当这样一个虚拟内存页面在调出时被访问,它会产生一个页面错误并从磁盘移回 RAM。
页面错误对性能来说是一场灾难,因为磁盘延迟以毫秒为单位,而 RAM 延迟以纳秒为单位。(1 毫秒 = 一百万纳秒!)
内存不仅被用户进程使用,而且被内核用于文件系统缓存之类的事情。在文件系统活动期间,内核将缓存最近使用的数据。假设很可能很快就会再次使用相同的数据,因此缓存应该可以提高 I/O 性能。
用于文件系统缓存的物理内存不能用于进程,因此在文件系统活动期间,更多的进程内存将被调出,页面错误会增加。此外,更少的磁盘 I/O 带宽可用于在磁盘之间移动内存页面。因此,进程可能会停止。