2

x86_64 での割り込みのコストはいくらですか。たとえば、ページ フォールトによる割り込みはありますか。カーネルが割り込みを処理してからユーザー空間に戻るには、どのくらいのサイクルが必要ですか? 割り込みによるコストのみを知り、割り込みを受けたユーザー レベル スレッドのスケジュールを元に戻すことに関心があるため、ここでは割り込みハンドラー内で何が起こっているかを無視できます。

4

2 に答える 2

1

任意の割り込み (ハードウェア IRQ またはゼロ除算のような通常の例外) の場合、おそらく上限を与えることができます。

ページ フォールトを処理する時間は、ディスク IO が関与していない場合でも評価するのが特に困難です。これは、CPU がページ テーブルを走査する必要があり、多くの変数が導入されるためです。ページ フォールトは、ページが存在しないだけでなく、アクセス違反 (たとえば、読み取り専用ページに書き込もうとするなど) によっても発生します。いずれにせよ、ページ マッピングが TLB にまだ存在しない場合 (欠落したマッピングはキャッシュされません)、CPU は、ページ フォールト ハンドラーを呼び出す前に、まず複数レベルのページ テーブルを調べる必要があります。ページ テーブル エントリにアクセスする時間 (アドレスがまだ TLB にキャッシュされていない場合) は、いくつかのエントリがデータ キャッシュに既に存在するかどうかに依存します。

したがって、線形アドレスにアクセスしてから PF ハンドラーが呼び出されるまでの時間は、~200 サイクル (最良の場合: TLB エントリが存在し、間違ったアクセス タイプによる例外 -- リング スイッチのみ) から ~2000 サイクル (TLB エントリが存在せず、データ キャッシュにページ テーブル エントリがない)。これは、1) フォールトするユーザー モード命令を実行してから、2) ページ フォールト ハンドラの最初の命令を実行するまでの時間です。

[補足: それを考えると、ページングを使用するハード リアルタイム システムを構築することは可能かどうか疑問に思います。]

于 2012-04-24T08:42:17.917 に答える
0

これは複雑な質問であり、簡単には答えられません。

割り込みで使用されているすべての (使用されている) レジスタ (scalar、sse、fpu-state、avx など) を保存する必要があります。

おそらく、仮想アドレス空間のコンテキストを変更する必要があります。

完了したら、保存されたコンテキストをリセットする必要があります。

そしてその間ずっと、キャッシュ/RAM 負荷の影響により、必要なサイクル数が変化します。

(注意: 割り込みはページアウトされるべきではありませんが、Linux がこれをサポートしているかどうか、または可能であるかどうかはわかりません)

于 2012-04-23T15:07:42.357 に答える