Как интерпретировать вывод файла Systemtap futexes.stp
Я пытаюсь найти конфликт блокировки в моем коде, и я нашел futexes.stp в стандартной версии systemtap. Но у меня есть пара вопросов с выводом:
stap -d /usr/local/bin/cruncher ~/futexes.stp
(and then I run cruncher application in another term)
auditd[1803] lock 0x564dd507f228 contended 2 times, 119 avg us
auditd[1803] lock 0x564dd507f254 contended 28 times, 458040 avg us
rs:main Q:Reg[1837] lock 0x5563b67c2044 contended 7 times, 2352067 avg us
...
cruncher[17021] lock 0x7f6c9c57914c contended 2 times, 46 avg us
cruncher[17021] lock 0x7eff50 contended 82 times, 16 avg us
cruncher[17021] lock 0x7f6c40901f24 contended 20 times, 109 avg us
cruncher[17021] lock 0x7f6f38e0633c contended 4471 times, 2106 avg us
cruncher[17021] lock 0x7dae7c0 contended 8861 times, 26 avg us
cruncher[17021] lock 0x7f6cc2f14560 contended 2 times, 9 avg us
cruncher[17021] lock 0x7f6c8685d024 contended 5 times, 95 avg us
cruncher[17021] lock 0x7f6cd9e2ded4 contended 6 times, 428 avg us
cruncher[17021] lock 0x7f6c5196937c contended 44 times, 484 avg us
cruncher[17021] lock 0x7f6ba20c0290 contended 4 times, 8 avg us
...
Итак, вот вопросы:
Что это за конструкции с адресами стека 0x7f..........? Я уверен, что это не из моего заявления. Являются ли эти библиотеки или мьютексы ядра (или condvars) от имени моего приложения? Как мне это проверить?
Эти "замки" с короткими адресами - мои. Я могу проверить их командой gdb "info symbol", но что будет хорошим способом от stap до автоматического декодирования его в символ?
Я использую основное ядро Linux 4.6.2, построенное на том же компьютере, с последней версией системной тапы из их репозитория git. Мое приложение cruncher было создано с -g и символы не были удалены.
Заранее большое спасибо!
1 ответ
lock 0x7f...
адреса - это указатели пространства пользователя, переданные futex(2)
Системные вызовы. Скрипт просто хранит их дословно. Они могут указывать внутрь объекта типа glibc pthreads-mutex.
Что касается какого объекта... этап поиска адреса к символу должен быть добавлен. Вероятно, он может работать, перехватывая инициализацию pthread-мьютекса другим зондом, чтобы собрать таблицу блокировок pthread. Или добавив usymdata(...)
поиск по входящим адресам futex. Увидеть mutex-contention.stp
Пример сценария для использования обоих методов.