Почему systemtap не генерирует выходные данные, необходимые для создания пламенного графа?
Почему при выполнении операции stap для создания данных пламенного графа мои out.stap-стеки пропускают данные процесса?
- ОС: RHEL 5.10.0.2
- Ядро: 2.6.18-371.11.1.el5
- SystemTap: 1.8-6.el5
Установленные пакеты:
Systemtap-SDT-разви-1.8-6.el5
Systemtap-разви-1.8-6.el5
Systemtap-разви-1.8-6.el5
Systemtap-среда-1.8-6.el5
Systemtap-SDT-разви-1.8-6.el5
Systemtap-1.8-6.el5
Systemtap-1.8-6.el5-Стартовый скрипт
Systemtap-клиент-1.8-6.el5
Systemtap-сервер 1.8-6.el5
Systemtap-Тесты-1.8-6.el5
ядро-разви-2.6.18-371.11.1.el5
ядро-отладка-разви-2.6.18-371.11.1.el5
Используемая команда:
stap -s 32 -D MAXBACKTRACE=100 -D MAXSTRINGLEN=4096 -D MAXMAPENTRIES=10240 \
-D MAXACTION=10000 -D STP_OVERLOAD_THRESHOLD=5000000000 --all-modules \
-ve 'global s; probe timer.profile { s[backtrace()] <<< 1; }
probe end { foreach (i in s+) { print_stack(i);
printf("\t%d\n", @count(s[i])); } } probe timer.s(60) { exit(); }' \
> out.stap-stacks
Пример файла out.stap-stacks:
0xffffffff8000e81a 0x0 1 0xffffffff8004ab87 0x0 1 0xffffffff8025d15d 0x0 1 0xffffffff80239356 0x0 1 0xffffffff8004219a 0x0 1 0xffffffff8000ca32 0x0 1 0xffffffff8003214e 0x0 1 0xffffffff80013bc8 0x0 1 0xffffffff80232d41 0x0 1 0xffffffff8001a4ca 0x0 1 0xffffffff80011db5 0x0 1 0xffffffff8004aad2 0x0 1 0xffffffff800ec8bb 0x0 1 0xffffffff8003ead5 0x0 1 0xffffffff80234c43 0x0
1 ответ
backtrace()
функция ограничена обратными следами пространства ядра, и print_stack()
сопоставляет только адреса пространства ядра с символами. (Я не могу объяснить, почему адреса 0xffffffff8* не были преобразованы в символы; может быть, какая-то комбинация древней системной карты и древнего ядра?)
Если вы хотите распечатать данные обратного следа пользовательского пространства, вам нужно будет использовать u*
семейство функций, связанных с отслеживанием.
Смотрите также https://sourceware.org/systemtap/examples/ для аналогичного сценария, который включает работу в пользовательском пространстве.