書き込みストレージキャッシュ制限の無効化 - vm.dirty_ratio 調整

書き込みストレージキャッシュ制限の無効化 - vm.dirty_ratio 調整

私のワークロードは、短い期間の書き込みバースト比が非常に高いです。ターゲットディスクはかなり遅いですが、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と同様にこれを防ぐことができます。rmsourcejediのコメントをご覧ください。

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ファイルの一部のみを書き込む(上書き)を選択できます)cpvim

関連情報