Как интерпретировать вывод 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, но все же я не очень уверен. Если вы какие-либо другие указатели для меня, чтобы прочитать, это было бы здорово.

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

2 ответов


чтобы понять это, вы должны ознакомиться с системными вызовами POSIX. Это интерфейс, который использует пользовательская космическая программа для взаимодействия с ядром.

lseek, write, close, mmap, munmap и fstat все


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

вот краткие резюме:

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

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

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

Читайте также: как разобрать strace в shell на обычный текст?