2012-06-28 15 views
6

私は、このBARをプロセッサキャッシュにキャッシュ可能にする目的で、PCIe BARのカスタムmmap()機能を持つドライバを書き込もうとしています。私はこれが最高の帯域幅を実現する最善の方法ではなく、書き込みの順序は予測できないことを認識しています(どちらも問題はありません)。キャッシング可能なPCIe BARのmmapを行う方法

これはHow would one prevent MMAP from caching values?

プロセッサに記載されているものと類似しているが、Sandy Bridgeのi7のある、PCIeデバイスは、アルテラのStratix IV devのです。ボード。

まず、CentOS 5(2.6.18)で試してみました。私はBTRがキャッシング不可能なMTRR内にないことを確認するためにMTRR設定を変更し、io_remap_pfn_range()_PAGE_PCD_PAGE_PWTビットをクリアして使用しました。読み込みが正常に行われました。正しい値が返され、同じアドレスに2度目の読み込みがあっても、必ずしも読み込みがPCIeに移行するとは限りません(読み込みカウンタはFPGAでチェックされました)。ただし、書き込みによって、システムがフリーズしてから、ログまたは画面にメッセージが表示されずに再起動されました。

第2に、私はCentOS 6(2.6.32)でそれをやろうとしましたが、これはPATをサポートしています。結果は同じです:読み取りが正しく動作し、書き込みが原因でシステムがフリーズして再起動します。興味深いことに、非一時的/書き込み結合フルキャッシュライン書き込み(AVX/SSE)は期待通りに機能する。すなわち、それらは常にFPGAに行き、FPGAはフルキャッシュライン書き込みを観察する。ただし、シンプルな64ビット書き込みでもシステムのフリーズ/再起動が発生します。

また、ドライバコードの中でioremap_cache()と、その後iowrite32()を試しました。結果は同じです。

私はハードウェアの問題だと思っていますが、誰かが何が起こっているかについてのアイデアを共有できるかどうかは分かります。

EDIT:CentOS 6:Machine Check Exception:5 Bank 5:be2000000003110aでMCEメッセージをキャプチャできました。

2ソケットのSandy Bridge(Romley)で同じコードを試しました:読み取りと非一時書き込みの動作は同じですが、単純な書き込みはMCE /クラッシュを引き起こさないがシステム状態、つまり値には影響しませんメモリは変更されません。

また、古い2ソケットのNehalemシステムでも同じコードを試しました。単純な書き込みもMCEの原因になりますが、コードは異なります。

答えて

6

私は、MMIOアドレス用のWriteBack(WB)メモリタイプをサポートするx86ハードウェアを認識しておらず、その非互換性の結果をほぼ確実に確認しています。 私はそれらの投稿では

http://blogs.utexas.edu/jdm4372/2013/05/29/で私のブログには、このトピックの説明を掲載してhttp://blogs.utexas.edu/jdm4372/2013/05/30/ている、私はいくつかのプロセッサ上で動作する方法を議論 - MMIOをマップ倍の範囲 - 一度店舗運営のためのプロセッサからにライト・コンバイナ(WC)メモリ・タイプを使用するFPGAと、ライト・プロテクト(WP)またはライト・スルー(WT)タイプを使用してFPGAからプロセッサへのリードに一度使用します。 「書き込み専用」領域の行のエイリアスに書き込むときに、「読み取り専用」領域のキャッシュ行でCLFLUSHを使用することによって、一貫性を手動で維持する必要があります。また、IOデバイスはMMIOアドレス用のキャッシュ無効化トランザクションを生成できないため、FPGAメモリの値の変更に関して手作業で一貫性を維持する必要があります。

私がAMDに所属していた数年前のことでしたが、新しいLinuxカーネルやIntelプロセッサでどうやってやっているかを今調べています。 Linuxは、あらかじめ定義されたマッピング関数でWPまたはWTメモリタイプを直接サポートしていないので、いくつかのハッキングが必要です。リージョンのMTRRをオーバーライドするのはかなり簡単ですが、WPまたはWT属性を取得するために変更する必要があるremap_pfn_range()関数の子孫の正しい場所を見つけるのが難しいですその範囲のPATエントリ

この方法は、FPGAのプログラマビリティがこのダブルマップモードで動作し、協調するようにPCI BARを定義する柔軟性を提供するため、他の(事前定義された)種類のIOデバイスよりもFPGAに適しているでしょう。プロセッサー側のドライバーはキャッシュの一貫性を維持します。

関連する問題