大型文件复制导致用户线程无法在 CPU 上调度

大型文件复制导致用户线程无法在 CPU 上调度

我们正在运行带有 Linux 内核 4.15.0-36-generic 的 Xenial (16.04),并运行一个循环执行以下操作的脚本

  1. 将文件从磁盘上的一个位置复制到另一个位置。
  2. 将上述文件通过 SFTP 传输到外部服务器

Ubuntu rootfs 运行的是 btrfs,并且复制的文件大小通常在 2GB 左右。

我们看到,当脚本在系统上处于活动状态时,用户级线程的延迟很高。延迟在 1 秒到 3 秒的范围内。如果文件大小增加到 10GB,线程延迟在 10 到 20 秒的范围内

更多细节:

磁盘类型为 SSD,系统具有 64GB RAM。使用以下选项安装 Btrfs 文件系统:

rw,noatime,compress=lzo,ssd,space_cache

VM sysctl 选项包括

vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
vm.dirtytime_expire_seconds = 43200

我们希望磁盘活动不要冻结用户线程,因为它们对我们来说至关重要。

更新更多信息:

添加更多信息。当我们将 sysctl VM 选项修改为更激进的选项(如下)时,情况会变得更好。

sysctl -w vm.dirty_background_ratio=1
sysctl -w vm.dirty_ratio=2
sysctl -w vm.dirty_expire_centisecs=1000
sysctl -w vm.dirty_writeback_centisecs=100

上述设置有意义吗?或者我们需要将 IO 调度程序更改为默认的 [CFQ] 以外的其他程序?

相关内容