Storage
將 vm.dirty_ratio 設置為 0 是否有任何長期副作用?
當我過去通過拇指驅動器複製數據時,即使寫入速度不能超過 2 MiB/s 到拇指驅動器,Linux 首先會在一秒鐘內將 600 MB 數據複製到它 - 它只是寫入 RAM作為記憶體,它會慢慢刷新數據 300 秒。在這種情況下,記憶體實際上並不會提高複制速度。
為了避免這種行為,我設置
vm.dirty_ratio
為0
.這樣可以確保我寫的內容是實時編寫的,沒有記憶體。
目前面臨的問題
- 現在寫入 SSD 的速度為 20 - 30 MiB/s(將 2 GB 數據從 ramdisk 複製到 $HOME 時)!在更改之前它曾經是 300 MiB/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
編輯:
基準:
我為 ramdisk 創建了一個新文件:
$ >/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 實際上非常慢…
如果沒有該記憶體,HDD 就無法重新組織寫入,這會導致大量碎片和更多磨損。
sync
您可以使用選項安裝您的棒,而不是關閉記憶體。