ext4 commit= 安装选项和 dirty_writeback_centisecs

ext4 commit= mount option and dirty_writeback_centisecs

我想了解字节从 write() 到物理磁盘的方式,以调整我的图片服务器性能。

我不明白的是这两者之间的区别是什么:commit= 挂载选项和 dirty_writeback_centisecs .看起来它们将更改写入存储设备的过程大致相同,但仍然不同。

我不清楚在我的字节到磁盘的途中哪个先触发。

是的,我只是 运行 调查了在 ARM Chromebook 上安装 SDCard Ubuntu 的安装选项。这是我可以告诉你的...... 以下是查看脏量和回写量的方法:

user@chrubuntu:~$ cat /proc/meminfo | grep "Dirty" -A1
Dirty:             14232 kB
Writeback:          4608 kB

(edit: 这个dirty和writeback相当高,我运行这个的时候编译了运行ning.)

所以要写出的数据是脏的。仍然可以消除脏数据(如果说,在写回之前创建、使用和删除了一个临时文件,则永远不必将其写出)。当脏数据被移入写回时,内核会尝试将可能变成脏数据的较小请求组合成单个较大的 I/O 请求,这是 dirty_expire_centisecs 通常不会设置得太低的原因之一。当 a) 足够的数据被缓存以达到 vm.dirty_background_ratio 时,脏数据通常被放入写回。 b) 当数据达到 vm.dirty_writeback_centisecs 厘秒时(3000 默认为 30 秒),它被放入写回。 vm.dirty_writeback_centisecs,默认情况下,写回守护进程 运行 每 500 厘秒(5 秒)实际刷新回写中的任何内容。

fsync 将清除单个文件(强制它从脏文件进入写回并等待它从写回中清除),sync 对所有文件执行此操作。据我所知,它会尽快执行此操作,绕过任何试图平衡磁盘读写的尝试,它会使设备停止执行 100% 写入,直到同步完成。

commit=5 默认的 ext4 安装选项实际上在该文件系统上每 5 秒强制执行一次 sync()。这是为了确保在大量读取 activity 时写入不会过度延迟(如果断电或其他原因,理想情况下最多丢失 5 秒的数据。)我在 Ubuntu 安装时发现的SDCard(在 Chromebook 中)是这实际上只会导致大量文件系统停顿,如果您向卡写入大量内容,每 5 秒就会停顿一次,ChromeOS 使用 commit=600 并且我应用 Ubuntu-side 效果很好。

dirty_writeback_centisecs配置内核Linux相关的虚拟内存守护进程(这就是vm的原因)。它们负责从 RAM 内存回写到所有存储设备,因此如果您配置 dirty_writeback_centisecs 并且您的系统上安装了 25 个不同的存储设备,它将具有相同的回写时间对于所有 25 个存储系统。 虽然提交是按存储设备(实际上是按文件系统)完成的,并且与同步过程相关,而不是与虚拟内存中的守护进程相关。 所以你可以看到它:

dirty_writeback_centisecs 从 RAM 写入所有文件系统

提交 每个文件系统从 RAM

中获取