Como obter uma velocidade de clock da CPU do ARM no Linux?

16

Eu tenho uma máquina incorporada baseada em ARM baseada na placa S3C2416. De acordo com as especificações que tenho disponíveis, deve haver um ARM9 de 533 MHz (conforme ARM926EJ-S /proc/cpuinfo), no entanto, o software em execução "parece" lento, em comparação com o mesmo software no meu telefone Android com uma CPU ARM de 528 MHz.

/proc/cpuinfome diz que o BogoMIPS é 266,24. Eu sei que não devo confiar no BogoMIPS em relação ao desempenho ("Bogo" = falso), no entanto, gostaria de obter uma medida da velocidade real da CPU. No x86, eu poderia usar a rdtscinstrução para obter o contador de carimbo de data / hora, esperar um segundo (suspensão (1)), ler o contador novamente para obter uma aproximação da velocidade da CPU e, de acordo com minha experiência, esse valor estava próximo o suficiente para a velocidade real da CPU.

Como posso encontrar a velocidade real da CPU de um determinado processador ARM?

Atualizar

Encontrei esta calculadora Pi simples , que compilei para o meu telefone Android e a placa ARM. Os resultados são os seguintes:

S3C2416

# cat /proc/cpuinfo
Processor   : ARM926EJ-S rev 5 (v5l)
BogoMIPS    : 266.24
Features    : swp half fastmult edsp java 
...
#./pi_arm 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
8.50 sec. (real time)

Android

# cat /proc/cpuinfo
Processor   : ARMv6-compatible processor rev 2 (v6l)
BogoMIPS    : 527.56
Features    : swp half thumb fastmult edsp java 
# ./pi_android 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
5.95 sec. (real time)

Portanto, parece que o ARM926EJ-S é mais lento que o meu telefone Android, mas não duas vezes mais lento como eu poderia esperar pelos números do BogoMIPS. Ainda não tenho certeza sobre a velocidade do clock da CPU do ARM9.

MiKy
fonte
elinux.org/S3C2416 diz 400MHz?
ta.speot.is
Sim, isso é o original, eu deveria ter pego um modelo mais novo com 533MHz CPU, é por isso que estou verificando se eu tenho o que eu deveria ter ...
Miky
1
266.24*2=532.48Então parece que está morto. Minha CPU ARM de 480 MHz obtém 239,2 439.2*2=478.4,.
David Schwartz
Há muitas coisas que podem afetar a velocidade dos aplicativos além da velocidade da CPU, como velocidade da RAM, largura do barramento de RAM e velocidade de armazenamento / NAND.
LawrenceC
1
Eu estou familiarizado com o S3C2416. É realmente um design ARM9 / ARMv4, não um design "Cortex" ARMv6 ou v7. O ARM do seu smartphone Android provavelmente é um Cortex, por exemplo, o design do Cortex A5.
MSalters

Respostas:

4

Afinal, o relógio de um S3C2416 se parece com o de um S3C2443 ou de processadores similares de sua família. O código fonte do Linux sugere que há vários relógios intimamente relacionados.

Snippet de escolha:

    pll = get_mpll(mpllcon, xtal);
    clk_msysclk.clk.rate = pll;

    fclk = pll / get_fdiv(clkdiv0);
    hclk = s3c2443_prediv_getrate(&clk_prediv);
    hclk /= s3c2443_get_hdiv(clkdiv0);
    pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);

    s3c24xx_setup_clocks(fclk, hclk, pclk);

    printk("CPU: MPLL %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03l MHz\n",
           (mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
           print_mhz(pll), print_mhz(fclk),
           print_mhz(hclk), print_mhz(pclk));

Atualização do OP

Eu estava procurando por essa saída dmesg, mas não consegui encontrar nada - a dmesgsaída estava cheia de mensagens de depuração e o início estava ausente. Claramente, o buffer de mensagens do kernel era muito pequeno para reter todas as mensagens até eu conectar por telnet. Ao colocar /bin/dmesg > /tmp/dmesg.logno início do processo de inicialização, consegui obter essa saída, confirmando o que queria saber:

Linux version 2.6.21 (gcc version 4.2.2)
CPU: ARM926EJ-S revision 5 (ARMv5TEJ)
Machine: SMDK2416
...
CPU S3C2416 EVT3
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C2416: mpll on 534.000 MHz, cpu 534.000 MHz, mem 133.500 MHz, pclk 66.750 MHz
MSalters
fonte
9

Tente cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

No meu android, ele lê 1113600, então isso é em kHz .

ThatGraemeGuy
fonte
Infelizmente ls -l /sys/devices/system/cpu/cpu0/está me dando zero resultados. Parece que a placa não suporta escala de frequência (ou o kernel é muito antigo).
MiKy 29/03/12
1
Eu acredito que é em KHz acordo com kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Parte da árvore está ausente no Debian 3.16.7-ckt25-2. cpufreqestá faltando em /sys/devices/system/cpu/cpu0/(e em outras CPUs). É uma placa ARMv8 / Aarch64 Mustang antiga, mas não tenho certeza se isso faz parte do problema. Um HiKey do ARMv8 / Aarch64 executando o 3.18.0-linaro-hikey possui a árvore.
J6
Também não existe em um Raspberry Pi 3 B + executando o Debian de 64 bits. Você precisa de um pacote para obtê-lo?
Jon Harrop
1

Com o Linux, se você possui o hwinfocomando, emita (como root):
hwinfo --cpu | grep Clock

Tom
fonte
Essa é uma ferramenta SuSE e geralmente não está disponível por padrão em outras distribuições.
Evi1M4chine
Para o Debian Jessie: "O pacote hwinfo não está disponível, mas é referido por outro pacote."
jww 6/06/16
hwinfo está disponível no Debian: packages.debian.org/sid/admin/hwinfo
David Lechner
grepping para Clock em uma CPU ARM926EJ-S aparece vazio embora
David Lechner
Vazio em um Raspberry Pi 3 B + executando o Debian de 64 bits também.
Jon Harrop
-1

dmidecodeé uma pequena ferramenta útil que despeja o que está atualmente na DMItabela em um formato que você pode ler. Fazer um dmidecode | grep "Current Speed"(como root ou com sudo) imprimirá a velocidade da CPU que está sendo relatada atualmente no DMI.

qweet
fonte
Isso seria ótimo, infelizmente eu tenho um ambiente limitado, ou seja, sem Python.
31512 MiKy
@ Mikki: Se eu ver isso corretamente, dmidecode é C, nativo.
Bobby
4
O DMI não é uma coisa do BIOS, que não existe nas plataformas ARM?
31412 LawrenceC
3
O "D" significa desktop , então as chances são de que este sistema incorporado não o tenha.
MSalters
1
Para o Debian Jessie: "O pacote dmidecode não está disponível, mas é referido por outro pacote." Até onde eu sei, as placas ARM não usam um BIOS de PC.
J6