非リアルタイムカーネル(CentOS 6)でリアルタイムプロセスを実行していますが、これはおそらく変更されません。
カスタムFPGAからの約500 MB/sのPCIeトラフィックを一度に1.5時間継続的に必要とするストリーミングビデオアプリケーションがあります。アプリケーションはかなりうまく動作します-ほとんどの場合。ただし、カーネルがPCIe要求またはメモリ要求への応答に一度に最大500ミリ秒応答しなくなったように見える状況がありました。これは、バースト性の高いファイル中に発生するようですIO別のスレッドから。大量のダミーファイルを実行するだけではこの問題を再現することは不可能であることがわかりましたIOメインアプリケーションの実行中にユーザー空間から。
この問題を再現できるように、Linuxカーネルのグローバルな "フリーズ"(特に、PCIeまたはすべてのDDR3メモリアクセスなどを停止する)を強制(シミュレーション)する方法はありますか?
現在、最大10ミリ秒のバッファリングを内部FPGAメモリに実装していますが、それだけでは十分ではありません。 FPGA DDR3にバッファーしてからホストにダンプできますが、この新しい機能を強制的にテストする方法が必要です。
カーネルが永久にフリーズまたはロックすることは望ましくありません。時間間隔を設定する機能が必要です。
魔法の値を/proc/sys/vm
に一時的に書き込み、システムを仮想的にクロールさせ、数百ミリ秒後に元に戻す何かを探していますが、それを壊す可能性のある方法の数を調べているのは私のような初心者( https://www.kernel.org/doc/Documentation/sysctl/vm.txt )。多分numactl
魔法?
簡単なテストを行う1つのオプションは、KGDB対応のカーネルを使用し、カーネルを手動で停止してテストすることです このリンクを参照 。
別のメモでは、あなたの一時停止を引き起こす可能性のあることを覚えています:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency
、値はns(AMD FX(tm)-8120 Eight-Core Processorでは4000)で問題ありませんが、cat /sys/module/pcie_aspm/parameters/policy
)/sys/bus/pci/devices/$DEVICE/power/control
で電源をオフにしてみてください。アプリケーションとFPGAとの通信方法の詳細を教えてください。 FPGAからバッファを読み取るアプリケーションですか、それともカーネルに割り込みを送信するFPGA(ネットワークカードなど)ですか?
/ devでblock/charを開き、それと通信することを期待しています。つまり、ドライバーを使用して、アプリケーションと/ dev/XXXファイル間の通信を行います。
次の出力が必要です:cat /proc/interrupts
; lsmod
; ls -al /dev/yourmod
ここにアイデアがあります:
役立つと思われる情報をすべて提供してください。
それが役立つかどうかわかりません。ただし、別のデバイスのカーネルモジュールのsuspend
関数を呼び出すカーネルモジュールを作成できる場合は、そうすることができます。
各PCIデバイスは、ヘッダーファイルに従って中断できます http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/pci.h#L479
たとえば、これはIntel e1000 NICのサスペンド機能です http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/net/e1000e/netdev.c#L464
私が思い出すことができることから、この機能は主にシステムが休止状態になったときに使用されました。デバイスドライバーは現在の実行ステータスを保存し、それ自体をオフにする必要があります。
あなたは間違った方向に考えていると思います。あなたの目標は明確です。
その方法は、残りのプロセスを停止するのではなく、メインプロセスにほぼリアルタイムのスケジューリング優先順位を与えることです。そのための重要なユーザースペースプロセスにはNiceを使用します。
さらに難しい問題は、カーネル空間にあるPCIe割り込み処理です。
ハードウェアが関係しているので、メインボード上の関係するPCIeレーンと、それが特定のCPUソケットに接続されている可能性がある方法を詳しく調べる必要があります。
irqbalanceは通常、ここでは適切に機能しますが、必要に応じてその動作を構成できます。