限制每个进程的脏字节而不减慢整个系统的速度

限制每个进程的脏字节而不减慢整个系统的速度

给定一个繁忙的系统,安装了一个非常快的块设备(高端 NVMe raid,2 GB/s 写入,4 GB/s 读取)/data和一个非常慢的设备(具有旋转 8 TB 磁盘的 USB HDD,50 MB/s 写入, 60 MB/s 读取)安装在/backup,如何限制进程读取和写入/backup而不牺牲 的 I/O /data

据我所知,问题是linux只有全球的旋钮dirty_background_bytesdirty_bytes.如果我将这些限制设置为 NVMe 的合理值(实际上约为 2 GB 和 4 GB),则吞吐量很好,直到某个进程(例如rsync)开始向 USB 写入大量数据。在这种情况下,dirty_background将充满进入 USB 设备的数据,并且rsync不会弄脏更多页面。然而,这会导致写入快速设备的进程大幅减慢,因为dirty_background这是全局限制并且在快速设备和慢速设备之间共享。我知道我可以根据最慢的连接到系统的设备,这将避免巨大的停顿,但会牺牲更快设备的一些吞吐量。

是否有相当于dirty_background_bytes单个块设备的东西?放慢速度确实毫无意义全部进程写入以防/data速度/backup缓慢并被其他进程访问。

我知道cgroup可以用来手动执行此操作(如何将每个进程 I/O 限制到最大限制?)。但是,我想调整每个块设备的大小,并且在减慢整个系统速度之前应该限制访问所述设备的所有进程。如果一个进程同时向快速设备和慢速设备写入数据,则只有当向慢速设备写入太多数据时,它才会减慢速度。

相关内容