Stiamo eseguendo un processo in tempo reale su un kernel non in tempo reale (CentOS 6), e questo probabilmente non cambierà.
Abbiamo un'applicazione di streaming video che richiede continuamente circa 500 MB / s di traffico PCIe da un FPGA personalizzato per 1,5 ore alla volta. L'applicazione funziona abbastanza bene, il più delle volte. Tuttavia, abbiamo riscontrato situazioni in cui sembra che il kernel smetta di rispondere alle richieste di memoria PCIe o di memoria per un massimo di 500 millisecondi alla volta. Ciò sembra accadere durante l'IO di file in sequenza da un altro thread. Ho trovato impossibile provare a replicare questo problema semplicemente facendo un sacco di file IO fittizi dallo spazio utente mentre l'applicazione principale è in esecuzione.
C'è un modo per forzare (simulare) un "blocco" globale del kernel Linux (in particolare, arrestando gli accessi alla memoria PCIe o DDR3 o qualcosa del genere) in modo da poter riprodurre questo problema?
Al momento abbiamo implementato fino a 10 millisecondi di buffer nella memoria FPGA interna, ma ciò non è sufficiente. È possibile eseguire il buffer su FPGA DDR3 e quindi eseguire il dump sull'host, ma è necessario un metodo per testare questa nuova funzionalità in caso di coercizione.
Non vogliamo che il kernel si blocchi o blocchi permanentemente. Vorremmo la possibilità di impostare l'intervallo di tempo.
Sto cercando qualcosa sulla falsariga di scrivere /proc/sys/vm
temporaneamente valori magici che faccia strisciare virtualmente il sistema, per poi tornare indietro dopo alcune centinaia di millisecondi, ma guardare il numero di possibili modi per romperlo non è per un principiante come me ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Forse un po 'di numactl
magia?