这可能只是稍微OT,但我想知道为什么有一个大量使用IO的进程(比如cp大文件从一个位置到另一个位置在同一个磁盘上)会减慢一切,甚至是主要受CPU限制的进程.我注意到在两个操作系统上我都大量使用(mac os x和linux).
特别是,我想知道为什么多核在这里没有真正帮助:它是商品硬件(磁盘控制器等)的硬件限制,操作系统限制,还是存在分配正确资源的某些内容(调度)?
因为,复制大文件(大于可用缓冲区高速缓存)通常涉及将其带入缓冲区高速缓存,这通常会导致最近较少使用的页面被丢弃,然后必须将其带回。
其他偶尔进行少量 IO 的进程(比如只是统计一个目录)然后会将其缓存全部清除,并且必须进行物理读取以将这些页面带回。
希望这可以通过复制命令来解决,该命令可以检测这种情况并相应地建议内核(例如使用 posix_fadvise),以便不需要随后读取的文件的大量一次性批量传输不会完全完成丢弃缓冲区高速缓存中的所有干净页面,这通常是现在发生的情况。