Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxカーネルのソフトウェア割り込みの深さの分析

Linuxカーネルのソフトウェア割り込みの深さの分析

  
 

ソフトは
紹介割り込む

プロセスが独立したハード割り込みハンドラから遅延させることができるので、このプロセスがオープン中断することなく実行することができ、このプロセスはソフト割り込みです。この目に見える、ソフト割り込みが大幅に多くのリアルタイムアプリケーションとその重要性のために、ハードウェア割り込みからの応答時間を短縮することができます。我々は後で話すとき

この論文では、タスクレットとして、ソフト割り込みについてワークキューを話しています。我々はソフト割り込み処理を話すとき(Linuxカーネル4.0を参照)、それらのそれぞれの詳細の深い理解しようとすると、私たち自身の理解を共有し(正しくない場合は、指摘して見て、ありがとうございました)。
ログイン(図タイトルから:techvark.com)

ソフト割り込みデータ構造定義

があるソフトウェア割り込み10(NR_SOFTIRQSによって定義される)番目、softirq_vec [NR_SOFTIRQS]を介してこれらのソフト割り込み、すべてのCPUシェアを管理するための配列。


割り込みレジスタソフト

open_softirqによる割り込み番号()は、特定のソフト割り込みハンドラとソフト結合。ネットワークシステムの登録パケット送受信ソフト割り込みハンドラ:

 open_softirq(NET_TX_SOFTIRQ、net_tx_action); open_softirq(NET_RX_SOFTIRQ、net_rx_action); 


ソフト割り込み活性化

は、各CPUでありますこのCPU割り込みがアクティブになっている上、ソフト維持するために、32ビットのビットマップ(すなわち__softirq_pending)があります。
構造体のtypedef

 {unsigned int型の__softirq_pending; CONFIG_SMP unsigned int型ipi_irqs [NR_IPI]の#ifdef; #endifの} ____cacheline_aligned irq_cpustat_irq_cpustat_t irq_stat [NR_CPUS] ____ cacheline_aligned; 

活性化つのソフト割り込み時間:irq_exit

irq_exitはソフト割り込みで機能を活性化することができる、活性化条件は以下のとおりです。

は、ハードとソフト割り込みで中断されていないがでと、このCPUが設定した__softirq_pendingではありません。

であれば(in_interrupt()&!& local_softirq_pending())invoke_softirq();この状態から、

、我々は知ることができ、ソフト割り込みおよびハードウェアは、ここで中断(in_interruptレーンで)同じ治療法でありますこれは、このプロセスの本質は中断され体現します。その優先順位がなければなりませんを示す、ハードな条件で中断することができない、それはハード、ソフト割り込みを検討する前に、すべての処理さを中断しなければならない、そうでない状態でのソフト割り込みで、その盾ソフト割り込みネスティングを示します。

invoke_softirq処理機能のいずれかである(最初のksoftirqdウェイク)は、特殊なソフトウェア割り込みスレッド処理をksoftirqdために引き渡される、直接スタック上にあるものを区別するための即時のコースの治療(、リアルタイム処理__do_softirq呼び出す:現在の)スタック上または個別のソフトウェア割り込みスタックインチ

私たちは、このリアルタイム処理の流れを見てください。確かにこの時点では何もpreempt_countソフト割り込みビットが存在しない場合preempt_countは、割り込みビットハードクリアlocal_softirq_pending前に(インスタントシャットハードウェア割り込み)横取りすることができます。様々なソフト割り込み期間に__do_softirq処理では、確かに禁止つかみます。不確実性の聞かせて中断したプロセスの実行時間を、それがで中断スケジューリングプロセス、ハードとソフトの割り込みに残すために持っていない、つまり(公平ではない:割り込みコンテキストで(ソフト)ハードをつかむには十分許されないことが知られています意図)。起動タイミング

ソフト割り込みII:raise_softirq

パケットモードのネットワークカードが進化する非NAPI NAPIの方法から受け取った、それはソフト割り込みの利点を実証している:タスク近い最大限に可能ソフト割り込み処理、最大簡素化ハード割り込み処理。この進化は、我々は後に再訪します。

raise_softirq機能は、指定されたCPUのビットマップを__softirq_pendingに対応するソフト割り込みを設定し、__raise_softirq_irqoff関数を呼び出します。 Raise_softirq_irqoff機能と機能がオフになっているかどうかの違いraise_softirq中断操作が完了しました。設定したビットマップを行うことができ、すべてのハードウェア割り込みで競争力のある操作ですので、あなたはオフに中断した場合の完了を確認する必要があります。三

ソフト割り込みは、それをアクティブ化:

 DEFINE_PER_CPU(構造体task_struct *:ksoftirqd 

ksoftirqd各CPUは、大規模なソフト割り込みソフト割り込みの処理に専用スレッドがあります、ksoftirqd);

ksoftirqd機能run_ksoftirqdコア糸(ループ)プロセスは、次のとおり実行__do_softirqd()は、割り込みが終了した場合に実行オフは、設定されたCPUを__softirq_pending存在の表示します)。この実行は、スレッドは独自のスタック上にあるため、問題はユーザプロセスには影響しません、非常に滑らかです。

