0

リンクnetworkkernel.pdfで、 Understanding linux networking Internal book と pdf Network packet capture in Linux kernelspaceを読んでいました。

トピック 9.2.2の「Linux ネットワーク内部 の理解」では、次のように説明されています。

入力フレームを処理するコードは 2 つの部分に分割されます。最初に、ドライバーがフレームをカーネルからアクセス可能な入力キューにコピーし、次にカーネルがそれを処理します (通常、次のような関連するプロトコル専用のハンドラーにフレームを渡します)。 IP)。最初の部分は割り込みコンテキストで実行され、2 番目の部分の実行を先取りできます。

クエリは、第 2 部がいつスケジュールされるかです。誰がそれらをスケジュールしますか? 呼び出しは割り込みハンドラで与えられていますか? また、Linux カーネル空間でのネットワーク パケット キャプチャでは、パケット入力フローは次のように説明されています。

When working in interrupt driven model, the nic registers an
interrupt handler;
• This interrupt handler will be called when a frame is received;
• Typically in the handler, we allocate sk buff by calling

    dev alloc skb();

• Copies data from nic’s buffer to this struct just created;
• nic call generic reception routine `netif_rx();`
• `netif rx()` put frame in per cpu queue;
• if queue is full, drop!
• net rx action() decision based on skb->protocol;
• This function basically dequeues the frame and delivery a copy
for every protocol handler;
• ptype all and ptype base queues

netif rx(); のタイミングを知りたい および net rx action() が呼び出されますか? 誰がそれらを呼び出すか、誰がそれらをスケジュールするかを意味します。

ガイドしてください。

4

1 に答える 1

0

このスケジューリングはNAPI構造によって行われます。パケットは、説明した方法でキャプチャされます。この softirq は、「ライブロック」の問題またはパケットのフラッドが発生した場合に発生します。これらは処理されます。

パケットの送信は、パケットの受信よりもはるかに複雑で、キュー管理と QOS (おそらくパケット シェーピングも) が実装されています。「Queue Discplines」は、ユーザー指定可能なQOS ポリシーを実装するために使用されます。


NAPI 構造のスケジューリング:

NAPI の構造は次のように定義されます。そのドライバーの設計とハードウェア アーキテクチャ

Linux は ksoftirqd を一般的な解決策として使用して、softirq が次の割り込みの前に実行されるようにスケジュールし、それらをスケジューラーの制御下に置きます。また、これにより、連続する softirq が CPU を独占するのを防ぎます。これには、非常に CPU を集中的に使用するアプリケーションやネットワークを実行しているときに、softirq とユーザーのバランスの適切なバランスを得るために、ksoftirq の優先順位を考慮する必要があるという効果もあります。ksoftirq の優先順位を 0 (最終的にはそれ以上) に上げると、CPU 負荷が高いときにネットワーク パフォーマンスが低下するという問題が解決されることが報告されています。

NAPI Schedulingに関する研究論文もあります。

于 2013-04-05T07:41:01.433 に答える