Como desativar o subsistema perf no kernel do Linux?

15

Estou executando alguns benchmarks. Meu corredor de referência monitora o buffer dmesg entre experimentos, procurando qualquer coisa que possa impactar o desempenho. Hoje ele vomitou:

[2015-08-17 10:20:14 WARNING] dmesg parece ter mudado! Diff segue:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] Ativando estados RC6: RC6 ativado, RC6p desativado, RC6pp desativado
 [7.900533] r8169 0000: 06: 00.0 eth0: vincular
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: o link fica pronto
+ [236832.221937] a interrupção perf levou muito tempo (2504> 2500), reduzindo o kernel.perf_event_max_sample_rate para 50000

Após algumas pesquisas, agora sei que isso se refere a um subsistema de criação de perfil no kernel do linux chamado "perf". Eu não acho que precisamos disso, então eu gostaria de desativá-lo completamente.

Pesquisando novamente, acho que o sysctl perf_cpu_time_max_percentpode ajudar. Aqui, alguém sugere desativar, definindo-o como 0. Lendo mais sobre isso aqui :

perf_cpu_time_max_percent:

Dicas para o kernel quanto tempo de CPU deve ser permitido para lidar com eventos de amostragem perf. Se o subsistema perf for informado de que suas amostras estão excedendo esse limite, ele diminuirá sua frequência de amostragem para tentar reduzir o uso da CPU.

Algumas amostras de perf ocorrem em MNI. Se essas amostras demorarem muito para serem executadas inesperadamente, as NMIs poderão ficar empilhadas uma ao lado da outra, de maneira que nada mais possa ser executado.

0: desabilite o mecanismo. Não monitore ou corrija a taxa de amostragem do perf, independentemente do tempo de CPU necessário.

1-100: tente acelerar a taxa de amostragem do perf para essa porcentagem de CPU. Nota: o kernel calcula um comprimento "esperado" de cada evento de amostra. 100 aqui significa 100% do comprimento esperado. Mesmo se estiver definido como 100, você ainda poderá ver a otimização da amostra se esse comprimento for excedido. Defina como 0 se você realmente não se importa com a quantidade de CPU consumida.

Parece-me que 0 significa que a taxa de amostragem de criação de perfil não é mais verificada, mas o subsistema freq permanece em execução (?).

Alguém pode esclarecer como desativar completamente a criação de perfil do kernel com freq?

Edição: Alguém sugeriu que eu tente construir um kernel sem perf, mas acho que isso nem é possível. A opção não parece selecionável:

menuconfig

EDIT2: Depois de mais leitura, eu decidi que poderia ser definido kernel.perf_event_max_sample_ratecomo zero. Ou seja, sem amostras por segundo. No entanto, você também não pode fazer isso ( fonte ):

confirmar 02f98e3e36da106338b7c732fed516420fb20e2a
Autor: Knut Petersen 
Data: Wed Sep 25 14:29:37 2013 +0200

perf: aplique 1 como limite inferior para perf_event_max_sample_rate

EDIT 3: FWIW, perf_cpu_time_max_percentestá definido como 25, o que significa que o kernel estava gastando mais de 25% do tempo de amostragem de registros de hardware. Isso é inaceitável para uma máquina de benchmarking.

Agora estou certo de que definir perf_cpu_time_max_percentcomo zero apenas pioraria a situação, pois o kernel continuaria a usar mais de 25% do seu tempo lendo registros de hardware. O erro é disparado para ajustar a taxa de amostragem, tentando garantir que o kernel atenda à sua cota de usar <25% do seu tempo no perf. 25% ainda é muito alto IMHO.

Se eu realmente não puder desativar o perf, provavelmente o melhor compromisso seria definir perf_event_max_sample_ratecomo 1.

EDIT4: Um amigo sugeriu que eu possa ter interpretado mal o significado de perf_cpu_time_max_percent, portanto, as declarações acima podem estar incorretas. Um valor de 25 indica que o kernel usou mais de 25% de algum comprimento arbitrário que havia reservado para atender a interrupções de perf.

EDIT5:

Conforme apontado nos comentários, a -*-opção contra o perf sugere que o recurso é forçado por outro recurso ativado. Se eu olhar help, ele diz quais recursos são:

Socorro

Eu não acho que posso ganhar aqui. A fórmula booleana selected bydiz

Se você está segmentando X86 ou ...

Acabei de verificar que a segmentação X86_64 realmente permite CONFIG_X86. Parece que assim que você segmenta o X86 ou o X86_64, você obtém o desempenho.

Então, gostaria de mudar minha pergunta para:

Quais configurações de perf posso usar para minimizar o tempo gasto pelo kernel nas rotinas de perf?

Lembre-se de que o objetivo geral é controlar fontes de variação aleatória para o benchmarking. Se não consigo desativar o perf, como posso minimizar o impacto nos benchmarks?

Edd Barrett
fonte
1
Você deve poder desabilitar o perf na tela anterior.
Michael Hampton
1
Você quer dizer "Suporte de criação de perfil"? Se eu desativar isso, ainda não consigo desmarcar a opção mostrada acima. Além disso, se eu examinar .config, eu tenho CONFIG_HAVE_PERF_EVENTS=ye CONFIG_PERF_EVENTS=y. Eu não acho que esse desempenho desabilitado.
Edd Barrett
2
A mensagem é informativa. O kernel determina automaticamente uma taxa de amostragem que pode ser usada sem afetar o desempenho do sistema e a registra mesmo quando o perf não está ativo ou instalado. Quando a carga do sistema é maior ou há escala de frequência, você geralmente recebe essas mensagens.
Brian
1
O símbolo -*-significa que algum subsistema depende do módulo perf. Helpmostra a árvore de dependências que você precisa desativar para alterar a opção para [*]ou [M].
Rufo El Magufo
4
Revisei a questão para levar isso em consideração. Em resumo, o perf parece ser obrigatório no X86_64.
Edd Barrett

Respostas:

2

Desative a opção do kernel [HAVE_PERF_EVENTS] e recompile o kernel do Linux.

John Greene
fonte