2009-10-29 5 views
8

En mi máquina Ubuntu, la imagen predeterminada del núcleo que se está ejecutando está diseñada para smp (CONFIG_SMP=y). Pero esta máquina solo tiene 1 CPU.¿Spin_lock y spin_unlock perjudican el rendimiento de un kernel SMP en una máquina de una sola CPU?

En el kernel de un procesador, a diferencia del kernel smp, spin_lock/unlock son funciones nulas. Entonces, ¿cómo se comportan spin_lock() y spin_unlock() en esta configuración?

¿Hay algún impacto en el rendimiento debido a dicho código específico de smp?

+1

esto pertenece al superusuario – Amirshk

+0

Estoy de acuerdo. Esto definitivamente me suena super-usuario-ish. –

+0

¡Editó la pregunta desde la perspectiva de programación! –

Respuesta

0

Sí (Y probablemente no).

Sí: A. El bloqueo/desbloqueo de giro ejecutará el código real de bloqueo y desbloqueo porque al compilarlo el compilador no sabe si va a ejecutarlo en una máquina con una o más CPU. B. Aunque tenga una CPU, es posible que desee utilizarla si utiliza subprocesos.

Probablemente no: Supongo que debes preguntar porque no usas hilos para la pieza que necesitas bloquear, y solo tienes una CPU. En ese caso, el bloqueo de giro nunca debería entrar en rotación. Entonces la sobrecarga de rendimiento es insignificante.

3

Los núcleos Linux actuales contienen un parche para el que puede buscar en Google con los términos "alternativas SMP". En resumen, durante el arranque, si el kernel detecta que se está ejecutando en una máquina uniprocesador, las funciones de spinlock se conectan en caliente sin operaciones.

Cuestiones relacionadas