Mik*_*nen 5 linux performance scheduling io limit
假设一个繁忙的系统安装了一个非常快的块设备(高端 NVMe RAID,2 GB/s 写入,4 GB/s 读取)/data
和一个非常慢的设备(USB HDD 与旋转 8 TB 磁盘,50 MB/s 写入, 60 MB/s 读取)安装在 上/backup
,如何在/backup
不牺牲 I/O 的情况下限制进程读取和写入/data
?
据我所知,问题是 linux 只有全局旋钮dirty_background_bytes
和dirty_bytes
. 如果我将这些限制设置为 NVMe 的合理值(实际上大约为 2 GB 和 4 GB),则吞吐量很好,直到进程(例如rsync
)开始向 USB 写入大量数据。在这种情况下dirty_background
,填充了数据到 USB 设备并rsync
停止污染更多页面。但是,这会导致写入快速设备的进程大幅减慢,因为这dirty_background
是全局限制并在快速和慢速设备之间共享。我知道我可以根据连接到系统的最慢设备来限制脏字节,这将避免巨大的停顿,但会牺牲更快设备的一些吞吐量。
是否有等效dirty_background_bytes
于单个块设备?减慢所有写入的进程真的是零意义的/data
,以防/backup
它很慢并且被其他进程访问。
我知道cgroup
可以用来手动执行此操作(如何将每个进程 I/O 限制到最大限制?)。但是,我想对每个块设备进行调整,并且在降低整个系统的速度之前,应该限制访问所述设备的所有进程。如果进程同时写入快速和慢速设备,则只有在向慢速设备写入过多内容时,它才会变慢。