Performance

如何使用 mdadm/btrfs raid1 或 zfs mirror 獲得兩個磁碟的讀取速度?

  • November 13, 2016

鑑於 RAID1 寫入數據的兩個副本,我的理解是讀取應該接近單個磁碟的兩倍。

我測試了不同技術(mdadm、zfs、btrfs)的讀取性能,但收效甚微。

根據我的經驗:

  • btrfs 在讀取期間僅使用了一個磁碟
  • zfs/mdadm 使用了兩個磁碟,但是達到的讀取速度是單個磁碟的讀取速度

我已經使用 dd、iotop 和 iostat 驗證了結果。

如何同時讀取兩個磁碟上的數據,以達到單磁碟兩倍的讀取性能?

這個問題在關於如何完成測試的資訊上有點有限,所以我假設你只是使用 dd 直接寫入文件。

BTRFS:

在 BTRFS 術語中,RAID1 表示兩個副本,無論池中有多少磁碟。因此,為簡單起見,我們假設數據和元數據都儲存在兩個磁碟上的 RAID1 中。因此,每個磁碟都是另一個磁碟內容的副本(在 BTRFS 中,磁碟佈局可能不同)。

當 BTRFS 執行讀取時(我最後一次檢查)依賴於程序的 PID 來確定首先從哪些磁碟讀取。這意味著如果您執行單個程序,它將僅從其中一個磁碟讀取,除非出現錯誤並且需要從另一個磁碟檢索良好的副本。

下次執行該程序時,它可能具有不同的 PID,BTRFS 將首先從另一個磁碟讀取數據。

MD:(MDADM)

對於順序讀取,您不會獲得太多收益,因為兩個設備上都有相同的數據,因此兩個磁碟都需要在開始讀取之前跳過(查找)相同數量的數據。例如,磁碟 A 在讀取接下來的 10 個字節之前需要等待(跳過)前 10 個字節,即使磁碟 B 可以同時讀取前 10 個字節,磁碟 A 正在跳過它仍然需要等到磁碟 A 有完成能夠將它應該在記憶體中讀取的 20 個字節放在一起。

從 MD 手冊頁(man md):

“請注意,驅動程序完成的讀取平衡不會使 RAID1 性能配置文件與 RAID0 相同;不會加速單個順序輸入流(例如單個 dd),但多個順序流或隨機工作負載會使用多個主軸。理論上,擁有一個 N 磁碟 RAID1 將允許 N 個順序執行緒從所有磁碟讀取。

ZFS:

我不了解 ZFS ,但我希望它的工作方式與 BTRFS/MDADM 大致相同。

結論:

對於像您可能使用 dd 進行的單個順序讀取操作,通過在 BTRFS 和/或 MDADM 上設置 RAID1 並沒有太多的性能提升。

如果您想在 BTRFS 和 MDADM 上看到提高的讀取速度(確實存在),您需要在陣列上並行執行多個不同的讀取。BTRFS 可能會根據 PID 將讀取分佈在不同的磁碟上,而 MDADM 應該會顯著減少尋軌次數。請記住,RAID1 與 RAID0 不同,尤其是在 BTRFS 陣列上。

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