私の新しいNASには5つのディスクがあります。彼らはすべて同じモデルです。
sdeはマザーボードのコントローラに接続されています。 sda-sddはraidコントローラにあります。
「pv /dev/sd[cde]」を並列に実行します。
Device rkB/s wkB/s f_await aqu-sz %util
sdc 161536.00 0.00 0.00 1.50 99.60
sdd 175104.00 0.00 0.00 1.41 98.80
sde 170880.00 0.00 0.00 1.66 100.00
これが私が期待していたものです。
"pv /dev/sd[ae]"を並列に実行:
Device rkB/s wkB/s f_await aqu-sz %util
sda 147456.00 0.00 0.00 1.15 100.00
sdb 142848.00 0.00 0.00 1.74 100.00
sdc 147840.00 0.00 0.00 1.13 99.60
sdd 149120.00 0.00 0.00 1.15 99.60
sde 107008.00 0.00 0.00 1.34 96.40
最大値が175 MB / sから150 MB / sに変更されたのは、おそらくバスを共有し、そのバスが最大総帯域幅を持つためです。
しかし、sdeは30%遅いことに注意してください。
sda-sddの場合、Renice 'pv'は19です(sdeの 'pv'は0のままです)。
Device rkB/s wkB/s f_await aqu-sz %util
sda 137856.00 0.00 0.00 1.04 98.00
sdb 140032.00 0.00 0.00 1.06 99.20
sdc 132480.00 0.00 0.00 1.00 98.80
sdd 132608.00 0.00 0.00 1.02 97.60
sde 140672.00 0.00 0.00 1.73 100.00
今sdeは他のものと同じレベルになります。これは一般的な状況(再調整なし)で予想されるものです。
アイドルシステムでは、各ドライブが毎秒80回検索されます(予想どおり)。
# parallel --tag -j0 -k --ll seekmaniac ::: /dev/sd[a-e]
/dev/sda / 81 seeks per second
/dev/sdb / 81 seeks per second
/dev/sdc / 80 seeks per second
/dev/sdd / 81 seeks per second
/dev/sde / 82 seeks per second
"pv"が実行されているとき(上記のように):
# parallel --tag -j0 -k --ll seekmaniac ::: /dev/sd[a-e]
/dev/sda o 15 seeks per second
/dev/sdb o 13 seeks per second
/dev/sdc o 15 seeks per second
/dev/sdd o 19 seeks per second
/dev/sde o 64 seeks per second
sdeが他の検索よりもどのように多くの検索を提供するかをご覧ください。
私の考えでは、この動作はsdeが別のコントローラにあるために発生するようです。
しかし、コントローラはどのようにこれらの効果を得ることができますか?
この行動をどのように説明すべきでしょうか?
編集する
私が見つけた違いを検索する(sda = sdb = sdc = sdd):
# diff <(cd /sys/block/sde/; grep . queue/*) <(cd /sys/block/sda/; grep . queue/*)
19c19
< queue/max_segments:64
---
> queue/max_segments:168
23c23
< queue/nr_requests:2
---
> queue/nr_requests:64
34c34
< queue/write_cache:write through
---
> queue/write_cache:write back
私がやっていることが読み取りだけであれば、書き込みキャッシュは関連性がないようです。
答え1
これは単なる推測です。誰かがこの推測を証明または反証できることを願っています。
sde コントローラの max_segments=64 および nr_requests=2 です。
sdaコントローラにはmax_segments = 168とnr_requests = 64があります。
sdeからデータを取得するためにCPUの作業量が大きいとします。キュー容量が小さい場合、CPUは常にキューを消去する必要がありますが、容量の大きいキューは定期的にのみクリアする必要があります。
CPUがキューをクリアする機会を逃すと、キューがいっぱいになり、ディスクが停止します。キューサイズが小さい場合は、平均的に頻繁に発生します。
NASのCPUは低コストの低速CPUです。
おそらく、これは読み取りパフォーマンスの30%の違いを説明しているようです。
検索の違いも同様の推論で説明できますか?
キュー容量が低い場合、CPUは新しい照会をスケジュールする方が速いことに気付くでしょう。容量が高い場合、CPUは新しい照会をスケジュールできることを確認する前にキューを消去する必要があります。
繰り返しますが、私は明らかに問題に陥りました。正直、そんなことが起きているのか分からない。