Qual é a diferença entre treliça -D e treliça -E?

1

No momento, estou analisando um comando no Solaris que lê um arquivo e tem um desempenho muito baixo. Os comandos truss -D mostram que read das chamadas do sistema levam até 0,03 segundos, mas quando eu uso truss -E , elas são sempre 0,0000 ou 0,0001 (duas ordens de magnitude mais baixas do que com a opção -D ). Na página man , diz:

 -D
     Includes a time delta on each line of trace output.  The
     value appears as a field containing seconds.fraction and
     represents the elapsed time for the  LWP  that  incurred
     the event since the last reported event incurred by that
     LWP. Specifically, for system calls,  this  is  not  the
     time spent within the system call.

 -E
     Includes a time delta on each line of trace output.  The
     value appears as a field containing seconds.fraction and
     represents the difference in time  elapsed  between  the
     beginning and end of a system call.

     In contrast to  the -D option, this  is  the  amount  of
     time spent within the system call.

Portanto, a opção -E mede o tempo real gasto na chamada do sistema, enquanto -D não ... Alguém pode explicar exatamente o que faz essa diferença? O que está sendo feito no tempo restante "fora" da chamada do sistema?

    
por dokaspar 20.11.2014 / 15:49

2 respostas

2

Com base na documentação que você citou, percebo claramente que uma abrange toda a duração de uma chamada de sistema para a próxima, enquanto a outra abrange apenas o tempo dentro de uma chamada de sistema.

A porcentagem de tempo gasto dentro das chamadas do sistema versus a porcentagem de tempo gasto fora das chamadas do sistema dirá a você se um processo está limitado à CPU.

Um processo vinculado à CPU passa a maior parte do tempo fora das chamadas do sistema. Esse é o estado em que um processo estará, enquanto está executando cálculos. Para um processo ligado à CPU, a diferença entre os dois números será grande e, provavelmente, pelo menos em uma ordem de magnitude.

Um processo que não esteja ligado à CPU será bloqueado aguardando eventos na maior parte do tempo. Como o bloqueio só pode acontecer dentro das chamadas do sistema. Para um processo que não esteja ligado à CPU, os números serão aproximadamente idênticos (provavelmente diferindo apenas por uma porcentagem de um dígito).

Essa foi a explicação simples, na realidade, há mais alguns aspectos a serem considerados. Devido ao mapeamento e troca de memória, um processo pode realmente bloquear sem estar em uma chamada do sistema. Além disso, o kernel pode oferecer recursos, que envolvem cálculos dentro do código do kernel. Isso pode levar um processo a passar a maior parte do tempo dentro das chamadas do sistema e ainda estar ligado à CPU. O último, por exemplo, poderia acontecer ao usar sistemas de arquivos criptografados.

    
por 21.11.2014 / 22:08
2

O tempo fora da chamada do sistema é o tempo gasto com o código do seu programa antes que ele atinja a próxima chamada de sistema.

    
por 21.11.2014 / 20:00