Estamos ejecutando un proceso en tiempo real en un kernel no en tiempo real (CentOS 6), y esto probablemente no va a cambiar.
Tenemos una aplicación de transmisión de video que requiere aproximadamente 500 MB / s de tráfico PCIe desde un FPGA personalizado de forma continua durante 1,5 horas a la vez. La aplicación funciona bastante bien, la mayoría de las veces. Sin embargo, hemos tenido situaciones en las que parece que el núcleo simplemente deja de responder al servicio de solicitudes PCIe o de memoria de hasta 500 milisegundos a la vez. Esto parece suceder durante el archivo de ráfaga IO desde otro hilo. Me resulta imposible intentar replicar este problema simplemente haciendo un montón de IO de archivos ficticios desde el espacio del usuario mientras se ejecuta la aplicación principal.
¿Hay una manera de forzar (simular) una "congelación" global del núcleo de Linux (en particular, PCIe parar o todos los accesos de memoria DDR3 o algo así) para que podamos reproducir este problema?
Hemos implementado hasta 10 milisegundos de almacenamiento intermedio en la memoria FPGA interna, pero eso no es suficiente. Podemos almacenar en búfer a FPGA DDR3 y luego volcar al host, pero necesitamos un método para probar esta nueva característica bajo coacción.
No queremos que el núcleo se congele o bloquee permanentemente. Nos gustaría poder establecer el intervalo de tiempo.
Estoy buscando algo similar a escribir valores mágicos /proc/sys/vm
temporalmente que haga que el sistema prácticamente se arrastre, y luego retroceder después de unos cientos de milisegundos, pero mirar la cantidad de formas posibles de romperlo no es para un novato como yo ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Tal vez algunos numactl
magia?