Linuxバージョン2.6.32.28を使用していますが、疑問に思っています。を使用netif_rx(skb)
する場合、CPUごとに1つのキューがあり、PCI割り込みがCPUの2つのコアを使用して処理される場合(現在は1つだけを使用します。もう1つの良い質問は、なぜです)、カーネルが受信したパッケージの順序を台無しにしないのはどうしてですか?私は何かが足りないのですか?
1 に答える
1
Linux バージョン 2.6.32.28 では、基本的に NAPI が使用されます。この場合、最初のパケットが来ると、割り込みが生成され、関連するハンドラがパケットの処理に使用されます。
パケット処理は基本的に 2 つの部分で行われます ...
1-> ハード割り込み この場合、パケットはNICのDMA エンジンの助けを借りてカーネル メモリにのみ配置されます。そのために CPU は必要なく、このパケットにはsk_buff 構造が割り当てられます。& このsk_buff の pionterは CPU バックログに配置されます。
2-> ソフト 割り込み この場合、ソフト割り込みが生成されます。これは、CPU バックログからパケットを削除し、ネットワーク スタックの上位層のためにそれを処理する責任があります。
& 2つのCPUコアを使用する質問では、1つのCPUコアのみが使用されます.NAPI
では、前のパケットの処理中に別のパケットが到着した場合、割り込みは生成されませんが、このパケットのみが助けを借りてlinux-kernelに配置されますDMAの。&実行中の割り込みは、パケットを取得してその処理を続行します。
于 2012-11-06T07:08:27.997 に答える