-1

私は 2 つのスレッドを持つアプリケーションを持っています。ヒープ領域グローバル変数) いくつかの操作を行うために、スレッド 2 の CPU アフィニティをコア 7 に設定します。コア 1 とコア 7 がハイパースレッディングを使用して同じコアにあるとします。 L1 キャッシュを使用できます。

/proc/interrupt を見たところ、eth1 には複数の CPU コアで割り込みがあることがわかりました。私の場合、CPU アフィニティをスレッド 1 のコア 1 に設定しましたが
、多くのコアで割り込みが発生しました。パフォーマンスに影響しますか? eth1 から受け取ったパッケージは、どのコアに割り込みがあるかに関係なく、メイン メモリに直接移動しますか?

私は Linux カーネルのネットワークについてあまり知りません。本や Web サイトを提案してくれる人は、このトピックについて私を助けることができますか? コメントありがとうございます~~

編集:「すべてのプログラマーがメモリについて知っておくべきこと」6.3.5「ダイレクトキャッシュアクセス」によると、「DCA」は私が知りたい方法だと思います...

4

1 に答える 1

1

割り込みは (かなりの確率で) パケットを受信するコアとは別のコアで発生します。ドライバーがパケットを処理する方法に応じて、問題になる場合と問題にならない場合があります。ドライバーがパケットを読み取る場合 (コピーを作成する場合など) は、別の CPU でキャッシュがいっぱいになるため、理想的ではありません。しかし、パケットが DMA を使用してどこかのメモリにロードされ、ソフトウェアが後で取得するためにそこに残されている場合は、問題ではありません [実際、「あなたの」CPU として別の CPU で発生させる方が良いです他のことをする時間が増えます]。

ハイパースレッディングの使用に関して、私の経験 (および他の多くの人の経験) では、ハイパースレッディングを使用するとメリットがある場合もありますが、2 つのスレッドが同じコアの同じ実行ユニットを使用するため、ハイパースレッディングを使用しない場合と同じ結果になることがよくあります。同じコアで両方のスレッドをアフィニティに設定してスループットを比較し、それが「より良い」か「より悪い」かを確認することもできます-ほとんどの場合と同様に、違いを生むのは多くの場合詳細であるため、コードはつまり、どちらかのケースでうまく機能します。

編集: システムに複数のソケットがある場合、ソケットの CPU がネットワーク カードに「最も近い」(QPI/PCI ブリッジ ホップの数のように) ことを確認することもできます。

于 2013-01-24T02:23:23.997 に答える