Debian

LUKS 高傳輸率和高 io 等待

  • April 16, 2020

我目前正在 Proxmox VE 上設置伺服器。我希望對所有驅動器進行加密,因此我選擇在所有磁碟上設置 luks,並在 luks 之上設置 LVM。

現在,當我使用 dd 將數據從快速驅動器 (SSD) 傳輸到較慢驅動器 (HDD) 時,它以一些 GB/s 的速度啟動得非常快。然後減速。然後我注意到 IO 等待高達 10%,系統負載上升到 36。一些虛擬機受此影響並凍結。

進一步的監測顯示,在高 IO 等待期間dmcrypt_write使用了 99% 的 IO。所以我安裝了 Netdata 來獲取一些圖表,並顯示 HDD 正在以大約 120 到 150 MB/s 的速度寫入。

一段時間後,kworkers 因耗時過長而被殺死。經過一些研究,我將dirty_ratioand調整dirty_background_ratio為較低的值,這有助於但大大降低了速度。大約 25 MB/s。這防止了巨大的凍結,但仍然導致一些滯後。這也減慢了 HDD 本身的寫入速度。HDD 不再以 150 MB/s 的速度寫入,而現在只能以 50 MB/s 的速度寫入。

老實說,我不知道更多。有沒有我還沒有找到的記憶體?或者是否有辦法將 Linux 中的寫入速度限制為應有的驅動器寫入速度?

我唯一的目標是將數據從 A 複製到 B,而不必手動限制速度,也不必擔心虛擬機凍結。

系統資訊:

CPU: 2x Intel Xeon E5-2650 v2

RAM: 128 GB DDR3 ECC

**作業系統:**手動安裝 Proxmox VE

核心的 Debian 10: Linux 5.3.18-3-pve #1 SMP PVE 5.3.18-3 (Tue, 17 Mar 2020 16:33:19 +0100) x86_64 GNU/Linux

我讓 dd 讀取的 SSD 是 RAID 1 中的兩個東芝企業 SAS-SSD。HDD 是一些 5400rpm 的 SATA HDD(所以……不是最快的)。它們也在 RAID 1 中。

RAID 由 DELL PERC H710 mini(嵌入式)管理。所有 RAID 都具有Adaptive Read Ahead讀取策略和Write Through寫入策略。

我還注意到一個看起來很奇怪的 Dirty/ Writeback 圖:點擊查看圖像(新手保護)

該問題是由過高dirty_ratiodirty_background_ratio. 由於 RAM 比較大,所以頁面記憶體也很大。如果頁面記憶體已滿,系統會阻塞 IO 並等待它被刷新。這就是導致高 IO 等待的原因。

將這些值減小到更小的值(background_ratio 為 64 MB,dirty_ratio 為 4 GB)解決了我的問題。

引用自:https://serverfault.com/questions/1012566