为什么高IO率操作会降低linux上的所有内容?

Dav*_*eau 16 linux multicore

这可能只是稍微OT,但我想知道为什么有一个大量使用IO的进程(比如cp大文件从一个位置到另一个位置在同一个磁盘上)会减慢一切,甚至是主要受CPU限制的进程.我注意到在两个操作系统上我都大量使用(mac os x和linux).

特别是,我想知道为什么多核在这里没有真正帮助:它是商品硬件(磁盘控制器等)的硬件限制,操作系统限制,还是存在分配正确资源的某些内容(调度)?

小智 5

这可能是当前调度程序的限制。谷歌“Galbraith 的 sched:autogroup 补丁”或“linux 奇迹补丁”(是的!)。显然有一个 200 行的补丁正在改进和合并的过程中增加了组调度,Linus 说

我也很满意它对交互性能的作用。诚然,我的“测试用例”真的很简单(在网络浏览器中阅读电子邮件,滚动一点,同时在内核上执行“make -j64”),但它是一个非常相关的测试用例为了我。这是一个巨大的进步。

前后视频在这里


Mar*_*rkR 2

因为,复制大文件(大于可用缓冲区高速缓存)通常涉及将其带入缓冲区高速缓存,这通常会导致最近较少使用的页面被丢弃,然后必须将其带回。

其他偶尔进行少量 IO 的进程(比如只是统计一个目录)然后会将其缓存全部清除,并且必须进行物理读取以将这些页面带回。

希望这可以通过复制命令来解决,该命令可以检测这种情况并相应地建议内核(例如使用 posix_fadvise),以便不需要随后读取的文件的大量一次性批量传输不会完全完成丢弃缓冲区高速缓存中的所有干净页面,这通常是现在发生的情况。