Como outros processos podem afetar as medições feitas com 'tempo'?

7

Se eu tempo um processo usando o comando time , recebo a saída para 'real', 'usuário' e 'sys'.

Meu entendimento de esta discussão é que 'real' é tempo de parede, enquanto 'usuário' e 'sys' são tempo de processo.

Isso implica que 'usuário' e 'sys' não serão afetados por outros processos? Em outras palavras, se o computador estiver sob carga pesada ou com pouca carga de outros processos, pode demorar mais tempo no relógio de parede ('real') para concluir o processo. Mas meu processo pode ter requerido apenas 5 segundos de tempo de execução, mesmo que ele tenha se espalhado por 20 segundos de tempo real.

Tenho a garantia de que serei informado sobre "5 segundos de tempo do usuário", independentemente de qualquer outra coisa que o sistema esteja fazendo?

    
por Nathan Long 17.12.2013 / 18:24

2 respostas

7

Não. As comutadores de processo / contexto não são gratuitas.

O quanto outros processos em execução retardam o seu tempo é muito dependente do sistema, mas consiste em coisas como:

  • Sempre que um processador alterna para um espaço de endereçamento diferente (incluindo processo), o cache da MMU deve ser liberado. E provavelmente o processador L1 armazena em cache. E talvez os caches L2 e L3. Isso diminuirá o acesso à memória logo após o processo ser retomado (e isso conta contra o tempo do "usuário").

  • Em uma caixa SMP (ou multi-core), se dois processos estiverem tentando acessar as mesmas partes da RAM (física), os processadores devem cooperar. Isso leva tempo. Geralmente é feito em um nível de arquitetura, abaixo do sistema operacional. Isso contará com o tempo do usuário ou do sistema, dependendo de quando for atingido.

  • O bloqueio rápido do kernel (que na verdade não agende outro processo) contará contra o tempo do seu sistema. Isso é semelhante ao ponto acima.

  • nas caixas NUMA, você pode ser movido para um nó diferente. O acesso à memória agora pode ser de domínio cruzado e, portanto, mais lento

  • outros processos podem influenciar as decisões de gerenciamento de energia. Por exemplo, a vinculação de mais núcleos reduzirá as velocidades do Intel Turbo Boost, para manter o pacote do processador dentro de sua linha elétrica & especificações térmicas. Mesmo sem turbo, o processador pode ficar lento devido ao excesso de calor. Ele pode funcionar de outra forma também - mais carga pode fazer com que o regulador de velocidade da CPU aumente a velocidade da CPU.

Existem outros recursos compartilhados em um sistema; Se esperar por eles realmente não envolver o seu processo em suspensão, ele será contado contra o usuário ou horário do sistema.

    
por 17.12.2013 / 18:48
2

Does this imply that 'user' and 'sys' will be unaffected by other processes?

user time não pode ser afetado por qualquer outra coisa diretamente. sys time pode, pois pode incluir E / S. Se houver vários processos tentando acessar um dispositivo de uma só vez, o dispositivo em si poderá ficar ocupado, de modo que, quando o processo estiver agendado ativamente, o sistema tenha que esperar no dispositivo. Não deve ser muito, porque a espera é na maior parte passiva - adicionando a real time - mas se envolver repetidas sondagens, isso está ativo.

    
por 17.12.2013 / 18:48