为什么写入文件时我没有看到“脏”内存有任何增加?

为什么写入文件时我没有看到“脏”内存有任何增加?

今天我读了很多关于“回写”机制的文章,想尝试一个实验。

编辑:从互联网下载的文件显示在Dirty统计信息中

根据评论,我尝试从互联网下载一个文件,看看这是否是dd.

事实上,似乎通过下载的文件wget更改Dirty/proc/meminfo.

Dirty文件下载后,大小从几百 KB 变为 5 MB。它保持这种状态至少10秒(有时 20 秒以上)这仍然很有趣,因为我预计该间隔小于 5 秒(基于vm.dirty_writeback_centisecs)。 Writeback(据我所知)保持 0 kB。

运行手表:

Every 1.0s: grep -e Dirty -e Writeback /proc/meminfo                                                                                                                                                                                                                                     ubuntu-18: Tue Apr 20 13:32:31 2021

Dirty:              5044 kB
Writeback:             0 kB
WritebackTmp:          0 kB

下载文件:

root@ubuntu-18:~# wget https://www.stats.govt.nz/assets/Uploads/Annual-enterprise-survey/Annual-enterprise-survey-2019-financial-year-provisional/Download-data/annual-enterprise-survey-2019-financial-year-provisional-csv.csv
...
2021-04-20 13:27:11 (2.03 MB/s) - ‘annual-enterprise-survey-2019-financial-year-provisional-csv.csv’ saved [5134576/5134576]

生成的文件dd- 对统计数据没有影响Dirty,除非文件真的很大

我使用 生成了 10MB 和 100MB 文件dd并观看了/proc/meminfo.但我没有注意到Dirty内存有任何显着增加:

dd if=/dev/zero of=file.txt count=100 bs=1M

# watching /proc/meminfo while before, during, and after `dd` is executed
Every 1.0s: grep -e Dirty -e Writeback /proc/meminfo                                                                                                                                                         ubuntu-18: Tue Apr 20 08:06:35 2021

Dirty:               280 kB
Writeback:             0 kB
WritebackTmp:          0 kB

这种行为有什么原因吗?我认为,根据这些设置(vm.dirty_writeback_centisecs),脏内存被写回磁盘之前应该需要最多 5 秒的时间:

 sysctl -a | grep dirty
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

现在,当我尝试生成 1GB 文件时,我发现Dirty内存大小有所增加,但仅限于dd运行时。dd完成其工作后,它会立即下降到非常小的值。

我多次尝试使用较小和较大的文件大小。

我在带有 Ubuntu 的 Hetzner Cloud VM 机器上运行所有这些:

root@ubuntu-18:~# uname -a
Linux ubuntu-18 5.4.0-40-generic #44-Ubuntu SMP Tue Jun 23 00:01:04 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

root@ubuntu-18:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

资源

我简要检查过的资源(也许其中一些有我错过或不理解的解释):

相关内容