サムドライブを介してデータをコピーすると、サムドライブが2MiB / sより速い速度で書き込むことができないにもかかわらず、Linuxは最初に1秒以内に600 MBのデータをコピーします。ただRAMにキャッシュとして書き込んでから、300秒間ゆっくりとデータを更新します。この場合、キャッシュは実際にコピー速度を向上させません。
この動作を防ぐvm.dirty_ratio
ために0
。
これにより、私が書いたものはキャッシュなしでリアルタイムで作成されます。
これまでに発生した問題
- SSDに書き込む速度は20 - 30MiB / sです(RAMディスクから$ HOMEに2 GBのデータをコピーするとき)!変更前は300MiB/sでした。
しかし、コピーした内容が記録され、メモリに何も残っていないことを確認できるので、データの破損を心配せずにコピーした直後にファイルを処理できるので、これは私にとって大きな問題ではありません!
dirty_ratioを無効にすると、長期的な副作用があるかどうかを知りたいです。私のシステムでは、SSD、HDD、およびサムドライブを使用しています。
IOスケジューラ(udevルールを使用して設定)は、回転していないすべてのディスクのMQ-Deadlineで、回転しているディスクのBFQです。
システムの詳細
コア:
Linux バージョン 5.8.12-xanmod1-1 (makepkg@archlinux) (gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 SMP PREEMPT Wed, 30 Sep 2020 14:19:49 +0000
編集する:
基準:
RAMディスクに新しいファイルを作成しました。
$ >/tmp/x ; xfs_io -c 'pwrite -S 0xa 0 1G' /tmp/x
wrote 1073741824/1073741824 bytes at offset 0
1 GiB, 262144 ops; 0.2277 sec (4.392 GiB/sec and 1151213.5997 ops/sec)
ファイルには、0xa
10またはASCIIにのみ変換される「\ n」のみが含まれています。
その後、それをインストールしてハードドライブにコピーしました。
- dirty_ratioが20(デフォルト)の場合:
$ sudo mount /dev/sdb3 /mnt/ ; time sudo cp /tmp/x /mnt/ ; time sudo umount /mnt/
real 0m5.879s
user 0m0.013s
sys 0m0.392s
real 0m3.566s
user 0m0.002s
sys 0m0.060s
- dirty_ratioが0の場合:
$ sudo mount /dev/sdb3 /mnt/ ; time sudo cp /tmp/x /mnt/ ; time sudo umount /mnt/
real 0m29.983s
user 0m0.006s
sys 0m0.600s
real 0m0.163s
user 0m0.000s
sys 0m0.052s
- dirty_ratioが100の場合(ベースラインのみ):
$ sudo mount /dev/sdb3 /mnt/ ; time sudo cp /tmp/x /mnt/ ; time sudo umount /mnt/
real 0m0.408s
user 0m0.006s
sys 0m0.370s
real 0m9.050s
user 0m0.004s
sys 0m0.077s
ベンチマークによると、vm.dirty_ratioを0に設定するのは実際にははるかに遅いことがわかりました。
ベストアンサー1
このキャッシュがないと、HDDは書き込みを再構成できず、大規模な断片化が発生し、より多くの摩耗が発生します。
キャッシュをオフにする代わりに、オプションを使用してスティックをインストールできますsync
。