Интерпретация времени, показанного на strace для открытых системных вызовов

У нас проблема с задержкой с приложением поставщика. Я запустил strace -Tttt в процессе и получил следующее:

 [...] 1470166748.946144 open("/opt/app/shdbrth/X ", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000016> 1470166800.850979 open("/opt/app/shdbrth/X38347", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 10 <0.000070> 1470166800.851139 fstat(10, {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000006> [...] 

Согласно man – -ttt , -ttt каждой строки со временем, когда был создан syscall. Опция -T добавляет время, которое потребовалось для обработки между скобками < и > . Однако это не похоже на приведенный выше пример.

Например, вторая строка началась с 1470, 166 800 секунд и 850 979 микросекунд. Согласно прилагаемому таймеру потребовалось 70 микросекунд для обработки. Однако следующая строка начинается с той же эпохи секунд и 851,139 микросекунд – разница в 90 микросекунд.

Я собирался написать это как просто накладные расходы, но, возможно, есть более точное объяснение.

One Solution collect form web for “Интерпретация времени, показанного на strace для открытых системных вызовов”

Время в начале строки – это время, когда ядро ​​начало обрабатывать этот системный вызов. Длительность в конце строки – это интервал между временем, когда ядро ​​начало обрабатывать этот системный вызов и время, когда ядро ​​ответило на системный вызов.

Время в начале следующей строки – это время, когда ядро ​​начало обрабатывать следующий системный вызов. Между ответом на один системный вызов и записью на следующий системный вызов произошло два вида событий: процесс выполнил код пользователя, а потенциальные другие процессы были запланированы на одном процессоре.

В вашем примере первый open вызов занял 16 мкс, а следующий звонок был выпущен примерно через 12 секунд. За эти двенадцать секунд процесс выполнил код пользователя и, вероятно, был вытеснен много раз для запуска других процессов. Между вторым open вызовом и последующим fstat прошло около 90 мкс; учитывая, насколько это мало, это говорит о том, что процесс выполнял лишь небольшой код пользователя и не был выгружен.

Linux и Unix - лучшая ОС в мире.