Как интерпретировать вывод strace?

Мне нужно профилировать производительность приложения, для которого я использую strace. Однако я действительно не знаю, как интерпретировать различные системные вызовы, которые излучает strace. Примеры некоторых из них приведены ниже:

(A) lseek(3, 1600, SEEK_SET)                = 1600
(B) write(3, "G_DATA    300        0          "..., 800) = 800
(C) close(3)                                = 0
(D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000
(E) munmap(0x2b600b179000, 4096)            = 0
(F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0

Я был бы признателен, если бы кто-нибудь кратко объяснил простым языком, что эти строки от (A) до (F) на самом деле означают с точки зрения ввода-вывода, передаваемых данных, значимости для производительности и т.д.

Я просмотрел man-страницы strace, но все еще не очень уверен. Если вы хотите мне прочитать какие-либо другие указатели, это было бы здорово.

У меня есть некоторый опыт работы с операционными системами и я понимаю, что такое системные вызовы, память, виртуальная память, планирование и т. Д.

26
задан mkc 16 December 2016 в 13:31
поделиться

1 ответ

Для каждой команды есть страница справочника, вы можете прочитать ее, набрав man и название функции C, например, man lseek (также проверьте apropos). У них также есть описание переданных параметров.

Вот краткие описания:

  • lseek - переместить смещение файла для чтения / записи дескриптора файла
  • write - записать в дескриптор файла из буфера
  • close - удалить дескриптор из справочной таблицы объектов для процесса
  • mmap - выделить память или отобразить файлы или устройства в память
  • munmap - удалить сопоставление для указанного диапазона адресов
  • fstat - получить состояние файла, на которое указывает путь

Обратите внимание, что интерпретация одиночных / случайных сискалей не будет иметь смысла с точки зрения производительности , Чтобы проверить значимость этих системных вызовов, вы должны использовать параметр -c, который может подсчитывать время, вызовы и ошибки для каждого системного вызова и сообщать сводку. Тогда вы можете прочитать больше о них, которые занимают больше всего времени.

Чтобы узнать больше о выходных данных и параметрах strace, проверьте man strace .

См. Также: Как разобрать strace в оболочке в обычный текст?

3
ответ дан 28 November 2019 в 07:54
поделиться
Другие вопросы по тегам:

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