• Herramientas Online
  • - Calculadoras
    • Contador de caracteres
  • - Descarga
    • Descarga de TikTok
    • Descarga de DouYin
  • - Herramientas web
    • BASE64
    • Base64 a imagen
    • Imagen a Base64
    • Codificación URL
    • JavaScript
    • Timestamp
    • Convertidor Unicode
    • Formato JSON
    • Modificar extensión
    • Crear lista
    • Optimizador CSS
  • - Herramientas de cifrado
    • Cifrado MD5
    • Generador aleatorio
  • - Herramientas de imagen
    • Compresión de imágenes
    • Generador de código QR
    • Lector de código QR
    • Vista previa de fondo
    • EXIF de imagen
  • - Hojas de información
    • Herencia de grupo sanguíneo
    • Tallas de ropa
  • [email protected]
DopuBox
  • English
  • Español
  • Français
  • 日本語
  • 한국어
  • 简体中文
  • 繁體中文
全部 ニュース Meta Code 文化・アート
linuxカーネルのソフトブレーク状況の概要
2022-01-01

ソフトブレークの紹介

遅延可能な処理をハード割り込み処理プログラムから独立させ,この処理を割り込みを開いた場合に実行することができ,この処理がソフト割り込みである.ソフトブレークのこのような離脱は,多くのリアルタイムアプリケーションにとって重要であるハードブレークの応答時間を大幅に短縮できることが分かった。

本稿ではソフト中断についてのみお話ししますが、tasklet、workqueueについては後でお話しします。ソフトブレークダウンプロセス(linux kernel 4.0参照)について説明すると、その詳細を深く理解し、自分たちの理解を共有しようとします(不正であれば、指摘してください。ありがとうございます)。

ソフトブレークデータ構造の定義

ソフトブレークの登録

Open_経由softirq()は、特定のソフト割り込み処理関数とソフト割り込み番号をバインドします。ネットワークシステムが送受信パケットのソフトブレーク処理関数を登録している場合:
コードのコピー
open_softirq(NET_TX_SOFTIRQ, net_tx_action);

open_softirq(NET_RX_SOFTIRQ, net_rx_action);

ソフトブレークのアクティブ化
各cpuには32 bitのビットマップ(すなわち__softirq_pending)があり、本cpu上のソフト割り込みがアクティブになっているかどうかを維持します。
コードのコピー

typedef struct {

unsigned int __softirq_pending;

#ifdef CONFIG_SMP
unsigned int ipi_irqs[NR_IPI];

#endif

} ____cacheline_aligned irq_cpustat_

irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned;

ソフトブレークのアクティブ化タイミングの1つ:irq_exit

irq_exit関数ではソフトブレークがアクティブになる可能性があります。アクティブ化条件は:

ハード割り込みではなくソフト割り込みではなく本cpuの_softirq_pendingにセットがあります。

コードのコピー
if (!in_interrupt() && local_softirq_pending())

invoke_softirq();

この条件から,ソフト割り込みとハード割り込みはここで同等に扱われ(in_interruptでは),割り込み処理という本質を体現していることが分かる.ハード割り込みの条件ではなく、優先性を示し、ソフト割り込みを考慮するには、ハード割り込みをすべて処理しなければならない。ソフトブレークに入れない条件は,ソフトブレークのネストを遮断していることを示している.

invoke_softirq関数の処理は、(まずksoftirqdを起動する)ソフト中をksoftirqd専門スレッドで処理するか、直接__を呼び出すかである。do_softirqインスタント処理(もちろん、インスタント処理は、現在のスタックにあるか、独立したソフトブレークスタックにあるかを区別します)。

ソフトブレークのアクティブ化タイミングの2:raise_softirq

NICパケット方式は非NAPIからNAPI方式に進化し,ソフト割り込みの利点を十分に示した:受信タスクをソフト割り込み処理に最大限に渡し,ハード割り込み処理を最大限に簡素化する.この進化は後で話しましょう。

ソフトブレークのアクティブ化の3:ksoftirqd
各cpuには、ソフトブレーク量が大きい場合にソフトブレークを専門に処理するksoftirqdスレッドがあります。

コードのコピー

DEFINE_PER_CPU(struct task_struct *, ksoftirqd);

ksoftirqdスレッドのコア関数run_ksoftirqdの(ループ)処理は、本cpuを中断して見る_softirq_pendingのセットの場合、あれば実行_do_softirqd()、実行完了割込み)。この実行はスムーズです。このスレッド自体のスタックでは、ユーザープロセスに影響を与える問題はありません。

ここで疑問なのは、ここでは以前は関強盗保護だったが、今は関中断保護だった(2012年のpatch 3 e 339 b、softirq:Use hotplugthread infrastructureを参照)?我々の理解は、プリエンプトに関する保護方式は、後続のより多くのソフトブレークをksoftirqdによって処理させ、ksoftirqdの補助的な地位に合致しないことである。ソフトブレークを処理する地位についてはirq_exitを主とし,ksoftirqdを補助とする.

