BogoMips (de "bogus" y MIPS ) es una medida rudimentaria de la velocidad de la CPU que realiza el kernel de Linux al arrancar para calibrar un bucle interno de espera . [ 1 ] Una definición frecuentemente citada del término es "el número de millones de veces por segundo que un procesador no puede hacer absolutamente nada". [ 2 ] [ 3 ]
BogoMips es un valor que se puede usar para verificar si el procesador en cuestión está dentro del rango adecuado de procesadores similares; es decir, BogoMips representa la frecuencia de reloj de un procesador, así como la caché de CPU potencialmente presente . No se puede usar para comparaciones de rendimiento entre diferentes CPU. [ 4 ]
Historia
En 1993, Lars Wirzenius publicó un mensaje en Usenet [ 5 ] explicando las razones de su introducción en el kernel de Linux en comp.os.linux:
- [...]
- MIPS son las siglas de Millions of Instructions Per Second (Millones de Instrucciones por Segundo). Es una medida de la velocidad de cálculo de un procesador. Como ocurre con la mayoría de estas medidas, se usa con más frecuencia de forma incorrecta que adecuada (es muy difícil comparar con precisión el rendimiento en MIPS de diferentes tipos de ordenadores).
- Los BogoMips son una invención de Linus . La versión 0.99.11 del kernel de Linux (del 11 de julio de 1993) requería un bucle de temporización (el tiempo era demasiado corto o debía ser demasiado preciso para un método de espera sin bucle ocupado), que debía calibrarse según la velocidad del procesador. Por lo tanto, el kernel mide al arrancar el sistema la velocidad de ejecución de un bucle ocupado específico. "Bogo" proviene de "bogus", es decir, algo falso. Así pues, el valor BogoMips ofrece una indicación de la velocidad del procesador, pero es demasiado impreciso como para llamarlo de otra manera.
- Las razones (hay dos) por las que se imprime durante el arranque son que a) es ligeramente útil para la depuración y para comprobar que las cachés y el botón turbo del ordenador funcionan, y b) a Linus le encanta reírse cuando ve a gente confundida en las noticias.
- [...]
Calificaciones adecuadas de BogoMips
Como guía aproximada, el valor de BogoMips se puede calcular previamente mediante la siguiente tabla. La clasificación indicada es típica para esa CPU con la versión de Linux vigente y aplicable . El índice representa la relación entre "BogoMips por velocidad de reloj" para cualquier CPU y la misma para una CPU Intel 386DX, a efectos comparativos. [ 6 ] [ 7 ]
Con el kernel de Linux 2.2.14, la configuración de almacenamiento en caché del estado de la CPU se movió de antes a después del cálculo de BogoMips. Si bien el algoritmo BogoMips en sí no se modificó, a partir de ese kernel, la puntuación BogoMips para las CPU Pentium de la época duplicó la puntuación anterior al cambio. El resultado modificado de BogoMips no tuvo ningún efecto en el rendimiento real del procesador.
En una consola, BogoMips se puede obtener fácilmente buscando en el archivo cpuinfo : [ 7 ]
$ grep -i bogomips /proc/cpuinfo Cálculo de BogoMips
Con el kernel 2.6.x, BogoMips se implementa en el /usr/src/linux/init/calibrate.carchivo fuente del kernel. Calcula el valor del parámetro de temporización del kernel de Linux loops_per_jiffy(ver jiffy ). La explicación del código fuente:
/* * Un bucle simple como * mientras ( jiffies < start_jiffies+1) * inicio = leer_temporizador_actual(); * no servirá. Como realmente no sabemos si el cambio rápido... * ocurrió primero o se leyó primero el valor del temporizador. Y alguna asincronía * El evento puede ocurrir entre estos dos eventos introduciendo errores en lpj. * * Entonces, lo hacemos * 1. pre_start <- Cuando estamos seguros de que no se ha producido el cambio rápido * 2. Compruebe el interruptor rápido * 3. inicio <- valor del temporizador antes o después del interruptor jiffy * 4. post_start <- Cuando estamos seguros de que se ha producido el cambio rápido * * Nota: no sabemos nada sobre el orden de 2 y 3. * Ahora, al observar la diferencia entre post_start y pre_start, podemos * comprobar si se ha producido algún evento asíncrono o no. */
loops_per_jiffySe utiliza para implementar las funciones udelay(retardo en microsegundos) y ndelay(retardo en nanosegundos). Algunos controladores necesitan estas funciones para esperar al hardware. Tenga en cuenta que se utiliza una técnica de espera activandelay , por lo que el kernel se bloquea efectivamente al ejecutar las funciones / udelay. Para la arquitectura i386 delay_loopse implementa /usr/src/linux/arch/i386/lib/delay.ccomo:
/* Retardo simple basado en bucle: */ static void delay_loop ( unsigned long loops ) { int d0 ;__asm__ __volatile__ ( " \t jmp 1f \n " ".align 16 \n " "1: \t jmp 2f \n " ".align 16 \n " "2: \t decl %0 \n\t jns 2b" : "=&a" ( d0 ) : "0" ( loops )); }equivalente al siguiente código ensamblador
; entrada: eax = d0 ; salida: eax = 0 jmp start .align 16 start: jmp body .align 16 body: decl eax jns bodyque se puede reescribir en pseudocódigo C
static void delay_loop ( long loops ) { long d0 = loops ; do { -- d0 ; } while ( d0 >= 0 ); }En el mini-manual de BogoMips (actualmente desactualizado) se puede encontrar información completa y detallada sobre BogoMips, así como cientos de entradas de referencia. [ 4 ]
Retardos basados en temporizador
En 2012, ARM contribuyó con una nueva udelayimplementación que permitía usar el temporizador del sistema integrado en muchas CPU ARMv7 en lugar de un bucle de espera activa. Esta implementación se publicó en la versión 3.6 del kernel de Linux . [ 8 ] Los retrasos basados en temporizadores son más robustos en sistemas que usan escalado de frecuencia para ajustar dinámicamente la velocidad del procesador en tiempo de ejecución, ya que loops_per_jiffieslos valores no necesariamente escalan linealmente. Además, como la frecuencia del temporizador se conoce de antemano, no se necesita calibración al arrancar el sistema.
Una consecuencia de este cambio es que el valor de BogoMIPS reflejará la frecuencia del temporizador, no la frecuencia del núcleo de la CPU. Normalmente, la frecuencia del temporizador es mucho menor que la frecuencia máxima del procesador, y algunos usuarios podrían sorprenderse al ver un valor de BogoMIPS inusualmente bajo al compararlo con sistemas que utilizan bucles de espera activa tradicionales.
Véase también
Referencias
- ^ Van Dorst, Wim (enero de 1996). "El punto de referencia de Linux por excelencia" . Diario de Linux . Consultado el 22 de agosto de 2008 .
- ↑ Eric S Raymond y Geoff Mackenzie , publicado en Internet a principios de la década de 1990, origen no rastreable.
- ↑ Raymond, Eric S. "Archivo de jerga de hackers" .
- ^ Van Dorst, Wim (2 de marzo de 2006) . "Mini-Howto de BogoMips" (V38 ed.) . Consultado el 22 de agosto de 2008 .
- ↑ Wirzenius, Lars. "Re: impresión y BogoMips" .
- ↑ Bekman, Stas. "¿Qué es un BogoMip?" .
- 1 2 "Mini-tutorial de BogoMips" .
- ↑ Deacon, Will. "ARM: 7452/1: retardo: permitir seleccionar la implementación de retardo basada en temporizador" .
Enlaces externos
- Mini-tutorial de BogoMips, V38
- Fuentes de referencia clásicas independientes
- núcleo de Linux
- Puntos de referencia (informática)