Prowadzimy proces w czasie rzeczywistym na jądrze nie działającym w czasie rzeczywistym (CentOS 6) i prawdopodobnie nie ulegnie to zmianie.
Mamy aplikację do przesyłania strumieniowego wideo, która wymaga około 500 MB / s ruchu PCIe z niestandardowego układu FPGA przez 1,5 godziny bez przerwy. Aplikacja działa całkiem dobrze - przez większość czasu. Jednak zdarzały się sytuacje, w których wydaje się, że jądro po prostu przestaje odpowiadać na obsługę żądań PCIe lub pamięci przez maksymalnie 500 milisekund na raz. Wydaje się, że tak się dzieje podczas IO pliku bursty z innego wątku. Nie udało mi się spróbować replikować tego problemu, po prostu wykonując wiele fałszywych operacji we / wy pliku z przestrzeni użytkownika podczas działania głównej aplikacji.
Czy istnieje sposób na wymuszenie (symulację) globalnego „zamrożenia” jądra systemu Linux (w szczególności zatrzymanie dostępu do pamięci PCIe lub całego DDR3 itp.), Abyśmy mogli odtworzyć ten problem?
Buforujemy do 10 milisekund zaimplementowanych teraz w wewnętrznej pamięci FPGA, ale to nie wystarczy. Możemy buforować do FPGA DDR3, a następnie zrzucić do hosta, ale potrzebujemy metody przetestowania tej nowej funkcji pod przymusem.
Nie chcemy, aby jądro zawiesiło się lub zablokowało na stałe. Chcielibyśmy możliwość ustawienia odstępu czasu.
Szukam czegoś w stylu pisania magicznych wartości, które /proc/sys/vm
tymczasowo powodują, że system wirtualnie się czołga, a następnie wraca do poprzedniego poziomu po kilkuset milisekundach, ale patrząc na liczbę możliwych sposobów jego złamania, nie jest to dla początkujących jak ja ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Może trochę numactl
magii?