Как я могу заставить работать скрипт perf -g python?

После установки perf с пакетом linux-tools-common я все еще не могу использовать возможности сценариев python / perl.

$ sudo perf script -g python
Python scripting not supported.  Install libpython and rebuild perf to enable it.
For example:
  # apt-get install python-dev (ubuntu)
  # yum install python-devel (Fedora)
  etc.

Как я могу установить версию Perf с поддержкой сценариев в Ubuntu?

6
задан 25 January 2015 в 23:30

1 ответ

С тех пор полный нетерпения (13.04), perf создается без сценариев Python, включенных, “для предотвращения зависимости от сборки Python”. Это стало неприятным шоком для людей как я, кто использовал perf в 12.04 LTS и обновленный до 14.04 LTS. Это документируется в debian-master/changelog файл в мерзавце ядра Ubuntu repos.

Короче говоря, если Ваше ядро 3.8.0-6.11 или позже, Вы — для использования точной технической терминологии — “дерьмо не повезло”: необходимо создать собственное perf.

Если Вы решаете сделать это Ubuntu способ, который является на самом деле довольно простым, можно погуглить для учебных руководств с переменными уровнями детализации (например, здесь или здесь). После того как Вы достигли стадии, где Вы клонировали ядро Ubuntu git repo, соответствующие Вашему выпуску и, проверили тег, соответствующий Вашему текущему ядру (если Ваше текущее ядро будет 3.13.0-48-универсально, то тег будет чем-то как 3.13.0-48.80, т.е. с дополнительным числом на конце), необходимо отредактировать (w.r.t корень git repo) debian/rules.d/2-binary-arch.mk и удалите NO_LIBPYTHON=1 от одного из make командные строки (это используется в \#ifdef проверки, таким образом изменяя его на NO_LIBPYTHON=0 не будет работать). Этот пункт только появляется однажды, поэтому просто ищите его и выньте его.

Дистрибутив linux-tools-3.x.x-y пакет содержит фактическое perf двоичный файл, который заканчивается в /usr/lib/linux-tools-3.x.x-y/perf. Это создается с fakeroot debian/rules binary-arch. Это правило (binary-arch) занимает много времени для создания (~25 минут на моем i7 ноутбуке). Если бы я уделил больше внимания, то я, возможно, вероятно, выбрал тот, который не создавал каждый вариант ядра и модуль. Приветствующиеся предложения.

Предположение, что Вы не внесли никакие другие изменения, после того как это заканчивается, пакет, который Вы хотите, linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb (по модулю Ваша версия ядра): это - то с двоичным файлом, а не обертки оболочки или символьные ссылки.

Может быть несколько другой linux-tools пакеты, в зависимости от точно, что Вы создали, linux-tools-3.13.0-48-generic_3.13.0-48.80_amd64.deb просто содержит символьные ссылки и материал (менее вероятно, чтобы отличаться) и linux-tools-common_3.13.0-48.80_all.deb просто содержит короткий дженерик perf сценарий обертки, который заканчивается в /usr/bin; последний создается с fakeroot debian/rules binary-indep.

Можно установить новое способное к Python perf с

# sudo dpkg -i linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb

Можно установить столько же, или так же мало, ядра, модулей ядра, других пакетов инструментов, и т.д. как Вы довольны. В принципе они должны все быть тем же. Я просто установил один пакет, и все, кажется, работает хорошо: у Меня есть свое способное к Python perf назад.

Конечно, Вы оказываетесь перед необходимостью делать многое из этого снова (от a git pull и checkout из нового тега вперед) в следующий раз существует обновление ядра. Я должен буду не отставать от этого сам, таким образом, я полудумал о засовывании моего .debs в PPA, но там, кажется, не много интереса (этот вопрос upvoted дважды за 3 месяца).

3
ответ дан 25 January 2015 в 23:30

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

Похожие вопросы: