我已经研究了一段时间了,但事情并不符合我的期望,但我不知道是因为有什么不对,还是我的期望是错误的。
所以,我有一个内存超过 100GB 的系统,我将我的内存设置dirty_background_bytes
为 9663676416(9GB)和dirty_bytes
两倍(19327352832 或 18GB)
在我看来,这应该让我最多可以将 9GB 写入文件,但实际上它只是位于内存中,不需要访问磁盘。Mydirty_expire_centisecs
是默认值3000
(30 秒)。
所以当我运行时:
# dd if=/dev/zero of=/data/disk_test bs=1M count=2000
Run Code Online (Sandbox Code Playgroud)
并跑了:
# while sleep 5; do egrep 'Dirty|Writeback' /proc/meminfo | awk '{print $2;}' | xargs; done
Run Code Online (Sandbox Code Playgroud)
(以 kb 为单位打印脏字节,以 kb 为单位打印回写,在 5 秒快照时以 kb 为单位打印 WritebackTmp)
我本来希望看到它转储 2GB 到页面缓存中,在那里等待 30 秒,然后开始将数据写入磁盘(因为它从未超过 9GB 背景比率)
相反,我看到的是:
3716 0 0
4948 0 0
3536 0 0
1801912 18492 0
558664 31860 0
7244 0 0
8404 0 …
Run Code Online (Sandbox Code Playgroud)