私のMMIO読み取り/書き込みレイテンシが不当に高いことがわかりました。私は誰かが私にいくつかの提案を与えることを願っています。MMIO読み取り/書き込みレイテンシ
私は、カーネル空間で、PCIeデバイスのBAR0アドレスに4バイトの値を読み取る簡単なプログラムを書きました。デバイスはPCIe Intel 10G NICで、Xeon E5サーバーのPCIe x16バスに接続されています。私は読んで終わりMMIOの始まりの間の時間を測定するために、RDTSCを使用して、コードスニペットは次のようになります。
vaddr = ioremap_nocache(0xf8000000, 128); // addr is the BAR0 of the device
rdtscl(init);
ret = readl(vaddr);
rmb();
rdtscl(end);
私は(最後は、INIT)1US未満であるとの間の経過時間を期待してい結局のところ、PCIeデータリンクを通過するデータは数ナノ秒に過ぎないはずです。しかし、私のテスト結果では、MMIO PCIeデバイスの読み込みを5.5usで行っています。これが妥当かどうか疑問だ。リモートバリア(rmb)にコードを変更しますが、レイテンシは約5秒です。
このホワイトペーパーでは、PCIeレイテンシ測定について説明します。通常は1us未満です。 www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf MMIOのアクセスレイテンシを下げるには、カーネルやデバイスなどの特別な設定が必要ですか?または誰もこれまでに経験したことがありますか?
ローカルPCIeバス上のデバイスのBAR内のワードを読み取るには、1 us未満を測定します。なぜ私のコメントが投票されたのかわからないのは、私が論文の結果が現実的であることを確認しているからです。 BARはユーザー空間にマップされました。アドレスを読み取るだけです。あなたはioremap_nocache()の時間もカウントしていますか?私の仕事の一環として、部屋のシステム内のBARにレジスタを読み込み、それを5.5USRに減らしました。私はMellanox FDR InfinibandよりRDMAを使用し、システム間にIBスイッチを使用しています。 –