問題タブ [irq]

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.

0 投票する
1 に答える
1935 参照

linux - Linux 外部イベント処理 - IRQ とポーリング kthread

デバイス ドライバーを QNX から Linux に移植しています。QNX では、古いドライバーは、真の割り込みハンドラーを登録するのではなく、無限ループを持つ pthread を使用して割り込みの発生を監視していました。専用のポーリング スレッドの代わりに register_irq() を使用することの有効性を実証するために、Linux で 2 つのドライバーを作成しました。それぞれに関連するコードを以下に示し、質問は下部にあります。

IRQ

ハンドラを書く

ハンドラーを登録する

ポーリングスレッド

スレッド関数を書く

スレッドを開始する

質問

オシロスコープに 2 つのトレースを配置すると、1 つはカードのデジタル入力 (割り込みをトリガーする) を監視し、もう 1 つはカードのデジタル出力 (割り込みに反応する) を監視すると、イベントへの反応時間を測定できます。

最初の「適切な」方法である IRQ の登録には、約 80 マイクロ秒かかります。

無限スレッドを実行する 2 番目の方法では、約 15 ~ 30 マイクロ秒かかります。

何を与える?前者の利点は、処理能力をあまり消費しないことですが、なぜ応答時間がそれほど劇的に低下するのでしょうか? このポーリングスレッドを持つことは、実際にはどれほど悪いことでしょうか? ポーリング スレッドが CPU に与える余分な負荷を調査し、最終的に実証するにはどうすればよいでしょうか?

御時間ありがとうございます!

一番

スコット

0 投票する
0 に答える
179 参照

linux - ネットワーク アダプタからの割り込みが異なる CPU コア x86_64 で発生したことを達成することは可能ですか?

Linux (Intel Xeon x86_64) を実行しているネットワーク サーバーを実装している場合、多くの場合、ボトルネックは単一で常に同じ CPU コア (割り込みは常に同じ (CPU0) コアで発生する) になり、割り込み (IRQ) が発生します。ネットワークカードドライバーのコードを呼び出すネットワークカードの。単一ではなく、異なるプロセッサコアで(ランダムまたはラウンドロビンによって)割り込みが発生し、負荷が分散されるようにすることはできますか?

ただし:ハードウェア割り込みが 1 つのコアで完了しない限り、割り込みが完了する前にネットワーク デバイスで何らかの方法でジョブを完了したとしても、別のコアが原因ではない場合、次のようになります。

異なるコアで割り込みが発生するたびに、ネットワークカードとデータを交換し、特定の CPU コア (このコアのインデックスを持つバッファー) に関連するメモリに到達したデータを積み上げてから、割り込みを終了したい(IRQ) コード。したがって、スレッド間同期は避けたいと思います。各コアは、ネットワークカードに割り込むか、1 つのスレッドのみがコアにバインドされ、優先度がリアルタイムで与えられます。私は 1P-1C コンテナーを使用しており、そのキャッシュ ラインはすべて常にシングル コアの L1/L2 のみに属しています。また、キャッシュ同期 (CPUx L1/L2 <-> L3 <-> CPUy L1/L2) は必要ないため、10 倍の速度が得られます。

または、ハードウェア IRQ の代わりにソフト IRQ を使用する方がよいでしょうか?

0 投票する
2 に答える
7271 参照

linux-kernel - do_IRQ での割り込みベクトルと irq のマッピング

Linux 3.6.0 を搭載した x86 システムで作業しています。いくつかの実験では、IRQ がベクトルにどのようにマップされているかを知る必要があります。ベクトル0x0から0x20はトラップと例外用であり、ベクトル0x20以降は外部デバイス割り込み用であると多くの本から学びました。そして、これもソースコード Linux/arch/x86/include/asm/irq_vectors.h で定義されています

しかし、私が困惑しているのは、do_IRQ 関数をチェックすると、 http: //lxr.linux.no/linux+v3.6/arch/x86/kernel/irq.c#L181 によって IRQ が取得されていることがわかりました。 「vector_irq」配列を検索します。

printk を使用してコードをインストルメント化することにより、得られた vector-irq マッピングは以下のようになり、これがマッピングである理由がわかりません。マッピングは (irq + 0x20 = vector) である必要がありますが、そうではないようです。

しかし、私の出力は次のとおりです。

ところで、これらの irq は、MSIX が有効になっている私の 10GB イーサネット カードです。これがマッピングである理由について、誰かが私にいくつかのアイデアを教えてくれますか? このマッピングを作成するためのルールは何ですか?

ありがとう。ウィリアム

0 投票する
1 に答える
1516 参照

linux-kernel - MSI-X デバイスで IRQ アフィニティを設定できますか (Linux)?

以前、proc ファイルに値を設定して、Linux で IRQ アフィニティを設定しました。[1] しかし、NIC などのアフィニティを設定したいデバイス (PCIe) に MSI-X を使用するシステムでこれを行うと、/proc/interrupt カウンターが IRQ とコアごとに増加することに気付きました。私が設定したシングルコア用ではありません。非 MSI-X システムでは、指定されたコアが割り込みに応答します。

Linux カーネル 3.11 を使用しています。

短い: MSI-X 割り込みを使用するデバイスに IRQ アフィニティを設定できますか?

[1] https://www.kernel.org/doc/Documentation/IRQ-affinity.txt

0 投票する
1 に答える
710 参照

linux - Linux での共有 IRQ

IRQ ラインが複数の登録された割り込みサービス ルーチン間で共有されている場合、割り込みラインが発生したときの ISR の実行順序は何によって決定されますか?