問題タブ [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.
networking - ixgbe: RX/TX キューの数を設定する
Intel 10G NIC が使用する RX/TX キューの数を設定したいと考えています。理由を説明しましょう:
Dell R720 システムでタイプ X520 の Intel 10G NIC を使用しています。ixgbe バージョン 3.6.7-k を使用しています。Ubuntu 3.2.0-59 のカーネル。
マシンの 24 個のコアのうち 4 個でネットワーク アプリケーションを実行しています。現在、NIC はフロー ディレクタを使用しているため、24 の TX および RX キューがあり、ほとんどの IRQ は最終的にアプリケーションを実行する 4 つのコアで実行されます。
ただし、いくつかの IRQ が他の 20 のキューで実行されていることがわかります (これはおそらく、flow-director がトラフィックの約 20% をサンプリングするために発生しているため、一部のトラフィックは通常の RSS を通過します)。IRQ の実行によって損傷を受ける別のタスクを実行しているため、他の 20 個のコアで IRQ を実行したくありません。
割り込みのアフィニティを使用する 4 コアのみに設定してみましたが、これはフロー ディレクタではうまく機能しません。より良いアプローチは、4 つの RX/TX キューのみを使用し、それらを専用コアに割り当てることだと思います。しかし、ixgbe ドライバーで RX/TX キューの数を設定する方法が見つかりませんでした (Broadcom の bnx2x など、私がよく知っている他の 10G ドライバーでは非常に簡単です)。
何か案が?
c - 他のプロセッサへの割り込み要求の拡張
既存の割り込み要求を他のプロセッサにどのように拡張しますか? 特定のプロセッサで作成および有効化された既存の要求が既に存在します。ハードウェア カウンターに基づいて起動するこの IRQ を拡張したいと考えています。これにより、プロセッサごとに IRQ が存在し、いずれかの IRQ がトリガーされると、既存の IRQ とそのハンドラーに送られます。基本的に、私は IRQ マルチプレクサを作成しようとしています。誰もこれを経験したことがありますか?
より適切な説明は、IRQ がすべてのプロセッサで同じであるということです。したがって、すでに要求され有効になっている IRQ (別の .c ファイルで要求、有効化、および処理されている) を、新しい .c ファイル内の percpu IRQ に変更したいと考えています。
kernel - 私の ISR ハンドラは完全に動作しますが、IRQ ハンドラは動作しません
割り込み処理について勉強しています。私の割り込み記述子テーブルは次のとおりです。
idt の読み込み手順は次のとおりです。
isr_handler C 関数が呼び出されます。ただし、irq_handler C 関数は呼び出されません。irq 処理部分だけが動かない理由がわかりません。助けてください。
assembly - SAMA5D3 での割り込み処理
では皆さん、
ARM アセンブリに慣れようとしていますが、割り込みの概念がよくわかりません。これに先立って、私は AVR 割り込みを扱ってきました。コードは、割り込みベクトルを、ジャンプ先のサブルーチンまたはセグメントに明示的にリンクするように記述されていました。
しかし、Atmel SAMA5D3 シリーズを使用する際に、同様のことを行う方法がわかりません。最初の 8 つの割り込みベクトルが最初の 8 つのプログラム カウンター アドレス ( reset
at0x00
からfiq
at 0x1C
) にあることは理解していますが、個々の周辺機器がどのように割り込みを行うかについて、適切で実用的でわかりやすいリソースを見つけることができませんでした。 (SPI、UART、TC モジュール) は、標準化された ARM ベクトル テーブルにマップされます。
つまり、割り込みをスローできるように UART を構成するコードを想定します。割り込みをスローするとどうなりますか? irq
エントリのアドレス( 0x18
) には、デバイス固有のベクトルのテーブルの場所が含まれていますか? ベンダー固有およびデバイス固有のペリフェラルは、コア標準化テーブルを介してどのように割り込みをアサートしますか?
私は SAMA5D3 と ARM ARM のデータシートを調べましたが、初心者にとって簡単なものはあまり見つかりませんでした。何か不明な点があればお詫び申し上げます。また、アセンブリを避けたことは世界に恥をかかせます。
編集:
SAMA5D3 データシートの 118 ページには、次のように記載されています。
次のことが想定されます。
- 高度な割り込みコントローラがプログラムされ、AIC_SVR レジスタに対応する割り込みサービス ルーチン アドレスがロードされ、割り込みが有効になります。
- ベクトル化を使用するには、ARM 割り込み例外ベクトル アドレスの命令が必要です。
LDR PC, [PC, # -&F20]
がアサートされたとき
nIRQ
、 のビット「I」CPSR
が 0 の場合、シーケンスは次のようになります。
- は
CPSR
に格納されSPSR_irq
、プログラム カウンタの現在の値は割り込みリンク レジスタ (R14_irq
) にロードされ、プログラム カウンタ (R15
) には 0x18 がロードされます。アドレス 0x1C でのフェッチ中の次のサイクルで、ARM コアは を調整しR14_irq
、それを 4 だけ減らします。- ARM コアは、まだ割り込みモードに入っていない場合は、割り込みモードに入ります。
- アドレス 0x18 にロードされた命令が実行されると、プログラム カウンタに で読み取られた値がロードされ
AIC_IVR
ます。
これは理解できます。これを読んでレジスタ番号を見ると、周辺機器の割り込みソース (つまりSPI0/1
) 番号を のINTSEL
フィールドに入れるAIC_SSR
と、ISR のアドレスを に格納するように聞こえますAIC_SVR
。
2 つの問題があります。そのうちの 1 つは、存在する必要があり、 のベクトル アドレスLDR PC, [PC, # -&F20]
と互換性がある必要があるベクトル化命令 ( ) を理解していないことです。irq
0x18
もう 1 つの問題は、複数の割り込みを有効にする方法です。フィールドとソース ベクタ レジスタは 1 つしかないINTSEL
ので、このシステムで複数の割り込みハンドラを実行するにはどうすればよいでしょうか?
皆さん、私がこれを理解していない場合は、引き続きお詫び申し上げますが、少なくとも宿題をしようとしています.
c - PIT が IRQ0 に割り込みを送信しない
これは初歩的な質問かもしれませんが、私は小さな OS を作成するためのチュートリアルに従っています。これまでのところ、割り込み記述子テーブル、ハンドラーを登録する方法、デフォルトのハンドラー (int 番号を画面に出力する) をセットアップし、PIC を割り込み 0x20 以上に再マップしました。
プログラマブル インターバル タイマーを 50Hz で刻むようにセットアップしましたが、IRQ0 は生成されません。ディスクリプタ テーブルの割り込み 32 でタイマー ハンドラをセットアップしましたが、次のように手動で割り込みを生成すると__asm__ volatile ("int $0x20);
、画面に "Tick: 0x00000001" が出力されます。
ここに私の timer.c ファイルがあります:
linux - enable_irq_wake と enable_irq の違い
私のドライバーは、デバイスをウェイクアップできる irq を使用しています。これらの関数の定義を調べましたが、あまり理解できませんでした。
両方の組み合わせを使用してみましたが、効果はないようです。つまり、enable_irq_wake を使用するだけで、それ以外の場合は enable_irq を使用してから enable_irq_wake を使用します。
ありがとうございました
hardware - 複数のデバイス間で物理ハードウェアで単一の irq ラインを共有する方法
単一の irq ラインが複数のデバイス間でどのように共有されているか、つまり、ハードウェア レベルで物理的にどのように接続されているか、複数の APIC コントローラーを使用しているか、または他の方法が使用されているかを知りたいです。