Wir führen einen Echtzeitprozess auf einem Nicht-Echtzeit-Kernel (CentOS 6) aus, und dies wird sich wahrscheinlich nicht ändern.
Wir haben eine Streaming-Video-Anwendung, die 1,5 Stunden lang ununterbrochen ca. 500 MB / s PCIe-Datenverkehr von einem benutzerdefinierten FPGA benötigt. Die Anwendung funktioniert ziemlich gut - die meiste Zeit. Es gab jedoch Situationen, in denen der Kernel anscheinend nur bis zu 500 Millisekunden lang nicht mehr auf PCIe- oder Speicheranforderungen reagiert. Dies scheint während der Bursty-Datei-E / A von einem anderen Thread zu geschehen. Ich fand es unmöglich, zu versuchen, dieses Problem zu replizieren, indem ich nur viel Dummy-Datei-E / A aus dem Benutzerbereich ausführte, während die Hauptanwendung ausgeführt wurde.
Gibt es eine Möglichkeit, ein globales "Einfrieren" des Linux-Kernels zu erzwingen (simulieren) (insbesondere das Stoppen von PCIe oder aller DDR3-Speicherzugriffe oder dergleichen), damit wir dieses Problem reproduzieren können?
Wir haben bis zu 10 Millisekunden im internen FPGA-Speicher gepuffert, aber das ist nicht genug. Wir können auf FPGA DDR3 puffern und dann auf den Host sichern, aber wir benötigen eine Methode, um diese neue Funktion unter Zwang zu testen.
Wir möchten nicht, dass der Kernel dauerhaft einfriert oder blockiert. Wir möchten die Möglichkeit, das Zeitintervall einzustellen.
Ich bin auf der Suche nach etwas in der Art, wie man magische Werte /proc/sys/vm
vorübergehend schreibt , um das System virtuell kriechen zu lassen, und dann nach ein paar hundert Millisekunden wieder zurück zu kehren. https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Vielleicht etwas numactl
Magie?