4

始める前に: はい、答えがアーキテクチャに依存していることは承知しています。桁数という点で、大まかな数字に興味があるだけです。

Linuxカーネルによって割り込み頻度に上限が課されていますか?

背景: Linux 内からカメラ モジュールとやり取りしたいと考えています。このモジュールにはクロック同期されたパラレル データ出力 (8 ビット、~650kHz) があり、/dev/camera などを介してアクセスするためにデータを読み取り、バッファに格納します。

基本的なドライバーを作成しましたが、適切な割り込みラインを監視しています。割り込みピンからワイヤをぶら下げたままにすると、ホワイト ノイズによる割り込みが発生します。ただし、より高い周波数の信号 (555 タイマーから atm ~250kHz) を接続すると、割り込みはトリガーされません。(これは /proc/interrupts で確認済み)

私の考えでは、これは、プロセッサの GPIO モジュールがそのような高い周波数を処理できないことが原因である可能性があります (これはばかげています-特に高くはありません)、またはカーネルの問題である可能性があります。人々はどう思いますか?

4

1 に答える 1

3

このように見てください。最新の CPU は、1 秒あたり約 10 9命令を実行します。

割り込みを処理するには、100 ~ 1000 の命令を実行する必要があります (コンテキストを保存し、I/O を実行し、割り込み処理の終了を通知し、コンテキストを復元します)。これにより、最大で毎秒10 6~ 10 7の割り込みが発生します。

割り込みの処理にすべての時間を費やすと、残りのシステムとプログラムには何も残されません。

したがって、約 10 5割り込み/秒 (100 KHz) が実際の最大割り込みレートであると考えてください。

回路によって課せられる他の制限があるかもしれませんが、私はこの側面についてあまり詳しくありません。しかし、カーネルが何らかの方法で明示的に割り込みレートを制限する可能性は低いです。正当な理由が見当たりませんし、簡単にできることでもないと思います。

現在、入出力データのすべてのバイトではなく、数キロバイトまたは数メガバイトのバッファーで割り込みを行うことができる DMA のようなものがあります。たとえば、データをメモリ バッファに出力する準備をし、バッファからデータを送信できるようになったことを DMA コントローラに伝えます。完了すると、転送の完了を通知する割り込みがトリガーされ、別の転送を開始できるようになります。転送の他の方向でも同じように機能します。バッファ全体が入力データでいっぱいになると、割り込みが発生します。

低レートでのみ割り込みを受信できる場合、ハードウェアの制限に直面している可能性があると思います。

于 2013-04-06T13:48:16.360 に答える