x86_64の割り込みコストはいくらですか?たとえば、ページフォルトによる割り込み?カーネルが割り込みを処理してからユーザー空間に戻るのにどれくらいのサイクルが必要ですか?私は、割込みによるコストだけを知り、中断されたユーザレベルのスレッドのスケジューリングをスケジューリングすることに興味があるので、ここで割込みハンドラの内部で何が起こっているのかを無視することができます。x86_64の割り込みコストはどれくらいですか
答えて
これは複雑な質問であり、簡単には答えられません。
割り込みで使用されているすべての(使用された)レジスタ(スカラー、sse、fpu-state、avxなど)を保存する必要があります。
仮想アドレススペースのコンテキストを変更する必要があるかもしれません。
完了したら、保存したコンテキストをリセットする必要があります。
キャッシュ/ RAM負荷の影響はすべて、必要なサイクル数を変更します。
(NB:割り込みは、ページアウトするべきではありませんが、ないアイデアは、Linuxはこれをサポートしない場合、またはそれがすべてで可能な場合)
カーネルは整数命令以外のものの使用を一般的に禁止しています。また、一般的には、プロセスのアドレス空間にマップされ、アクセスからのみ保護される(LinuxとWin)。 – zvrba
@zvrba:カーネルは通常浮動小数点などを使用しませんが、状態を保存する必要があります(通常、プロセスがFPUを使用していない場合は保存しないでください)。 FPU/SSE /何でも使用する別のプロセスに切り替えることができます... – ninjalj
@zvrbaそうです、割り込みハンドラはすべてのレジスタを保存する必要はありませんが、 memcpyによるSSE。そして、あなたは正しいです。ウィンドウの下ではプロセスのアドレス空間にすでにマップされていますが、これがLinuxの場合であるかどうかはわかりませんでした。要は、いくつかのレジスタを救済する必要があるということです。メモリにマッピングされた特定のものを持っていなければなりませんが、一般的に数値化するのが難しいキャッシング効果のために、それらは重いものであってはなりません。 – Christopher
odrinary割り込み(ハードウェアのIRQまたはゼロによる除算のような通常の例外)のためにそれがありますおそらく上限を与えることが可能です。
ページ違反を処理する時間は、CPUがページテーブルを歩かなければならないためにディスクIOが関与していなくても評価するのが難しくなります。ページ違反は、ページが存在しないだけでなく、アクセス違反(たとえば、読み取り専用ページに書き込もうとするなど)によっても発生します。いずれにしても、ページマッピングがTLBにまだ存在しない場合(欠落したマッピングは決してキャッシュされない)、ページフォールトハンドラを起動する前に、CPUはまず複数のレベルのページテーブルを歩かなければならない。ページテーブルエントリにアクセスする時間(アドレスがTLBにまだキャッシュされていない場合)は、一部のエントリがすでにデータキャッシュ内にあるかどうかによっても異なります。
したがって、呼び出されるPFハンドラにリニアアドレスにアクセスするまでの時間は〜200サイクル(最良の場合、間違ったアクセスタイプのため例外 - リングスイッチのみ)から〜2000サイクルTLBエントリが存在し、データキャッシュ内のページテーブルエントリがない)。これは、1)障害が発生したユーザ・モード命令を実行することと、2)ページ・フォルト・ハンドラの最初の命令を実行することとの間の時間に過ぎない。
[サイドコメント:私はそれがページングを使用するハードリアルタイムシステムを構築することが可能だだろうか、という与えられた]
- 1. ルビーではどれくらいのコストがかかりますか?
- 2. Collection.retainAll(Collection)のコストはどれくらいですか
- 3. 割り込みサービスルーチンのためのx86_64のレジスタを保存するには?
- 4. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 5. 「割り込みフック」とはどういう意味ですか?
- 6. R:コストの行列を割り引く
- 7. Djangoアプリからのシークレットファイルの書き込み/読み取りのソリューションはどれくらい安全ですか?
- 8. タイマ割り込みはNMI ..ですか?
- 9. マイクロチップC18の通常の割り込みレイテンシとコンテキスト保存時間はどのくらいですか?
- 10. linuxのアーム割り込みハンドラはどこですか?
- 11. 割り込みを処理するプログラムはどこにありますか?つまり、割り込みハンドラは保存されていますか?
- 12. 割り込みの有効化と割り込みの復元の違いは何ですか?
- 13. nointerrupts()で機能している間に新しい割り込みがキューに入れられ、割り込み()の後に実行されますか?
- 14. Arduinoでの割り込み
- 15. デュアルプロセッサマシンではどのように割り込みが処理されますか?
- 16. Arduinoの割り込み間でシリアルを読み取るにはどうすればよいですか?
- 17. 割り込みと例外コンテキストの違いは何ですか?
- 18. サービスルーチンと割り込みサービスルーチンの違いは何ですか?
- 19. jQuery/JavaScript:割り込みイベントですか?
- 20. 割り込みフラグと割り込み保留中のビットstm32
- 21. Objective Cでの割り当てと割り当て解除の速さはどれくらいですか?
- 22. 共有割り込みラインの場合、使用する割り込みハンドラはどのようにして見つけられますか?
- 23. ルビから呼び出された割り込みの子孫
- 24. 書き込み操作コスト
- 25. Djangoテンプレートの読み込みタグの範囲はどのくらいですか?
- 26. Mac OS Xでのmmapingのコストはいくらですか?
- 27. 埋め込みダービーの容量はどれくらいですか?
- 28. 畳み込みニューラルネットワークのコスト関数
- 29. getTimeで動作する割り込み/割り込み関数の実行
- 30. ダイアログ割り込みとスコアリングで結果が得られます
これは、ハードウェアに依存になります。したがって、GCC、C、またはLinuxにタグが付けられている理由はわかりません。 –
ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええりあー。もしそうなら、私はその部分がどのように無視できるのか理解していません。なぜなら、メモリ内容が適切に配置される前にユーザ空間コードを実行させることが不可能に見えるからです。 – unwind
u r right unwind、しかし、この時点では、割り込みとユーザー空間割込みスレッドのスケジューリングによるオーバーヘッドしか知りません。すべてのページがRAMにあるとします。 – pythonic