8

MMIO の読み取り/書き込みレイテンシが異常に高いことがわかりました。誰かが私にいくつかの提案をしてくれることを願っています。

カーネル空間で、PCIe デバイスの BAR0 アドレスの 4 バイト値を読み取る簡単なプログラムを作成しました。デバイスは PCIe Intel 10G NIC で、Xeon E5 サーバーの PCIe x16 バスに接続されています。rdtsc を使用して、MMIO 読み取りの開始から終了までの時間を測定します。コード スニペットは次のようになります。

vaddr = ioremap_nocache(0xf8000000, 128); // addr is the BAR0 of the device  
rdtscl(init); 
ret = readl(vaddr); 
rmb(); 
rdtscl(end);

(end, init) 間の経過時間は 1us 未満であると予想しています。結局のところ、PCIe データ リンクを通過するデータはわずか数ナノ秒であるはずです。ただし、私のテスト結果は、MMIO PCIe デバイスの読み取りを行うために少なくとも 5.5use を使用していることを示しています。これが合理的かどうかは疑問です。コードを変更してメモリ バリア (rmb) をリモートにしますが、それでも約 5 us のレイテンシが発生します。

このホワイト ペーパーでは、PCIe レイテンシの測定について説明します。通常は 1us 未満です。www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf MMIO アクセスの待ち時間を短縮するには、カーネルやデバイスなどの特別な構成を行う必要がありますか? または、以前にこれを行った経験がある人はいますか?

4

2 に答える 2

-1

リモートホストからデータを取得するために NIC カードがネットワークを経由する必要がある場合、おそらくスイッチを介して、5.5us が妥当な読み取り時間です。ローカル PCIe デバイスのレジスタを読み取る場合、1us 未満である必要があります。Intel 10G NIC の使用経験はありませんが、Infiniband とカスタム カードを使用したことがあります。

于 2013-09-05T20:27:24.880 に答える