多路徑、設備映射器和磁碟 i/o 調度程序
我們有兩台帶有多路徑 SAS 控制器的機器,每台都連接了 12 個物理磁碟。
我們正在研究一些 I/O 速度異常,並註意到在一台機器上,/dev/mpath/mpath*p1 以各種方式映射到 dm-13 到 dm-24,dm-13 和 dm-14 有一個 io “cfq”的調度程序到位。該列表中的其他 dm 設備具有“無”,並且似乎無法更改。
我相信其他設備呈現為一組不同的 dm-* 映射,並且那些確實有 cfq 集。
在另一台機器上,選擇在 /dev/mpath/mpath*p1 中的所有設備都沒有相應的帶有調度程序集的 dm 設備。
我有點不在我的元素這裡,但是由於 iostat 確實顯示某些請求正在合併到第一個框的 dm-13 和 dm-14 上,而其他任何一個框上都沒有,我懷疑我們是為此付出了一些代價。
我是在挖錯洞,還是這是一個問題?如果是這樣,我該如何解決它,因為
echo cfq > /sys/block/dm-15/queue/scheduler
當“無”是目前唯一列出的選項時沒有任何效果?
我已經找到了我自己的問題的答案。
我們可能有一個稍微不尋常的設置,其中 /dev/mapper/mpatha 是整個磁碟,而 /dev/mapper/mpathap1 是該磁碟上的第一個分區。
由於我們使用 /dev/mapper/mpath?p1 設備建構了軟體 raid 陣列,因此它們從來沒有調度程序,因為它們實際上最終會遵循實際的底層磁碟,即 /dev/mapper/mpatha 設備。
我們所有的 /dev/mapper/mpath?設備有一個調度程序(我現在已將其更改為“截止日期”),而所有 /dev/mapper/mpath?p1 設備都沒有。這也與 LVM 的工作方式相同——底層磁碟有一個調度程序,但到邏輯分區的各個映射沒有。