Como posso fazer o script perf -g python funcionar?

6

Depois de instalar perf com o pacote linux-tools-common , ainda não posso usar as habilidades de script 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.

Como posso instalar uma versão do perf com suporte a scripts, no Ubuntu?

    
por Elazar Leibovich 25.01.2015 / 21:30

1 resposta

3

Desde Raring (13.04), perf é construído sem o script Python habilitado “para evitar uma dependência de compilação do Python”. Isso foi um choque desagradável para pessoas como eu que usaram perf em 12.04 LTS e atualizaram para 14.04 LTS. Isto está documentado no debian-master/changelog file no repositório git do kernel do Ubuntu.

Em suma, se o seu kernel é 3.8.0-6.11 ou posterior, você está - para usar a terminologia técnica precisa - "merda de sorte": você tem que construir seu próprio perf .

Se você decidir fazer isso do modo Ubuntu, o que é realmente muito fácil, você pode procurar tutoriais com vários níveis de detalhes (por exemplo, aqui ou aqui ). Uma vez que você tenha alcançado o estágio no qual você clonou o kernel do Ubuntu git repo apropriado para o seu release e tenha verificado a tag correspondente ao seu kernel atual (se seu kernel atual é 3.13.0-48-generic, a tag será algo como 3.13.0-48.80 , ou seja, com um número extra no final), você deve editar (wrt a raiz do git repo) debian/rules.d/2-binary-arch.mk e remover NO_LIBPYTHON=1 de um dos make linhas de comando (é usado em \#ifdef checks, portanto, alterá-lo para NO_LIBPYTHON=0 não funcionará). Esta cláusula aparece apenas uma vez, portanto basta procurá-la e retirá-la.

O pacote linux-tools-3.x.x-y da distribuição contém o binário perf real, que acaba em /usr/lib/linux-tools-3.x.x-y/perf . Isso é construído com fakeroot debian/rules binary-arch . Esta regra ( binary-arch ) leva muito tempo para ser construída (~ 25 minutos no meu laptop i7). Se eu tivesse prestado mais atenção, provavelmente poderia ter escolhido uma que não construísse cada variante e módulo do kernel. Sugestões bem-vindas.

Assumindo que você não fez nenhuma outra alteração, uma vez que isto termine, o pacote que você quer é linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb (modulo sua versão do kernel): este é aquele com o binário, ao invés de symlinks ou invólucros de shell.

Pode haver alguns outros linux-tools pacotes, dependendo exatamente do que você criou, linux-tools-3.13.0-48-generic_3.13.0-48.80_amd64.deb contém apenas links simbólicos e outras coisas (menos provável que sejam diferentes) e linux-tools-common_3.13.0-48.80_all.deb contém apenas o genérico curto perf de script wrapper que acaba em /usr/bin ; o último é construído com fakeroot debian/rules binary-indep .

Você pode instalar seu novo perf com capacidade para Python com

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

Você pode instalar o máximo, ou tão pouco, do kernel, módulos do kernel, outros pacotes de ferramentas, etc., conforme você se sentir confortável. Em princípio, todos deveriam ser os mesmos. Acabei de instalar o pacote único e tudo parece funcionar OK: Eu tenho meu perf em Python.

É claro que você terá que fazer muito disso novamente (de git pull e checkout da nova tag em diante) na próxima vez que houver uma atualização do kernel. Eu mesmo terei que manter isso em mente, então eu estava pensando em colocar o meu .debs em um PPA, mas parece que não há muito interesse (essa questão variou duas vezes em 3 meses).

    
por Emmet 07.04.2015 / 20:18