問題タブ [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.
linux - 仮想化環境での DPDK カーネル NIC インターフェイスの使用
ラップトップでDPDK Linux アプリケーションを開発しようとしていますが、ラップトップのハードウェアは DPDK でサポートされていません。さらに、DPDKはQEMUを含む準仮想化デバイスをサポートします。virtio-net
そのため、デバイスでカーネル NIC インターフェイス (KNI)を実行するために QEMU ゲストを構成しようとしていvirtio-net-pci
ます。virtio-net-pci
問題は、KNI サンプル アプリケーションがドライバーを受け入れないことです。
QEMU コマンド
ゲストでの KNI サンプル アプリケーションの実行
lspci
ゲストでのコマンドの出力
pci_scan_one()
関数が を設定しているのにdev->kdrv = RTE_KDRV_NONE
、ドライバーがvirtio-pci
(から) として検出されていることに気付きました/sys/bus/pci/devices/0000:00:03.0/driver
。
TAP ネットワーキング
TAP ネットワークでも同じ問題が発生します。ホストで、Wi-Fi インターフェイスからブリッジを構成し、TAP インターフェイスに接続しました。
QEMU コマンド:
ifconfig
ゲストでの出力:
次のコマンドは、上記の「ユーザー」ネットワークの場合と同じように失敗します。
質問
デバイスでKNIを実行することは可能ですか?virtio-net-pci
不可能な場合、仮想化環境でDPDK KNIアプリケーションを開発する他のオプションはありますか?
c - 高ログレベルの dpdk mbuf および mempool メッセージ
DPDK ですべての mempool,mbuf デバッグを有効にする方法の手がかりはありますか。私はDPDK 2.2.0を使用しています。このバージョンではあまり役に立たない回答がいくつか見つかりました。
c - Rust FFI から DPDK の静的 C 関数にアクセスする
私はかなり初心者のプログラマーで、理解していると思うが修正方法がわからない問題に直面しています。Rust FFI を使用して、すべて C で記述されたIntel の DPDKと対話しようとしています。これに対する私の最初の試みは、helloworld サンプル アプリを再作成することです。
DPDK の関数が静的であり、ライブラリから直接利用できないことが原因であると思われるコンパイル エラーが発生しています。私のFFIインターフェースはここにあります:
これを参照して関数をラップするライブラリもあります。
そして、ライブラリをリンクするための build.rs ファイル -
FFI インターフェイスに対して独自のアプリケーションをコンパイルしようとすると、rte_lcore_id
およびへの未定義の参照に関するエラーが発生し続けますrte_get_next_lcore
。DPDK の API ドキュメントによると、これらの関数は librte_eal ライブラリの一部ですが、rte_lcore.hで static functions として定義されています。これらは静的関数であり、Rust からは見ることができないと想定しています。
DPDK にバンドルされている helloworld サンプル アプリでは、rte_lcore.h を直接インポートしています。これが、librte_eal を参照するだけでなく、これらの関数にアクセスできる理由だと思いますか?
Rust でこれにアクセスする方法はありますか、またはそれらの関数をラップして FFI 経由で利用できるようにする C のシムのようなものが必要ですか?
nic - DPDK には複数の NIC が必要ですか?
私はDPDKをまったく初めて使用し、自分では理解できない奇妙な質問がいくつかあります。
- DPDK では、物理デバイスに複数の NIC が必要ですか? 2 つの NIC を必要とするいくつかの例 (l2fwd、l3fwd) を見ました。1 つはパケットの受信に使用され、もう 1 つはパケットの送信に使用されます。
- DPDK は NIC を制御するため、唯一の NIC を DPDK にバインドすると、通常どおりインターネットにアクセスできますか? つまり、Firefox で Web をサーフィンするなどの通常のことを行うということです。
- NIC をバインドした後、DPDK アプリケーションのみがそれらの NIC にアクセスできますか、または通常のアプリケーションがそれらにアクセスできる方法はありますか?
私は何日もこれらの質問で混乱してきました。私の心を浄化してください。
前もって感謝します :)
tcp - TCP 接続に属するパケットを DPDK の特定の lcore に転送する方法は?
特定の lcore が TCP 接続の両側に属するパケットを受信するようにします。つまり、クライアントからサーバーへのパケット (CtoS) とサーバーからクライアントへのパケット (StoC) は、どちらも単一の lcore に送信されます。RSS は、ストリーム (一方向のデータ フロー) に属するパケットが同じ lcore に送信されることを保証しているようです。方向の両側を同じ lcore に向けるには、対称 RSS が必要です。
- 特定の lcore への接続に属するパケットを転送するように NIC (Intel 82599 など) を構成するにはどうすればよいですか?
- CtoS トラフィックと StoC トラフィックが同じ NIC の異なるポートにある場合、接続に属するパケットを特定の lcore に転送する方法はありますか?
- 異なる NIC 上の異なるポートはどうですか?
linux - glibc の現在の安定バージョンが 2.23 であるのに、なぜ glibc バージョン >= 2.7 を読むのか
Linux の入門ガイド (リリース 16.04.0)の 2.3.1 章を読んでいるときに、次のように表示されました。
必須:
glibc >= 2.7 (cpuset に関連する機能用)
バージョンは、ldd --version コマンドを使用して確認できます。
私が走ったとき、私はldd --version
得た
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.9) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
これはフリー ソフトウェアです。条件のコピーについてはソースを参照してください。保証はありません。商品性や特定の目的への適合性のためでさえありません。
Roland McGrath と Ulrich Drepper によって書かれました。
それは、私の glibc のバージョンが 2.19 であることを意味しますか?
バージョンをアップグレードする方法をいくつか試しましたが、新しいものはありません。
実はThe GNU Libraryで気づいたのですが、
最新ニュース
2016-02-19: glibc 2.23 がリリースされました。
では、どうすれば 2.7 のバージョンを入手できますか?? Linux の入門ガイド (リリース 16.04.0) のメッセージは間違っていますか?
linux - Linux カーネルが PERF_COUNT_HW_REF_CPU_CYCLES イベントをサポートしていないため、Linux パフォーマンスを使用できません
仮想環境の Linux "perf" に関する情報が欲しいだけです。perf stat -e サイクル "my process" を取得しようとしているので、VM (Vmware5.1 上で実行されている) でこのコマンドを実行すると、次のようなメッセージが表示されます..
/サポートされていません> サイクル
VMwareハイパーバイザーのアクセス許可の問題または構成エラーがある可能性があることは理解できますが、それらを指摘できますか?. また、カーネルフラグ「PERF_COUNT_HW_REF_CPU_CYCLES」について読みましたが、カーネルでこのフラグが有効になっているかどうかを確認するにはどうすればよいですか? これのためのコマンドはありますか?
packets - DPDK - rte_mbuf ペイロード/データの初期化または更新/変更
DPDK の basicfwd の例の転送メカニズムを理解しようとしています。のペイロードの初期化と編集を手伝ってくれる人はいrte_mbuf
ますか? これがクラスです。パケットの内容を使用tcpdump
して表示する予定です。rte_pktmbuf_dump
rte_mbuf
独自のペイロードを追加したいのは次のとおりです。
これはrte_mbuf
受け取られています:
これはrte_mbuf
送信されています:
転送されたパケットをファイルに出力するように、DPDK の例のサンプル アプリケーションbasicfwd.cを変更しました。
これらは、出力ファイルに表示されるパケットです
。内容をよりよく理解するために変更できるようにしたいと思います。試してみrte_pktmbuf_init
ましbufs->userdata =*(unsigned short*) 0xAAAAAAAA
たが、うまくいきません。