LUKS 高傳輸率和高 io 等待
我目前正在 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_ratio
and調整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_ratio
和dirty_background_ratio
. 由於 RAM 比較大,所以頁面記憶體也很大。如果頁面記憶體已滿,系統會阻塞 IO 並等待它被刷新。這就是導致高 IO 等待的原因。將這些值減小到更小的值(background_ratio 為 64 MB,dirty_ratio 為 4 GB)解決了我的問題。