ksoftirqdでは、ソフトブレークを実行する前にプリエンプトされることも見られますが、実行が開始されるとプリエンプトされることはできません(上記のスケジューリングの1つ:irq_exitで述べた考え方と一致しています)。すなわち,ソフト割り込みとハード割り込みの処理思想は一致している:実行期間中にスケジューリングが発生することは許されない!
ソフトブレークのアクティブ化の4:他の場所

例えばnetif_rx_Ni()、do_の実行softirqフロントオフプリエンプトは、ソフト割り込みの実行中にスケジュールできません。

ソフトブレークのアクティブ化の5:local_bh_enable

コードのコピー

if (unlikely(!in_interrupt() && local_softirq_pending()))

do_softirq();

考えてみれば,異常とソフト割り込みに共有データがあれば,異常処理がこの共有データの臨界領域に達するとソフト割り込みをオフにする必要があるが,ハード割り込みをオフにする必要はない.では、臨界領域を通過すると、ソフトブレークが必要になります。この場合はアクティブ化のタイミングです(preempt_countを見てください。実はプリエンプトのタイミングかもしれません)。

「呼び出し」ではなく「アクティブ」を使用する理由は、周辺処理が本cpuの__のみを変更するためである。softirq_pendingビットマップは、最後にコアメカニズム(例えばksoftirqd、in_interruptでチェックできるソフト割り込み処理)によって本格的に処理されるが、これはソフト割り込みの理念である:ハード割り込み(または他の)をより速く実行させるため、直接呼び出す方式を採用しない。

ソフトブレークコア関数処理のdo_softirq

do_softirqはまずソフト割り込み再入条件をチェックする:ハード割り込みではなくソフト割り込みではなく、条件に合致した後、以下のソフト割り込み処理を開始することができる。

コードのコピー

pending = local_softirq_pending();

if (pending)


ソース元URL:https://dopubox.com/article/p/960bb81942d9a290

Otras Herramientas
  • Contador de caracteres Descarga de TikTok Descarga de DouYin BASE64 Base64 a imagen Imagen a Base64 Codificación URL JavaScript Timestamp Convertidor Unicode Formato JSON Modificar extensión Crear lista Optimizador CSS Cifrado MD5 Generador aleatorio Compresión de imágenes Generador de código QR Lector de código QR Vista previa de fondo EXIF de imagen Herencia de grupo sanguíneo Tallas de ropa
  • ジョン・レノンのギター4億5千万円で落札
    2024-05-30

    社長「関係者や視聴者不安にさせた」と謝罪
    2024-05-30

    【6月1日~2日】週末必見の“アート&デザイン”まとめ!
    2024-06-01

    入試問題は白黒です 「わかりやすさ」「カラフル」は逆効果、自分で図を書くべし 桜井信一の攻める中学受験
    2024-05-31

    鎌倉幕府の地頭から海の武士団・松浦党に…古文書群「青方文書」からみる中世の漁業や製塩事情
    2024-06-01

    【光る君へ】平安時代、強烈なエピソードで知られた2人の受領とは
    2024-06-01

    森トラストが平安女学院から有栖川宮旧邸を取得…今度の活用は京都市とも引き続き協議
    2024-06-01

    <今週の本棚・次回の予定>6月8日の毎日新聞書評欄は『新装版 ペルーからきた私の娘』ほか
    2024-06-03

    大阪はアートとデザインの街となるか? Osaka Art & Design 2024の見どころをレポート
    2024-06-03

    声優の増山江威子さん死去
    2024-06-03

    小学館「作家の意向第一に協議」 映像化指針、ドラマ原作者死去で
    2024-06-03

    「警察密着24時」担当者ら懲戒 テレビ東京、石川社長は3割返上
    2024-06-03

    2025年春に「直島新美術館」が誕生。既存の活動から新しい価値創造を目指す
    2024-06-04

    知ってる? 「登録博物館等マーク」
    2024-06-05

    「UESHIMA MUSEUM」が開館。屈指の現代美術コレクションを一般公開
    2024-06-05

    「台北當代2024」開幕レポート。「台湾マーケットのニーズに応えるプラットフォームに」
    2024-06-04

    大学入学共通テスト、追試は本試験1週間後 コロナ禍前に戻す 月経痛の配慮明記も
    2024-06-05

    長山智美 デザイン狩人|HAY DOGS♡
    2024-06-06

    写真家の吉田ルイ子さん死去 「ハーレムの熱い日々」
    2024-06-06

    もしあの時に戻れたら…歌人・穂村弘が話題書『迷子手帳』で明かす、今も忘れられない「失敗」
    2024-06-07

    ©  Dopu Box
    💛