Каково различие между связкой-D и связкой-E?

Я в настоящее время анализирую команду на Солярисе, который читает из файла и имеет очень низкую эффективность. truss -D команды показывают мне read системные вызовы, занимающие до 0,03 секунд, но когда я использую truss -E, они всегда или 0.0000 или 0.0001 (два порядка величины ниже, чем с -D опция). В man страница, это говорит:

 -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.

Так -E опция измеряет фактическое время, проведенное в системном вызове, в то время как -D не делает... Кто-либо может объяснить, что точно имеет то значение? Что делается в остающееся время "вне" системного вызова?

1
задан 20 November 2014 в 16:55
2 ответа

На основании процитированной вами документации я нахожу совершенно очевидным, что один охватывает всю продолжительность от одного системного вызова до следующего, а другой охватывает только время в рамках системного вызова.

Процент времени, потраченного на системные вызовы, по сравнению с процентом времени, потраченного на внешние системные вызовы, примерно скажет вам, привязан ли процесс к процессору.

Связанный с процессором процесс проводит большую часть своего времени вне системных вызовов. Это состояние, в котором будет находиться процесс во время выполнения вычислений. Для процесса, привязанного к ЦП, разница между двумя числами будет большой и, вероятно, по крайней мере на порядок.

Процесс, не привязанный к ЦП, большую часть времени будет заблокирован в ожидании событий. Поскольку блокировка может происходить только внутри системных вызовов. Для процесса, который не привязан к ЦП, числа будут примерно одинаковыми (вероятно, отличаться только одной цифрой в процентах).

Это было простое объяснение, на самом деле необходимо рассмотреть еще несколько аспектов. Из-за отображения памяти и подкачки процесс может фактически блокироваться, не выполняя системные вызовы. Кроме того, ядро ​​может предлагать функции, которые включают вычисления внутри кода ядра. Это может привести к тому, что процесс будет проводить большую часть времени внутри системных вызовов и по-прежнему будет зависеть от ЦП. Последнее, например, могло произойти при использовании зашифрованных файловых систем.

2
ответ дан 3 December 2019 в 17:43

Время вне системного вызова - это время, потраченное на выполнение кода вашей программы до того, как он перейдет к следующему системному вызову.

2
ответ дан 3 December 2019 в 17:43

Теги

Похожие вопросы