Tenho certeza de que o kernel do Linux tem um recurso que permite rastrear todas as leituras e gravações (IO) de um aplicativo e todos os seus filhos, mas não vi nenhum utilitário que possa calculá-lo e mostrá-lo.
Por exemplo, para o tempo de CPU, você pode simplesmente usar time
e obter informações de uso da CPU:
$ time cat --version > /dev/null
real 0m0.001s
user 0m0.001s
sys 0m0.000s
Estou procurando algo semelhante em relação ao IO, por exemplo
$ calc_io task
Bytes read: 123456
Bytes written: 0
Claro, temos /proc/$PID/io
que contém informações de tempo de execução, mas rastreá-lo para aplicativos que geram e destroem filhos dinamicamente, por exemplo, navegadores da web parece uma tarefa assustadora. Eu acho que se você executar strace -fF firefox
, monitore todas as crianças que estão sendo geradas e tente rastrear em tempo real /proc/$PID/io
- nah, parece muito difícil de implementar e, em seguida, com que frequência você pesquisará esse arquivo para obter informações? As crianças podem existir por uma fração de segundo.
Outra idéia é usar cgroups
, mas e se eu não quiser usá-los? Também verifiquei /sys/fs/cgroup
e não vejo nenhuma estatística relevante.
Encontrei este post e achei muito interessante. Eu pensei que esse problema não era tão difícil, pois a pergunta que você está fazendo é bastante natural, afinal.
Só consegui encontrar uma solução imperfeita e incompleta. Resolvi postar mesmo assim, pois a pergunta ainda não foi respondida. Isso requer um sistema com systemd e cgroups2 (eu li o que você disse sobre isso, mas pode ser interessante ver esta solução). Aprendi sobre os dois, não os domino.
Eu testei apenas em uma distribuição Linux baseada em arch.
Parece que você precisa "delegar" o controlador io à sua "subárvore user systemd" para usar isso como um usuário sem privilégios (não consigo apontar um lugar específico. man systemd.resource-control. https://systemd.io /CGROUP_DELEGATION . https://wiki.archlinux.org/title/cgroups#As_unprivileged_user )
Em seguida, crie uma fatia com IOAccounting habilitado para executar seus processos.
reinício