Posso executar vários núcleos em diferentes velocidades de clock?

7

Vejo que os núcleos em uma máquina Intel i5 que eu estou vendo só podem ser executados na mesma velocidade do relógio: /sys/devices/system/cpu/cpu1/cpufreq/related_cpus lista todas as CPUs. Configurar a velocidade de clocks do cpu1 muda o cpu0, como esperado.

Supostamente, a máquina AMD A6-4400M que estou executando deve ser capaz de executar cada núcleo em uma velocidade de relógio diferente: /sys/devices/system/cpu/cpu1/cpufreq/related_cpu apenas lista cpu1. Quando eu configuro a velocidade do relógio da cpu1 usando o governador de desempenho e fazendo eco de 1400000 para scaling_max_freq , a velocidade do relógio da cpu0 permanece em 2700000 como esperado. O scaling_cur_freq da Cpu1 lê 1400000 como esperado.

No entanto, cpuinfo_cur_freq da cpu1 lê 2700000. Do benchmarking, parece que a CPU1 ainda está funcionando a 2,7 GHz. Estou faltando alguma coisa ou algo está quebrado?

Estou executando o Linux 2.6.35 e passando idle=mwait na linha de comando do kernel.

    
por Matt 07.01.2013 / 23:19

1 resposta

4

Isto ainda não está perto de ser uma resposta definitiva. Em vez disso, é um conjunto de sugestões muito longo para caber nos comentários.

Eu tenho medo que você possa interpretar um pouco os significados dos parâmetros sysfs cpufreq. Por exemplo, no meu laptop Core Duo , os parâmetros related_cpu para ambos os núcleos leem 0 1 - o que, de acordo com sua interpretação, significaria que os núcleos não podem alternar frequências de forma independente. Mas esse não é o caso - eu posso definir cada frequência à vontade. Por outro lado, o parâmetro affected_cpus para cada núcleo lista apenas o respectivo número de CPU.

Você pode querer dar uma olhada na documentação do kernel do cpu-freq para entender melhor os parâmetros, como affected_cpus , related_cpus , scaling_* e cpuinfo_* . A documentação é normalmente distribuída com pacotes de origem do kernel. Especificamente, recomendo ler <kernel-sources-dir>/Documentation/cpu-freq/user-guide.txt , em que <kernel-sources-dir> normalmente representa /usr/src/linux ou /usr/src/linux-<kernel-version> . (No entanto, quando eu mesmo examino a documentação agora, confesso que não percebo algumas nuances relacionadas à escala de frequência. Para entender completamente essas informações, provavelmente é necessário obter um sólido entendimento das arquiteturas de CPU primeiro.)

Voltar para sua pergunta. E mais um caso de teste da minha parte: quando eu mudo o valor de scaling_max_freq (com userspace ou performance governor sendo usado), o relógio do núcleo muda automaticamente para esse novo máximo. O comportamento diferente que você está observando pode ser qualquer um:

  • específico para implementação de hardware de mecanismos de escalonamento de frequência em sua CPU,
  • devido a diferenças entre o módulo cpufreq padrão e phc-intel que estou usando,
  • comportamento normal (chame-se de um bug ou um recurso se você quiser) de cpufreq module, que mudou em algum momento desde 2.6.35 (minha versão atual do kernel é 3.6.2 ),
  • resultado de um erro na implementação de cpufreq para sua CPU (ou toda a família),
  • específico para a implementação do performance do controlador da CPU a partir de 2.6.35 .

Algumas das coisas que você pode fazer para levar sua investigação adiante:

  • leia o user-guide.txt e mexa mais com outros parâmetros cpufreq ,
  • repita os testes enquanto executa um kernel mais novo - a maneira mais fácil é inicializar um liveCD / DVD / USB.

Se você continuar a experimentar um comportamento inesperado e ganhar mais razões para acreditar que é devido a um bug (definitivamente deve verificar com a última versão do kernel secundário), vá em frente e relate isso em kernel.org bugzilla .

    
por 14.01.2013 / 23:28