Estamos executando um processo em tempo real em um kernel não em tempo real (CentOS 6), e isso provavelmente não vai mudar.
Temos um aplicativo de streaming de vídeo que requer cerca de 500 MB / s de tráfego PCIe de um FPGA personalizado continuamente por 1,5 horas por vez. O aplicativo funciona muito bem - na maioria das vezes. No entanto, tivemos situações em que parece que o kernel simplesmente para de atender a solicitações de PCIe ou de memória por até 500 milissegundos por vez. Isso parece acontecer durante E / S de arquivo intermitente de outro encadeamento. Achei impossível tentar replicar esse problema apenas executando muitas E / S de arquivos fictícios do espaço do usuário enquanto o aplicativo principal está em execução.
Existe uma maneira de forçar (simular) um "congelamento" global do kernel do Linux (em particular, parar o PCIe ou todos os acessos à memória DDR3 ou algo parecido) para que possamos reproduzir esse problema?
Temos buffer de até 10 milissegundos implementados agora na memória FPGA interna, mas isso não é suficiente. Podemos fazer buffer para o FPGA DDR3 e depois fazer o dump para o host, mas precisamos de um método para testar esse novo recurso sob pressão.
Não queremos que o kernel congele ou bloqueie permanentemente. Gostaríamos da capacidade de definir o intervalo de tempo.
Estou procurando algo parecido com escrever valores mágicos /proc/sys/vm
temporariamente que faça o sistema praticamente rastejar e depois voltar depois de algumas centenas de milissegundos, mas observar o número de maneiras possíveis de quebrá-lo não é para um novato como eu ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Talvez alguma numactl
mágica?