Как интерпретировать вывод 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 на обычный текст?