私のワークロードは、短い期間の書き込みバースト比が非常に高いです。ターゲットディスクはかなり遅いですが、RAMが十分で一時的なデータ損失に非常に寛大です。
ダーティページで利用可能なRAMスペースを最大にするために、vm.dirty_ratioを調整してみました。
# free -g
total used free shared buff/cache available
Mem: 251 7 213 3 30 239
Swap: 0 0 0
# sysctl -a | grep -i dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 90000
vm.dirty_ratio = 90
ただし、デフォルトのディスク速度によっては、一部の書き込み保存制限がまだ発生しているようです。この機能を無効にするにはどうすればよいですか?
# dd if=/dev/zero of=/home/me/foo.txt bs=4K count=100000 oflag=nonblock
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 10.2175 s, 40.1 MB/s
空きメモリがあり、ダーティ率を超えない限り、ページキャッシュに最高速度で書きたいです。
答え1
問題はダーティスロットリングではなく、即時同期です。私が得た列でbo
これを確認できます。vmstat 1
-----io----
bi bo
0 0
0 0
0 4000
0 0
...
後ろにdd if=/dev/zero of=16/test bs=4k count=1000
。 (vmstat出力には1K-「単位」のみがあります。/proc/diskstatsには512B単位があります)
追加すると、以前conv=notrunc
と同様にこれを防ぐことができます。rm
sourcejediのコメントをご覧ください。
ext4マウントオプションnoauto_da_alloc
これが正確に意味するのは、これらのsync
「ファイルの書き換え」操作には追加の操作が必要ないことです。man ext4
いくつかの素晴らしい例があります。問題は、エディタでファイルを「書き込み」または「保存」することが何を意味するのか、そしてそのファイル(電源)が失敗しないようにする方法に戻ります。
反対側も確認できます。ダーティページが増え続けています。
]# grep nr_dirty /proc/vmstat
nr_dirty 7886
nr_dirty_threshold 427666
nr_dirty_background_threshold 170815
しきい値は、現在使用可能なメモリに適用される割合です。定期的な書き込み保存を完全に無効にしたため、12以上のダーティページが表示されました。
ウィム
これは実際に複雑な状況です。 vimには、書き込み後のファイルfs
同期とバックアップによる上書きの2つの主なオプションがあります。wb
ext2では、vimに設定するだけで十分ですnofs
。 ext4(デフォルトの遅延割り当て)では、noauto_da_alloc
今回はファイルシステムによる即時同期を防ぐためにマウントオプションも必要です。
(または他のdd
ファイルの一部のみを書き込む(上書き)を選択できます)cp
vim