¿Cómo obtener una velocidad de reloj de CPU ARM en Linux?

16

Tengo una máquina integrada basada en ARM basada en la placa S3C2416. De acuerdo con las especificaciones que tengo disponibles, debería haber un ARM9 de 533 MHz (según ARM926EJ-S /proc/cpuinfo), sin embargo, el software que se ejecuta en él "se siente" lento, en comparación con el mismo software en mi teléfono Android con una CPU ARM de 528MHz.

/proc/cpuinfome dice que BogoMIPS es 266.24. Sé que no debería confiar en BogoMIPS con respecto al rendimiento ("Bogo" = falso), sin embargo, me gustaría obtener una medición de la velocidad real de la CPU. En x86, podría usar las rdtscinstrucciones para obtener el contador de marca de tiempo, esperar un segundo (suspensión (1)), leer el contador nuevamente para obtener una aproximación de la velocidad de la CPU y, según mi experiencia, este valor estaba lo suficientemente cerca de La velocidad real de la CPU.

¿Cómo puedo encontrar la velocidad real de la CPU de un procesador ARM dado?

Actualizar

Encontré esta calculadora Pi simple , que compilé tanto para mi teléfono Android como para la placa ARM. Los resultados son los siguientes:

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)

Androide

# 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)

Por lo tanto, parece que el ARM926EJ-S es más lento que mi teléfono Android, pero no el doble de lo que esperaría de las cifras de BogoMIPS. Todavía no estoy seguro acerca de la velocidad del reloj de la CPU ARM9.

MiKy
fuente
elinux.org/S3C2416 dice 400MHz?
ta.speot.is el
Sí, ese es el original, debería haber obtenido un modelo más nuevo con CPU de 533MHz, es por eso que estoy verificando si obtuve lo que debería tener ...
MiKy
1
266.24*2=532.48Entonces parece que está muerto. Mi 480MHz ARM CPU obtiene 239,2, 439.2*2=478.4.
David Schwartz
Hay muchas cosas que pueden afectar la velocidad de las aplicaciones además de la velocidad de la CPU, como la velocidad de RAM, el ancho del bus de RAM y la velocidad de almacenamiento / NAND.
LawrenceC
1
Estoy familiarizado con el S3C2416. De hecho, es un diseño ARM9 / ARMv4, no un diseño ARMv6 o v7 "Cortex". El ARM en su teléfono inteligente Android probablemente sea un Cortex, por ejemplo, el diseño Cortex A5.
MSalters

Respuestas:

4

AFAICT el reloj de un S3C2416 se parece al de un S3C2443 o procesadores similares de su familia. El código fuente de Linux sugiere que hay varios relojes estrechamente relacionados.

Fragmento de elección:

    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));

Actualización desde OP

He estado buscando esta salida dmesg, pero no pude encontrar nada: la dmesgsalida estaba llena de mensajes de depuración y faltaba el comienzo. Claramente, el búfer de mensajes del núcleo era demasiado corto para contener todos los mensajes hasta que me conecte por telnet. Al /bin/dmesg > /tmp/dmesg.logcomenzar el proceso de inicio, pude obtener esta salida, confirmando lo que quería 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
fuente
9

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

En mi Android, esto lee 1113600, por lo que está en kHz .

ThatGraemeGuy
fuente
Lamentablemente ls -l /sys/devices/system/cpu/cpu0/me está dando cero resultados. Parece que la placa no admite el escalado de frecuencia (o el kernel es demasiado viejo).
MiKy
1
Creo que está en KHz de acuerdo con kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Falta parte del árbol en Debian 3.16.7-ckt25-2. cpufreqfalta debajo /sys/devices/system/cpu/cpu0/(y otras CPU). Es una placa ARMv8 / Aarch64 Mustang temprana, pero no estoy seguro de si es parte del problema. Un ARMv8 / Aarch64 HiKey que ejecuta 3.18.0-linaro-hikey tiene el árbol.
jww
Tampoco existe en una Raspberry Pi 3 B + con Debian de 64 bits. ¿Necesita un paquete para obtenerlo?
Jon Harrop
1

Con Linux, si tiene el hwinfocomando, entonces (como root) problema:
hwinfo --cpu | grep Clock

Tom
fuente
Esta es una herramienta SuSE y generalmente no está disponible por defecto en otras distribuciones.
Evi1M4chine
Para Debian Jessie: "El paquete hwinfo no está disponible, pero otro paquete hace referencia a él".
jww
hwinfo está disponible en Debian: packages.debian.org/sid/admin/hwinfo
David Lechner
Sin embargo, el grepping de Clock en una CPU ARM926EJ-S se queda vacío
David Lechner
Vacíe también en un Raspberry Pi 3 B + con Debian de 64 bits.
Jon Harrop
-1

dmidecodees una pequeña herramienta útil que descarga lo que está actualmente en la DMItabla en un formato que puede leer. Hacer un dmidecode | grep "Current Speed"(como root o con sudo) imprimirá la velocidad de la CPU que se informa actualmente en el DMI.

qweet
fuente
Eso sería genial, desafortunadamente tengo un entorno limitado, es decir, no Python.
MiKy
@MiKy: Si veo esto correctamente, dmidecode es C, nativo.
Bobby
44
¿No es DMI una cosa de BIOS, que no existe en las plataformas ARM?
LawrenceC
3
La "D" significa escritorio , por lo que es probable que este sistema integrado no lo tenga.
MSalters
1
Para Debian Jessie: "El paquete dmidecode no está disponible, pero otro paquete hace referencia a él". Hasta donde yo sé, las placas ARM no usan una BIOS de PC.
jww