我使用的是 SMR(叠瓦式磁记录)磁盘。众所周知,该技术在非顺序写入操作上表现不佳。
顺序写入操作的速度相当快:
fio --name TEST --eta-newline=5s --filename=temp.file --rw=write --size=2g --io_size=10g --blocksize=1024k --ioengine^Cibaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
...
WRITE: bw=121MiB/s (127MB/s), 121MiB/s-121MiB/s (127MB/s-127MB/s), io=7276MiB (7629MB), run=60217-60217msec
非顺序写入操作很慢:
fio --name TEST --eta-newline=5s --filename=temp.file --rw=randwrite --size=2g --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=32 --runtime=60 --group_reporting
...
WRITE: bw=510KiB/s (522kB/s), 510KiB/s-510KiB/s (522kB/s-522kB/s), io=30.1MiB (31.6MB), run=60427-60427msec
比率为237。
我在用着:
echo 30 > /proc/sys/vm/vfs_cache_pressure
echo 100 > /proc/sys/vm/dirty_ratio
echo 100 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
mount -o noatime,nodiratime
在剧烈rsync
活动中我观察到:
- 阅读
collectl
质量好,写作质量差; - dirty field
/proc/meminfo
不超过3G,buff/cache约12G。
我想不平衡页面缓存以支持写入操作,并防止读取操作从缓存中刷新写入的页面。我希望rsync
通过写入序列的缓存分组来看到执行方面的改进。
有什么办法可以做到这样的不平衡吗?我知道这不是很好的调整,只是为了测试。