ここで質問ですが、ここでの保護をつかむために閉鎖されるために使用される、(2012パッチ3e339b、のsoftirqを参照してください:使用hotplugthreadインフラ)中断保護オフになりましたでしょうか?私たちの理解は次のとおりです。プリエンプティブ保護オフ、ksoftirqd処理によって中断物事をより柔軟になり、ksoftirqd二位置を満たしていません。ソフト割り込みステータスを処理するという点では、サプリメントをksoftirqd、メインirq_exitでなければなりません。 )

ソフト割り込みを行うことが先取りが、一度開始する前に先取り(及び上記スケジュールのいずれかのことができない、レーンも見ることができますksoftirqd:irq_exitについて考えることは一貫していますA)。これは、処理のイデオロギーとソフト割り込みハードウェア割り込みが同じである、である:スケジューリングを実行中に発生することが許さ!

上記の理由は、実際には同様の原理トランザクションを先取りされていません。一度起動を停止することはできません。もう一つの理由は、スケジュールは、カーネルの制御の範囲であり、これらの操作中に作成しなければならない場合、ユーザ定義のハード(ソフト)、割り込みプログラムの実装は、操作が不確実であるということです。 4の

ソフト割り込みの活性化:
残りの

たとえばnetif_rx_ni()、do_softirq税関が押収実行する前に、ソフト割り込みのスケジューリング期間を実行することはできません。

ソフト割り込み起動ファイブ:local_bh_enable

の場合(可能性は低い(in_interrupt()&& local_softirq_pending())!)do_softirq(); 

それについて考え、もし例外とこれは、ソフト割り込みソフト割り込み例外処理は、共有データのこの重要な分野を歩いて、データを共有しているが、ハードウェア割り込みをオフにする必要はありませんオンにする必要があります。重要なゾーンを完了したときに、あなたはこの時点でソフト割り込みを開く必要が活性化するための時間です(preempt_countが、実際には、またつかむために時間がかかるかもしれない参照)。

と'活性化'の代わりに' '&呼び出し、周辺処理が変更するためだけin_interruptチェックソフト割り込みハンドラによって、例えばksoftirqdなどのコア機構(によって最終的にビットマップ本CPUを__softirq_pending、及び)実際の契約は、これはソフト割り込みのアイデアです:ハードウェア割り込み(または他の)はより速く実行するために聞かせて、その直接の呼び出しの使用を行います。

'活性化'アクティブになっている人の原則を扱う、ハードソフト割り込みを割り込むCPU上で処理され、CPUもたらすでしょう(または起因するCPUが一緒に行く割り込み割り込みソフトは難しいです) 。このように、各CPUにバランスの取れたSMPの利点、を十分に発揮します。ハードウェア割り込みとCPUの間の関係については、後ほどハード割り込みの話を議論します。それぞれ、各CPUが無関係である、ライン上で、独自のCPUソフト割り込みメカニズムを維持します。ソフト割り込みの同じタイプは、ソフトタイプの割り込み処理が支払うためにソフト割り込みの再入価格で共有データを保護するために行われる必要がある各CPUの並列処理:注意、関連性があります。ハードとソフト割り込みで中断されてはならないことではないが、次のソフトウェア割り込みを行うために予選後に開始することができます

ソフト割り込み再入国条件をご確認do_softirq do_softirqの

ソフト割り込み処理コア機能扱っ:

保留= local_softirq_pending();(保留)__do_softirq()場合は、

このプロセスは中断され、税関の保護の下で行われ、結局、ハードとソフトは基本的に同じ割り込み割り込み、 (ハード/ソフトが内部再オープンし、また別の問題を中断するに、もちろん)彼らが中断システムです。また見ることができる、代わりに使用するので、ここでは、唯一の判断__do_softirqの内部には、保留中の着信ローカル変数が存在しない、と値が変化することができる内部決意値は、ビットマップに設定されたビットの数が少なくなります。

