Quanto tempo do kernel é acionado por processos limitados?

2

Tenho alguns alarmes de uso da CPU que estão sendo acionados quando não quero que eles sejam exibidos.

Estou lendo /proc/stat e comparando o aumento em user e system jiffies ao aumento geral de jiffies. Se o aumento percentual for alto o suficiente, um alarme será disparado. Note que eu não conto nice nisto - há processos limitados por aí, mas eu estou feliz que, se necessário, eles serão cancelados e meus processos importantes continuarão.

No entanto, quando o alarme é acionado, freqüentemente descubro que %user não subiu. No entanto, %nice e %system aumentam - e alguns dos processos afetados acionariam o trabalho do kernel.

Minhas perguntas são:

  1. Estou certo de que, se os processos mais importantes precisassem do tempo de CPU, os processos legais (e o trabalho do kernel que eles acionam) seriam desmarcados?
  2. Como posso saber quanto desse %system é devido a processos limitados?

Atualmente rodando o CentOS 6 (2.6.32), mas se isso já estiver corrigido em versões posteriores, considerarei o backport dele!

    
por Robert Sworder 04.01.2018 / 18:17

1 resposta

1

Isso provavelmente depende do que o processo afetado faz, em particular de quantos e quais chamadas do sistema ele faz. Aqui está um programa não muito bom notnice.asm que pode mostrar um comportamento próximo do pior caso no que diz respeito ao tempo do sistema

# Linux, x86_64, NASM
bits 64
section .data
letter: db "n"
section .text
global  _start
_start: mov rsi,letter
        mov rdi,1       ; stdout
        mov rdx,1       ; length
_again:                 ; on assumption above not unset by syscall...
        mov rax,1       ; sys_write
        syscall
        jmp _again

que, mesmo quando executado sob nice -n 19 , ainda deve executar o tempo do sistema:

$ nasm -f elf64 notnice.asm -o notnice.o
$ ld notnice.o -o notnice
$ nice -n 19 ./notnice >/dev/null

top deve mostrar esse processo ocupando 100% de uma CPU, já que está em um loop bastante apertado e pelo menos para meu host de teste centos7 (que tem quatro CPUs por /proc/cpuinfo ) algo como ~ 20 % tempo do sistema, ~ 5% bom e ocioso:

%Cpu(s):  0.1 us, 19.1 sy,  5.9 ni, 74.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

Neste caso, ~ 100% do tempo do sistema é devido ao processo não muito agradável. Com essa execução, também é possível executar processos de prioridade mais alta e verificar como o carregamento do sistema é alterado (e talvez com o SystemTap ou com que frequência sys_write de notnice acontece, ou talvez tenha notnice output em um sistema de arquivos rápido e veja se as taxas de E / S mudam devido a haver processos de prioridade mais alta sobre ...)

O SystemTap pode oferecer melhor granularidade, por exemplo, através do link , embora isso requeira que o processo esteja no espaço do usuário quando a gravação começa.

    
por 04.01.2018 / 19:03