Linuxカーネル文書で起動パラメータを引用すると、次のようになります。
pcie_bus_perf:デバイスMPSを上位バスに基づいて許可される最大MPSに設定します。また、最高のパフォーマンスを得るために、最大読み取り要求サイズ(MRRS)をサポートされている最大値(デバイスまたはバスがサポートできるMPSより大きくない)に設定してください。
「最高のパフォーマンスを得るために」MRRSがMPSよりも大きくならない理由は理解できません。
つまり、デバイスがMPS = XとMRRS = 4を実行できる場合、満足度は4です。
分割によってどこかにかなりのオーバーヘッドが発生しますか?
ところで、私は「公正な共有」の概念と、大規模なMRRSが共有に与える影響について知っていましたが、決して理解していませんでした。正当な分け前同義語最高のショー。
答え1
答えを探してほしいと思って、役に立つ情報を見つけました。
これカーネルメーリングリストの議論この記事この質問を参照すると、MRRSを設定すると、デバイスが読み取り要求を送信するデバイスのMPSよりも大きい完了パケットサイズ(応答)で読み取り要求を送信しないことが保証されるという説明があります。これが保証されると、各ノードは自分の上にあるノードのMPSを自分のMPSとして持つことができます(上記のノードのMPSより低い場合は、デバイスがサポートする最高のMPSにします)。したがって、MPSが非常に低いノードは、全体のバス速度を遅らせることができない。
議論からのこの図は、問題を理解するのに役立ちました。
通常:
root (MPS=128)
|
------------------
/ \
bridge0 (MPS=128) bridge1 (MPS=128)
/ \
EP0 (MPS=128) EP1 (MPS=128)
パフォーマンス:
root (MPS=256)
|
------------------
/ \
bridge0 (MPS=256) bridge1 (MPS=128)
/ \
EP0 (MPS=256) EP1 (MPS=128)
EP1を除く各ノードは、128バイトを超えるMPSを処理できます。