Есть ли способ запустить perf под WSL?

Когда я захотел запустить perf под WSL, я столкнулся со следующим вопросом:

ВНИМАНИЕ: производительность не найдена для ядра 4.4.0-18362.

Вам может потребоваться установить следующие пакеты для этого конкретного ядра:

Linux-инструменты-4.4.0-18362-Майкрософт

linux-cloud-tools-4.4.0-18362-Microsoft

Вы также можете установить один из следующих пакетов, чтобы быть в курсе последних событий:

linux-tools-Microsoft

linux-cloud-tools-Microsoft

Но я не могу найти пакеты с именами linux-tools-4.4.0-18362-Microsoft или linux-cloud-tools-4.4.0-18362-Microsoft. Я предполагаю, что имена пакетов генерируются автоматически.

Я также пытался использовать perf в контейнере докеров. Однако контейнер Docker использует то же ядро, что и хосты.

Есть ли способ запустить perf под WSL?


Я слышал, что perf можно использовать в WSL2. Но после того, как я обновился до WSL2, он показывает похожее сообщение об ошибке:

ВНИМАНИЕ: производительность не найдена для ядра 4.19.84-microsoft.

Вам может потребоваться установить следующие пакеты для этого конкретного ядра:

linux-tools-4.19.84-microsoft-standard

linux-cloud-tools-4.19.84-microsoft-standard

Вы также можете установить один из следующих пакетов, чтобы быть в курсе последних событий:

linux-tools-standard

linux-cloud-tools-standard

person yodahaji    schedule 15.02.2020    source источник
comment
В WSL2 можно использовать perf   -  person Biswapriyo    schedule 16.02.2020
comment
@Biswapriyo Привет, я обновил wsl1 до wsl2. Однако он показывает сообщение об ошибке semilar в wsl1:   -  person yodahaji    schedule 18.02.2020
comment
Установили ли вы какие-либо linux*-tools* пакеты, которые вы видите в aptitute или любом другом менеджере пакетов, который вы используете? В вашем втором сообщении об ошибке даже перечислены имена некоторых пакетов для установки.   -  person Peter Cordes    schedule 18.02.2020
comment
@PeterCordes Привет, я искал эти пакеты, но ничего не нашел. Я думаю, что эти имена генерируются автоматически. Я нашел правильный ответ ниже.   -  person yodahaji    schedule 18.02.2020
comment
В вашем вопросе об этом не говорилось, поэтому казалось, что есть некоторая надежда, что дистрибутив упакует linux-tools, поскольку ядро ​​​​поддерживает perf. Но видимо нет. Глупый Майкрософт :/   -  person Peter Cordes    schedule 18.02.2020


Ответы (3)


ВНИМАНИЕ: производительность не найдена для ядра 4.19.84-microsoft.

Потому что WSL2 использует собственное ядро ​​​​Linux. Его исходный код можно найти здесь microsoft/WSL2-Linux-Kernel. Мы должны скомпилировать инструменты perf из него.

Процедура

  • Установите необходимые пакеты сборки. Если вы используете Ubuntu в WSL2, это обязательная команда:
sudo apt install build-essential flex bison libssl-dev libelf-dev
  • Клонируйте репозиторий ядра WSL2 Linux:
git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git
  • Перейдите в папку perf и скомпилируйте ее:
cd WSL2-Linux-Kernel/tools/perf
make

perf исполняемый файл будет в этой папке.

person Biswapriyo    schedule 18.02.2020
comment
Исходники инструментов Perf имеют отдельную версию по адресу mirrors.edge.kernel.org/ pub/linux/kernel/tools/perf, который проще в использовании, чем полная проверка или загрузка git ядра Linux. На этом сайте есть производительность для нескольких последних версий исходного ядра Linux; они должны работать для любого ядра. Или вы можете попытаться сгенерировать тот же файл targz из WSL2 git с помощью make perf-targz-src-pkg. Также: вы проверили сгенерированный исполняемый файл perf - что работает, а что нет; что находится в perf list, что говорит статистика производительности для простого эха 1, есть ли аппаратные события? - person osgx; 22.02.2020
comment
@osgx Я не проверял все параметры, но ./perf stat работает как обычно. - person Biswapriyo; 22.02.2020
comment
Убедитесь, что у вас установлен WSL 2, иначе вы получите perf_event_open(..., 0) failed unexpectedly with error 22 (Invalid argument) , как описано здесь: github .com/microsoft/WSL/issues/329#issuecomment-564454956 - person joseph; 03.03.2021
comment
Я получаю следующее: - Ошибка: невозможно найти debugfs/tracefs Подсказка: ваше ядро ​​было скомпилировано с поддержкой debugfs/tracefs? Подсказка: смонтирована ли файловая система debugfs/tracefs? Подсказка: попробуйте 'sudo mount -t debugfs nodedev /sys/kernel/debug' rebroad@J3PMPJP:~/bin$ sudo mount -t debugfs nodedev /sys/kernel/debug mount: /sys/kernel/debug: неизвестный тип файловой системы ' отладки». - person Rebroad; 03.05.2021

Вы можете установить linux-tools-generic и запустить perf напрямую через /usr/lib/linux-tools/<linux-version>-generic/perf

person Gloit    schedule 13.12.2020

Если вы следуете принятому ответу, убедитесь, что вы прочитали жалобы, которые команда make печатает в начале, так как в ней могут отсутствовать некоторые заголовки и отключаться функциональные возможности.

Для меня это отключило tui, gtk и разборку, чтобы назвать несколько функций.

person Jakob Ledermann    schedule 17.10.2020
comment
Итак, какие конкретные пакеты вам нужно было установить, чтобы удовлетворить эти необязательные зависимости и включить эти функции? Это сделает этот ответ более полезным для будущих читателей. - person Peter Cordes; 17.10.2020