nft_pipapo_avx2_scratch_index отображается на всех моих записях перформанса

Я исследую проблему с производительностью на моем компьютере с Ubuntu 22.04.2 LTS. Я предпринимаю следующие шаги:

      sudo perf record -g -F max -s --call-graph dwarf -e cycles -e sched:sched_switch --switch-events --sample-cpu

Затем откройте запись с помощьюsudo hotspot:

Я понимаю, что, возможно, это не очень точное измерение, поскольку за 2 секунды было собрано всего 719 образцов. Однако...

График показывает, что процессор провел довольно много времени в процессе №0, который, как я предполагаю, является ядром.

Глядя на вид сверху вниз в HotSpot, мы видим, что этоnft_pipapo_avx2_scratch_indexпоявляется практически везде.

Читая о том, что это за штука, кажется, что она является частью проекта netfilter nf_tables:

      /* PIPAPO: PIle PAcket POlicies: set for arbitrary concatenations of ranges

Определено здесь: https://elixir.bootlin.com/linux/latest/source/net/netfilter/nft_set_pipapo_avx2.c#L75 .

Похоже, это модуль ядра, отвечающий за фильтрацию IP-пакетов и работу брандмауэра.


Это не кажется таким уж плохим, но когда я запускаю свой собственный высокопроизводительный пакет программного обеспечения (та же команда, но добавляю в конце свой двоичный файл), я получаю это в последней версии HotSpot:

Теперь HotSpot утверждает, что 30% «циклов» соответствуют этой загадочной функции. Весь синий цвет на временной шкале предполагает, что эта функция действительно вмешивается во все мои потоки.

Теперь, как предполагается, это происходит в двоичном файле под названием . Самое смешное: я записал это после того, как занес в черный список модули ядра.nf_tables,x_tablesиip_tables. Я подтвердил это после перезагрузки, что при запросе таких модулей ядра не было.lsmod.

Это становится еще сложнее, когда я пытаюсь открыть ту же запись перформанса вperf-report. Я никогда не увижу этого. Это заставляет меня поверить, что мне действительно не хватает некоторых флагов, чтобы я мог также показать их. К этому моменту я установил образ ядра Linux с символами отладки и указалperfдля этого используя-k, но это не имеет значения. В любом случае: как HotSpot сможет показать их, даже не имея этих символов отладки ядра?

На данный момент у меня есть две гипотезы:

  1. Гипотеза 1)perf reportне показывает эти образцы, поскольку фильтрует их на основе профилированного мной двоичного файла.
  2. Гипотеза 2) Это ошибка визуализации в том, как HotSpot приписывает циклы/время записанным образцам.

1 ответ

Я дошёл до того, что не могу воспроизвести эту проблему. Поведение изменилось после установки образа ядра с символами отладки, я думаю, следуя этому руководству:https://wiki.ubuntu.com/DebuggingProgramCrash#Non-built-in_debug_symbol_packages_.28.2A-dbgsym.29

После этого я установил символы отладки ядра Linux:

      sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym

Теперь HotSpot все еще показывал странноеnft_pipapo_avx2_scratch_index. Однако после перезаписи сperf(та же команда, что и исходный вопрос), и повторное открытие записи в HotSpot действительно сработало. Сейчас я вижу то, что ожидаю увидеть. И целая куча странных, не связанных друг с другом DSO (динамических общих объектов, таких какnf_tables,iwlwifi.ko,mac80211.ko) больше не появляются:

Итак, теперь я предполагаю, что это ошибка в HotSpot или производительность не обеспечивает должным образом связь черезperf.dataфайл, что на самом деле происходит. Я понятия не имею, почему мне пришлось перезаписывать после установки символов отладки.

Другие вопросы по тегам