由於 LUKS/軟體 RAID/LVM 排序導致 IO 不佳?
由於 IO 性能不佳,我正在嘗試確定是否應該重新設置我的 RAID 陣列。首先,系統:
- i7 920
- 4 個 4TB WD 5400 綠色驅動器
- CentOS 6.3 主機
其次,磁碟設置:
- /dev/sda2,b2,c2,d2 單獨 LUKS 加密
- /dev/mapper/a2,b2,c2,d2 都是軟體 RAID5 /dev/md1 的一部分
- /dev/md1 有 LVM
- LVM 用於分隔 /、/storage 和 swap
我選擇這種結構以允許 kcryptd 的多個實例,我認為通過這樣做,我將獲得對加密的多執行緒支持,因為每個驅動器執行一個實例。但是,我開始懷疑這是否是個好主意。
例如,如果我對隨機數據的 RAR 文件執行繁重的解壓縮常式,我的 IO 等待會上升到 25% 左右,這會降低整個系統的速度。我想知道由於所有 kcryptd 程序,所有指令集是否都以某種方式得到了備份。
因此,我正在考慮更改為:
- /dev/sda2,b2,c2,d2 放入 /dev/md1
- /dev/md1 被加密並映射到 /dev/mapper/1
- /dev/mapper/1 之上的 LVM
這將歸結為單個 kcrpytd 程序,這本身也可能是一個瓶頸。有人認為這將有助於解決我的 IO 問題嗎?
您的分層不是最理想的,因為將 raid 5 置於加密之上意味著您將加密/解密操作的數量增加了 25% - 因為 4 * 4 TB 已加密。
將加密放在 raid 5 之上時,只有 3 * 4 TB 被加密。
這背後的原因是:您不必對加密數據的奇偶校驗數據(在您的範例中佔用 4 TB)進行加密,因為它不會增加您的安全性。
您對多個 kcrypt 程序的假設就是這樣。當基於它做出決策時,這是一種過早的優化,可能會產生完全相反的效果。您的 i7 非常強大,甚至可能包含一些有助於加速 AES 的特殊指令 - Linux 核心包含幾個在啟動期間自動選擇的加密原語的優化變體。
您可以通過查看
/proc/cpuinfo
(例如那裡的標誌aes
)/proc/crypto
、、lsmod
(除非 aes 模組被編譯到核心中)和核心日誌來驗證是否使用了針對您的 CPU 的優化常式。您應該在不涉及任何慢速磁碟的情況下對 kryptd 的吞吐量進行基準測試,以查看上限究竟是多少(即在使用 iozone 的 RAM 磁碟上)。
為了以後能夠診斷出潛在的性能問題,在沒有任何加密的情況下對您選擇的 RAID 設置進行基準測試以獲得上限也很有用。
除了加密主題之外,RAID 5 涉及比 RAID 1 或 10 更多的 IO 操作。由於儲存有點便宜,也許購買更多硬碟並使用另一個 RAID 級別是一種選擇。