問題タブ [dpdk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Rust から呼び出された場合と C から呼び出された場合の DPDK 関数の出力が異なる
Intel の DPDK と連携する Rust プログラムを作成していますが、よくわからない問題に遭遇しました。現在、Rust プログラムで DPDK ライブラリの関数を実行できますが、C で記述された同じプログラムとは結果が異なります。
Rust プログラム出力 -
Cプログラム出力 -
DPDK は、Rust でリンクしている静的ライブラリとしてコンパイルされています。以下は、Rust と C プログラムの両方のコードです。
さびた main.rs -
C main.c -
DPDK のソースを調べ、print ステートメントを追加して、どこが違うのかを調べました。このrte_eal_init()
関数はeal.cにあり、他のさまざまな init 関数を呼び出します。rte_eal_dev_init()
余分な出力のトリガーは、eal_common_dev.cで呼び出される別の関数からのものです。
rte_eal_dev_init()
-
Rust プログラムは関数に入りますが、マクロrte_eal_dev_init()
のループに入ることはありません。TAILQ_FOREACH()
このように、マクロのすぐ上と下に print ステートメントを追加するとしたら、
これにより、Rustで次の出力が得られます-
そして、Cでの次の出力 -
sys/queue.hTAILQ_FOREACH()
で定義されていることがわかりました。私が理解しているように、静的ライブラリにリンクしても、ライブラリが他の何かに動的にリンクしているという問題は発生しません。これは正しいです?
dpdk - hugepage は存在しますが、無料でも予約済みでもありません。または、hugepage を解放するにはどうすればよいですか?
私は SPDK の実験 (これは DPDK を使用し、さらにヒュージページを使用します) を実行していますが、昨日は機能していました。私はそれらを共有環境で実行しています (あと 1 人か 2 人がこのマシンを他の目的で使用していると思います)。これを実行しようとすると、no free hugepages エラーが発生します。
/proc/meminfo の出力は次のとおりです。
マウントの出力:
前回の環境で機能していたものが機能しなくなりました。
次に、 /proc/meminfo の出力は次のとおりです。
しかし、実行しようとすると:
これらのページが余剰であり、無料ではないのはなぜですか? それらを解放する方法はありますか?他のジョブが実行されているか、他のユーザーが使用している可能性があるため、システムを再起動したいと考えています。
編集:マシンを再起動し、より多くの hugepage を割り当てたところ、それらは解放されました。テストを実行するとクラッシュし、ヒュージページが再び失われました。
有効な答えのない関連する質問 (少なくとも私にとって):
installation - ovs2.6: 不明なタイプの dpdk の netdev dpdk1 を作成できませんでした
DPDK16.07 で OVS2.6 をセットアップしようとしています。openvswitch-2.6.0.tar.gz の下にある INSTALL.DPDK.md の指示に従っています。ovs-vswitchd.log に次の警告メッセージが表示されます:
00034|netdev|WARN|不明なタイプの dpdk の netdev dpdk1 を作成できませんでした 00035|bridge|WARN|ネットワーク デバイス dpdk1 を開けませんでした (アドレス ファミリーはプロトコルでサポートされていません)
少しグーグルで調べてみると、この問題は以前のバージョンの ovs でも同様に直面していることがわかりましたが、満足のいく解決策は見つかりませんでした。
根本原因となる可能性のあるものと、それを修正する方法はありますか?
ありがとう!
linux - LinuxでDMAのMMUのプロセスのページテーブルを取得する方法
LinuxでDMAのMMUのプロセスのページテーブルを取得するには?
(DPDK アプリ、カスタム DMA、FPGA のカスタム MMU、Zynq-7020/US+、Linux 4.6+、DMA の MMU は単一プロセスにバインドされている場合)
プロセスの Task_struct は、そこに記載されているように、「現在」でアクセスできるカーネルモジュールによって取得できます。
struct task_struct (line 1475)struct mm_struct *mm, *active_mm;
の 1549 行目に表示されます。
ページテーブルポインタがそこにあるに違いないと思いますが、見えません。
どこに保管されているか知っている人はいますか?