Preciso obter estatísticas de /proc/pid/schedstat para um processo específico.
Aqui https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt encontrei a descrição dos campos.
Quais são as unidades de medida de (1) tempo gasto na CPU e de (2) tempo gasto esperando em uma fila de execução? Como convertê-los em segundos? Eles são medidos em pulsos de relógio e devo dividi-los por sysconf(_SC_CLK_TCK) ?
A documentação diz que eles estão em "instantes", mas a documentação está desatualizada. Tente executar uma tarefa com uso intensivo de CPU e amostrar os contadores com alguns segundos de intervalo, e você verá que eles incrementam muito rapidamente para serem factíveis em instantes.
A documentação ficou errada com a adoção do Completely Fair Scheduler (CFS), que é o padrão nos kernels modernos, então divida por 1000000000 para converter em segundos.
https://lkml.org/lkml/2019/7/24/906
De acordo com o documento, a unidade de tempo é "instantes". Como em "Estarei aí em um instante!" :)
Um instante é igual ao tempo que a luz leva para viajar um centímetro no vácuo ou aproximadamente 33,3564 picossegundos. - Wikipédia
Mas essa não é a definição que você deseja. Tente esta postagem https://stackoverflow.com/questions/10885685/jiffies-how-to-calculate-seconds-elapsed onde a resposta principal diz
Conclusão: divida um valor de tempo schedstat pela constante HZ do sistema para converter em segundos.
Atualização: se você está lidando com esses tempos em um contexto programático, a resposta agora principal na mesma página aponta para algumas rotinas do sistema que você pode chamar para fazer conversões (por exemplo, instantes para milissegundos).
Alterado de instantes para nanossegundos no Linux 2.6.23, consulte o commit 425e0968a25f