Minha opinião sobre esse problema é do lado do desenvolvedor. Eu escrevo o código que é colocado em uma máquina virtual RHEL rodando como uma das muitas em um sistema corporativo. O sistema de arquivos que está sendo usado é um dispositivo de armazenamento remoto conectado à rede.
Tivemos uma alta variabilidade em comandos simples durante o lote. Então montamos um teste para obter mais informações, mas agora não sei o que encontramos.
Executamos o seguinte comando a cada 30 minutos e registramos a saída. É uma cópia de um arquivo de 6 GB. O que vejo é um salto de tempo decorrido de 11 segundos para 190 segundos quando o sistema está ocupado executando muitos trabalhos e esse comando de teste obtém pouco tempo de CPU.
O que posso ver é que a coluna "I" (entradas do sistema de arquivos) é preenchida quando a CPU está baixa, mas não quando está alta. A coluna "w" (trocas involuntárias) também é muito mais alta.
Minha pergunta é: o que está acontecendo com este trabalho/comando que o força a executar MUITO MAIS tempo quando o tempo de CPU diminui? A troca de entrada/saída armazena todos esses dados em algum outro dispositivo muito mais lento? Geralmente, o que acontece durante uma troca de entrada/saída?
Comando sendo executado:
/usr/bin/time -a -o filename.txt cp file.txt fileCopy.txt
Encontro | Tempo | e | S | você | P | c | W | EU | O |
---|---|---|---|---|---|---|---|---|---|
14/03/2022 | 5:19:02 | 64,9 | 16.23 | 1,03 | 26% | 3005 | 29210 | 12000016 | 12000000 |
14/03/2022 | 5:49:02 | 12,7 | 11,63 | 0,79 | 97% | 2069 | 76 | 0 | 12000000 |
14/03/2022 | 6:19:02 | 100,39 | 14,74 | 0,78 | 15% | 1034 | 29925 | 12000136 | 12000000 |
14/03/2022 | 6:49:24 | 191,32 | 18,86 | 0,94 | 10% | 3374 | 36164 | 12001024 | 12000000 |
14/03/2022 | 7:19:02 | 71,61 | 15,61 | 0,88 | 23% | 1610 | 30316 | 12000296 | 12000000 |
14/03/2022 | 7:49:02 | 70,73 | 17,5 | 0,91 | 26% | 1408 | 29540 | 12000072 | 12000000 |
14/03/2022 | 8:19:02 | 10,95 | 9,89 | 0,7 | 96% | 1709 | 75 | 0 | 12000000 |
14/03/2022 | 8:49:02 | 11.01 | 10.22 | 0,73 | 99% | 239 | 85 | 0 | 12000000 |
As descrições das colunas da página man para /usr/bin/time
e Elapsed real time (in seconds).
S Total number of CPU-seconds that the process spent in kernel mode.
U Total number of CPU-seconds that the process spent in user mode.
P Percentage of the CPU that this job got, computed as (%U + %S) / %E.
c Number of times the process was context-switched involuntarily (because the time slice expired).
w Number of waits: times that the program was context-switched voluntarily, for instance while waiting for an I/O operation to complete.
I Number of filesystem inputs by the process.
O Number of filesystem outputs by the process.