小编pat*_*lea的帖子

调整linux磁盘刷新间隔以避免阻塞用户进程

我正在使用 rtorrent 下载安装在树莓派上的 SD 卡上的文件,速度约为 6MB/s(带宽上限)。用户进程本身不会刷新数据,刷新磁盘缓存的时间间隔取决于 sysctl 值。

使用 iostat 和 nload 我可以看到网络带宽和磁盘写入配置文件:

磁盘:

20M/s .....x.....x....xx...
      .....x....xx....xx...
      ....xx....xx....xx...
0M/s  ....xx....xx....xx...
Run Code Online (Sandbox Code Playgroud)

网络:

5M/s  ..xxx....x.. x.....x.
      .xxxx...xx..xxx...xxx
0M/s  xxxxx...xxx.xxx...xxx
Run Code Online (Sandbox Code Playgroud)

显然,IO 写入器在刷新期间总是暂停。这是一个 4 核 CPU,其中 3 核永久空闲,并且在刷新期间 top 表示 100% iowait。

如果我while true; do sync; sleep 1; done在下载时这样做,磁盘刷新会以每秒 6MB 的速度平滑。并且下载器进程不会被阻塞,因此带宽是恒定的。

我可以通过以下方式获得相同的效果:

/proc/sys/vm/dirty_writeback_centisecs: 磁盘缓存刷新的频率 - 单位为 100 秒;默认值:500

以及/proc/sys/vm/dirty_expire_centisecs: 一个页面必须多大才能在 100 秒内刷新;默认值:3000

将它们分别设置为 100 和 200 可实现相同的均匀磁盘刷新配置文件和恒定的下载带宽。

有没有办法使这种调整自动进行,即尽可能频繁地刷新以避免阻塞写入进程?例如,如果下载速度为 1MB/s,那么每 5 秒刷新一次可能就足够了。

networking linux cache rtorrent performance-tuning

5
推荐指数
1
解决办法
6620
查看次数

标签 统计

cache ×1

linux ×1

networking ×1

performance-tuning ×1

rtorrent ×1