我正在使用rtorrent在安装在树莓派上的SD卡上下载文件,大约6MB / s(带宽上限)。用户进程不会刷新数据本身,刷新磁盘高速缓存的时间间隔取决于sysctl值。
使用iostat和nload我可以看到网络带宽和磁盘写入配置文件:
磁盘:
20M/s .....x.....x....xx...
.....x....xx....xx...
....xx....xx....xx...
0M/s ....xx....xx....xx...
网络:
5M/s ..xxx....x.. x.....x.
.xxxx...xx..xxx...xxx
0M/s xxxxx...xxx.xxx...xxx
显然,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秒刷新一次就足够了。