2

独自のデバイス ドライバーを使用した光ファイバー リンクがあります。
リンクは PCIe カードに入ります。RHEL 5.2 (2.6.18-128~) で実行しています。セットアップや FIFO アクセスなどのためにカードのインターフェイス
を調整mmapしました。これらの読み取り/書き込みは完了するまでに数マイクロ秒かかるため、すべて問題ありません。

もちろん、これを割り込みに使用することはできないため、提供されているカーネル モジュールをユーザー空間の lib インターフェイスと共に使用する必要があります。

WaitForInterrupt(); // API lib interface to kernel module
// Interrupt occurs and am returned to my code in user space
time = CurrentTime() - LatchedTime(); // time to get to here

WaitForInterrupt()から戻るのに約70µsかかります。(割り込みが発生した時間はファームウェアでラッチされます。これを読み取り、上記のように約2μsかかり、ファームウェアの現在の時間と比較します)

割り込みが発生してからユーザー空間 API の割り込み呼び出し待機メソッドが戻るまでの予想アクセス時間は?

ネットワーク/その他の高速インターフェイスはかかりますか?

4

3 に答える 3

3

500ミリ秒は、ユーザー空間/カーネル間の単純な切り替えより桁違いに大きいですが、誰かがコメントで述べたように、LinuxはリアルタイムOSではないため、500ミリ秒の「ヒックアップ」が時々表示されないという保証はありません。

原因を特定することはまったく不可能です。デバイス ドライバーがデータをより効率的にまとめようとしている可能性があります。

とは言うものの、一部のカスタム カードと APIC および ACPI の両方とのやり取りに関して際限のない問題が発生しており、BIOS 設定、どのカードがどの PCI スロットに挿入されるか、特定のビデオ カードがすべてを台無しにするかどうかの微妙なバランスが必要です。多かれ少なかれバグのあるBIOS /ビデオカードとやり取りする疑わしいドライバー..

于 2010-09-18T20:08:01.130 に答える
2

最近のカーネルを使用している場合は、perf schedツールを使用してレイテンシを測定し、時間が使用されている場所を確認できます。(500us は、プロセッサ、実行中のタスクの数などによっては、少し高いように聞こえます...)

于 2010-09-19T10:41:13.097 に答える
2

負荷が高くないシステムで確実に 500us を超えることができる場合は、ドライバーの実装 (またはそのユーザー空間ラッパー/対応部分) が悪いと思います。

私の経験では、割り込みでユーザー スレッドをウェイクアップするためのレイテンシは 10us 未満である必要がありますが、(他の人が言っているように) Linux ではレイテンシの保証はありません。

于 2010-09-20T14:49:47.380 に答える