私たちは何をこの検査条件に行こう。私たちの理解は次のとおりです。この条件は二つの効果に達した

:ネストを中断しないCPU上で同じソフトを、ネストされたハードではないソフト割り込み処理を中断します。同じ条件で、CPUは、__関数(do_softirq関数はリエントラントであると言うことができる)シリアル、非リエントラントdo_softirq行われ、用語の複数のCPUは、__ do_softirq機能も有する、リエントラントでありますソフト割り込みの種類。それはソフトは、ソフト割り込み処理の同じタイプはまだ関連データ構造のシェアを保護する必要があるので、このCPUで行ったが、柔らかい、並列またはマルチCPU間、当然のことながら、シリアライズを割り込み処理条件をチェックして、これを中断し、あります。 (それでも仕上げを行うことができるが)

__do_softirq

__ do_softirq関数処理の割り込み処理カーネルソフトウェアは可能であるが、すべてのソフトウェア割り込みを実行するように活性化される(本CPUのビットマップの識別を__softirq_pending )プロセス。私たちは三つの段階を分析しました。

準備処理の段階:閉じるソフト割り込み(効果は、このCPU割り込みネスティングのソフト禁止の目的を達成するように、上記の条件が真でチェックすることです)。
は、

コア処理ステージ:リード・ビットマップは、他のハードウェア割り込みを防止するときにのみオフハードウェア割り込みは、このビットマップは__softirq_pending CPUと記憶された、空のビットマップ、オープンハードウェア割り込みを取得する(ハードウェア割り込みを有効にする必要があり同時動作)。このCPU(ビットマップメモリ​​アップから得た)すべてのソフト割り込みの実装。これは、ユーザ・プロセス・スタックを使用して、すべてのこの時間後に、それはあまりにも長く借りることができない、10(MAX_SOFTIRQ_RESTART)までのコア処理サイクルです。ループ終了条件は、合計時間は超えているか、プリエンプトされる(オープン・ブレークが先取りしているだろう)、または10回まで。処理段階の

終了:オフ、ハード、ソフトが開い割り込み割り込み。 10サイクルは無限のソフト割り込みを解決している場合

また、割り込みはハード余分なソフトが多くを中断持って、多くのことを説明する時に発生します。次に、ユーザー・プロセス・スタックの借入に影響を与えるために継続し、直接専用ksoftirqdカーネルスレッドにはありません。新しいソフトの中断をもたらした新しいハード割り込みソフト割り込み処理期間、(もちろん、これだけのCPUを__softirq_pendingに設定されているが、実際の処理を持っていません)を入力します。また、これはサイクルの意味を説明しますそれは、処理を繰り返す必要があるので、(処理対象は非常に明確で、それはこのCPUの__softirq_pendingビットマップを空にすることです)。

その防止のソフト割り込みネスティングプロセスを見てください。アトミック動作電流路コアの前は、ハードウェア割り込み、ソフトウェア割り込みを実行した後、別のコア路B、Bによって中断された場合にオフソフト割り込みキーフレーズは、Aにこの戻りをプラス1の原子を有していなければなりませんソフト割り込みハンドラがアイドル状態でなければなりませんした後にBの処理が終了されていなければならないので、でアトミック操作はその後、行われます。アトミック操作はBがハードウェア割り込みを行う完了した後、Bが中断された場合、ソフトウエア割り込みが独自を実行しませんが終了します(ソフトウェア割込みネスティングため)、A、Aは、次に実行される場所に戻り、自分自身を扱うソフト割り込みに加えて、だけでなく、余分なソフトBの割り込みに対処します。ソフト割り込みビット用

preempt_count、上から知ることができ、それには2つの機能があります:単一CPUにネストソフト割り込みを防ぐために、ソフト割り込みの実行中に先取りされていない保証します。

最後に、繰り返していた:複数のCPU上で並列に、__do_softirq機能をCPUで処理され、ここで言えば任意の制御の対象ではありません。
タイミング中断について

概要

は非常に複雑に見えますが、2つの原則を免れることはできない:ハードウェア割り込みは(もちろん、異なるタイプの)ハードウェア割り込みを中断します。ハードウェア割り込みが中断されますソフト割り込み(同じ方法:ハード割り込みソフト割り込みは、ソフト割り込みソフト割り込みを中断しない、中断されません)。実際には、すべての一見複雑なタイミングちょうど2つ重ね合わせただけ
のです

Copyright © Windowsの知識 All Rights Reserved