問題タブ [softirq]

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 投票する
3 に答える
13151 参照

linux - softirq と tasklet はどのコンテキストにありますか?

プロセス コンテキストと割り込みコンテキストがあることは知っていますが、softirq や tasklet を実行するときに、どのコンテキストで実行されるのかわかりません。

「下半分のコンテキスト」という用語を使用している人を見たことがありますが、そのような用語がある場合、他の用語との違いは何ですか。

softirq と tasklet に対するもう 1 つの質問は、実行中にスリープが許可されないのはなぜですか??

誰でもこれらの質問を特定するのを手伝ってもらえますか、ありがとう!!

0 投票する
4 に答える
36742 参照

linux-kernel - SoftIRQとタスクレットの違い

Linuxの割り込み処理を研究していると、タスクレットとSoftIRQが「下半分」(優先度の低い作業)を実行する2つの異なる方法であることがわかりました。私はこれを理解しています(かなりの真の必要性)。

違いは、SoftIRQは再エンタラントですが、タスクレットは再エンタラントではありません。同じSoftIRQを異なるCPUで実行できますが、タスクレットの場合はそうではありません。

私はこれを表面から理解していますが、2つの機能の要件を理解できていません。どのような場合にこれらの機能を使用できますか?今タスクレットを使用し、次にSoftIRQを使用する必要があることを認識する方法。

また、タスクレットがSoftIRQで作成されるとはどういう意味ですか?私がLKMLで読んだ本の1つで、タスクレットの削除について議論がありました。なぜそのような機能を導入するのか、私は完全に混乱しましたか?近視眼的(犯罪を意味しない)?

これに関するポインタは大いに役立ちます。

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

linux-kernel - Linux IRQ: ISR 内の IRQ のマスク解除

を使用している IRQ がありhandle_level_irq()ます。ほとんどの場合、ISR は下位半分をスケジュールする必要がありますが、場合によっては、それが偽であると判断でき、(パフォーマンス上の理由から) 下位半分をスケジュールしたくない場合があります。問題は、後者の場合、競合状態が発生することです。ISR がスプリアスであると判断した場合、割り込みのマスクを解除し、終了する準備をします (desc->lockこの時点では、ISR は によって保護されていないことに注意してください)。handle_level_irq()しかし、その後、2 番目の CPU で割り込みがトリガーされます。2 番目の CPU は、グラブに従ってdesc->lockIRQ をマスクし、1 番目の CPU で ISR が進行中であると判断するため、ロックを解除desc->lockして終了します。最初の CPU の元の ISR も終了し、割り込みは常にマスクされたままになります。

必要がない限り、下半分をスケジュールできないようにしたいので、上記の競合状態を回避しながら、ISR がマスクを解除する方法はありますか?

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

android - Linuxカーネルで独自の新しいsoftirqを定義してトリガーする方法は?

Linux カーネルで独自の softirq を作成したいと考えています。それを行う正しい方法ですか:

initからトリガーしたいモジュールの に、softirq次の呼び出しを追加します。

そして、スニペットでは、softirq を上げたいので、raise_softirq関数への呼び出しを追加します。

そして、私の新しいものを追加softirqしてください:

そしてここで:

質問:

  • 私は正しいですか、それとも何かを見逃しましたか?
  • それは正しい方法ですか?他のオプションはありますか?
0 投票する
1 に答える
791 参照

c - softirq とプロセス コンテキスト間でデータを共有する

softirq (netfilter 事前ルーティング フック) とユーザー コンテキスト (ioctl 呼び出し内) の間でデータ構造を共有するカーネル モジュールを開発しています。

このリンクを読んだ後、(spin_lock_bhまたはを使用してspin_lock_irqsave) データを変更するときにユーザー コンテキストでソフトウェア割り込みを無効にし、共有データの操作が完了したら再度有効にする必要があることがわかりました。

ただし、softirq ハンドラー関数でロックを取得する必要があるかどうかはわかりません。ここでも (spin_lock を使用して) ロックを取得する必要がありますか?

別のsoftirqまたはhardirqとデータを共有する場合、softirqハンドラーでスピンロックを使用するだけでよいことを理解しています。私の理解は正しいですか?

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

linux - 高度にスレッド化された高頻度の使用にsoftirqが使用されるのはなぜですか?

ネットワークドライバーやブロックドライバーなど、高頻度で使用するためにsoftirqを特別なものにしている理由.

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

linux - 複数のプロセスを実行してもスケーリングしない


2 つの C++ プロセスがあり、各プロセスに 1 つのスレッドがあります。スレッドは、32 の着信 TCP 接続からのネットワーク トラフィック (Diameter) を処理し、それを解析して、32 の発信 TCP 接続を介して分割メッセージを転送します。この C++ プロセスを DiameterFE と呼びましょう。
実行中の DiameterFE プロセスが 1 つだけの場合、1 秒あたり 70,000 メッセージを処理できます。
2 つの DiameterFE プロセスが実行されている場合、それぞれ 35,000 メッセージ/秒を処理できるため、合計で同じ 70,000 メッセージ/秒になります。
なぜ彼らはスケーリングしないのですか?ボトルネックとは?

詳細: 各 Diameter フロント エンド プロセスには 32 のクライアント (カモメ) と 32 のサーバ (カモメ) があり、別々のホストで実行されます。
これら 2 つのプロセス用に専用ホストが提供されます - 2 つの E5-2670 @ 2.60GHz CPU x 8 コア/ソケット x 2 HW スレッド/コア = 合計 32 スレッド。
10 ギガビット/秒のネットワーク。平均直径メッセージ サイズは 700 バイトです。

Cpu0 だけがネットワーク トラフィックを処理しているようです - 58.7%si. 異なるネットワーク キューを異なる CPU に明示的に構成する必要がありますか?
最初のプロセス (PID=7615) は 89.0 % の CPU を使用し、Cpu0 で実行されています。
2 番目のプロセス (PID=59349) は 70.8 % の CPU を使用し、Cpu8 で実行されています。
一方、Cpu0 は 95.2% = 9.7%us + 26.8%sy + 58.7%si で
ロードされますが、Cpu8 は 70.3% = 14.8%us + 55.5%sy でしかロードされません。

2番目のプロセスでもCpu0が作業を行っているようです。非常に高い softirq があり、Cpu0 = 58.7% のみです。なんで?

キー「1」が押されたときの一番上の出力は次のとおりです。