さまざまなコントローラはこのI / Oをどのように解釈しますか?

さまざまなコントローラはこのI / Oをどのように解釈しますか?

私の新しい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は新しい照会をスケジュールできることを確認する前にキューを消去する必要があります。

繰り返しますが、私は明らかに問題に陥りました。正直、そんなことが起きているのか分からない。

おすすめ記事