Pergunta

Estou escrevendo um pequeno programa de depuração para aplicativos multithread. Minha idéia é executar o alvo, que está sendo deputado por exemplo, 100 nanosecs, depois pausar e examinar sua memória. No entanto, este (apenas pseudocode)

nanosleep(100);             //sleep debuger for 100 nanosec and let a program run
kill(target_app_pid, SIGSTOP); //stop target app

Não funcionaria, porque a troca de processos poderia acontecer logo após a nanossleep e o alvo percorrer mais tempo, conforme necessário. Existe alguma maneira de dar uma fatia de tempo "definida" e depois suspender -a? A única solução que posso imaginar é adicionar chamadas do sistema e corrigir o agendador para alcançar o que eu preciso, mas isso assume grande esforço e muitos bugs. Talvez definir prioridade "em tempo real" para o processo de depurador possa ajudar? Seria uma solução limpa?

Suponha também, que eu possa ser o código -fonte do Target App. É possível configurar algum tipo de timer e dormir todo o processo após um período de tempo (muito pequeno e preciso)?

Foi útil?

Solução

Você realmente acha que pode nanosleep Para 100 nanossegundos? Qual é o HZ valor em seu kernel? O mais próximo que você chega desta ordem de sono é udelay(), mas isso está no kernel, onde você pode desativar a preempção, não em terra de usuário. Verificação de saída linux/include/delay.h e init/calibrate.c Na fonte do kernel Linux.

Outras dicas

Como o Linux é, na melhor das hipóteses, um sistema operacional "Soft em tempo real" (especialmente trabalhando no espaço do usuário), será difícil obter o tipo de precisão que você procura.

Se você está trabalhando em um processador incorporado, o nanosleep e microsleep As chamadas são frequentemente implementadas como um loop de rotação. Durante a inicialização, o processador é caracterizado para "calibrar" esse loop de spin. Ainda assim, no entanto, obter esse tipo de precisão requer uma compreensão muito detalhada da arquitetura do processador e o que está sendo executado (no nível de instrução).

As versões mais recentes do kernel Linux têm algumas implementações de timer de alta velocidade, mas você ainda está analisando a resolução de microssegundos.

Se você está executando em um sistema de desktop, não tenho idéia de por que você precisa desse nível de precisão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top