En los sistemas informáticos multiprocesador , el bloqueo de software es el problema de la degradación del rendimiento debido a los tiempos de espera inactivos que pasan las CPU en secciones críticas a nivel del núcleo . [ 1 ] El bloqueo de software es una causa importante de la degradación de la escalabilidad en un sistema multiprocesador, imponiendo un límite al número máximo de procesadores útiles. Para mitigar este fenómeno, el núcleo debe diseñarse para que sus secciones críticas sean lo más cortas posible, descomponiendo así cada estructura de datos en subestructuras más pequeñas.
Secciones críticas a nivel de núcleo
En la mayoría de los sistemas multiprocesador, cada procesador se planifica y controla a sí mismo, por lo que no hay un procesador "supervisor" [ 1 ] , y las estructuras de datos del núcleo se comparten globalmente; las secciones de código que acceden a esas estructuras de datos compartidas son secciones críticas . Esta elección de diseño se realiza para mejorar la escalabilidad, la fiabilidad y la modularidad [ 1 ] . Ejemplos de tales estructuras de datos del núcleo incluyen listas de listos y canales de comunicación .
Se produce un conflicto cuando más de un procesador intenta acceder al mismo recurso (una ubicación de memoria) simultáneamente. Para evitar condiciones de carrera e inconsistencias, solo una CPU a la vez puede acceder a una estructura de datos específica , mientras que las demás CPU que intentan acceder a ella al mismo tiempo quedan bloqueadas y en estado de inactividad. [ 1 ] [ 2 ]
Se pueden distinguir tres casos en los que la espera inactiva es necesaria, aceptable o indeseable. La espera inactiva es necesaria cuando se accede a una lista de procesos listos para una operación de planificación de bajo nivel . Es aceptable en el caso de una sección crítica para la sincronización o las operaciones IPC , que requieren menos tiempo que un cambio de contexto (que a su vez requeriría ejecutar otro proceso en lugar de la espera inactiva). La espera inactiva es indeseable en el caso de una sección crítica del kernel para la gestión de dispositivos , una situación que surge principalmente en kernels monolíticos . Un diseño de microkernel solo presenta los dos primeros casos.
En un sistema multiprocesador, la mayoría de los conflictos son de nivel de núcleo debido al acceso a secciones críticas de dicho núcleo, y los consiguientes periodos de espera inactivos tienen un gran impacto en el rendimiento. El tiempo acumulado de espera inactivo aumenta el número promedio de procesadores inactivos y reduce la escalabilidad y la eficiencia relativa .
Estudios analíticos
Tomando como parámetros el intervalo de tiempo promedio que pasa un procesador en secciones críticas a nivel de núcleo ( L , para el tiempo en estado bloqueado), y el intervalo de tiempo promedio que pasa un procesador en tareas fuera de las secciones críticas ( E ), [ 1 ] la relación L/E es crucial para evaluar el bloqueo de software.
Los valores típicos de L/E van de 0,01 a 0,1. [ 1 ] En un sistema con una relación L/E de 0,05, por ejemplo, con 15 CPU, una CPU en promedio siempre estará inactiva; con 21 CPU, 2,8 estarán inactivas en promedio; [ 3 ] con 40 CPU, 19 estarán inactivas; con 41 CPU, 20 estarán inactivas. [ 1 ] Agregar más de 40 CPU a ese sistema, por lo tanto, produce poco beneficio. En general, para cada valor de L/E , hay un umbral para el número máximo de CPU útiles.
Mitigación del bloqueo de software
Para reducir la degradación del rendimiento causada por el bloqueo de software a niveles aceptables ( L/E entre 0,05 y 0,1), el núcleo y el sistema operativo deben diseñarse en consecuencia. El enfoque más directo consiste en descomponer cada estructura de datos del núcleo en subestructuras independientes más pequeñas con tiempos de acceso más cortos, lo que permite que más de una CPU acceda a la estructura de datos original simultáneamente.
Se ha estimado que muchos sistemas monoprocesador con dominios de protección jerárquicos dedican hasta el 50 % de su tiempo a realizar operaciones en modo supervisor. Si dichos sistemas se adaptaran al multiprocesamiento estableciendo un único bloqueo para cualquier acceso al estado del supervisor, L/E superaría fácilmente 1, [ 1 ] lo que resultaría en un rendimiento similar al del sistema monoprocesador, independientemente del número de CPU añadidas.
Los núcleos de los sistemas operativos modernos mitigan el bloqueo de software mediante técnicas como el bloqueo granular, las estructuras de datos sin bloqueo , la sincronización de lectura-copia-actualización (RCU) y las estructuras de datos por CPU, que en conjunto permiten que los núcleos contemporáneos escalen a un gran número de procesadores. [ 4 ]
Véase también
Referencias
- 1 2 3 4 5 6 7 8 Madnick, Stuart E. (1968). Bloqueo de software multiprocesador (PDF) . Actas de la 23.ª Conferencia Nacional de la ACM de 1968. págs. 19–24 . doi : 10.1145/800186.810561 .
- ↑ Saltzer, Jerome (junio de 1966). Control de tráfico en un sistema informático multiplexado (PDF) (PhD). Proyecto MAC MAC-TR-30 del MIT.
- ↑ Raynor, Randy J.; Gwynn, John M. Jr. (julio de 1976). "Minimización del conflicto de supervisor para sistemas informáticos multiprocesador". ACM SIGSIM Simulation Digest . 7 (4): 61– 69. doi : 10.1145/1013610.807300 .
- ↑ McKenney, Paul E. (2017). ¿Es difícil la programación paralela y, de ser así, qué se puede hacer al respecto? (2.ª ed.). Linux Technology Center, IBM.
Lecturas adicionales
- Dubois, M.; Briggs, F. (noviembre de 1991). "La eficiencia en tiempo de ejecución de los algoritmos asíncronos paralelos". IEEE Transactions on Computers . 40 (11): 1260– 1266. doi : 10.1109/12.102830 .
- Rodgers, David P. (junio de 1985). Mejoras en el diseño de sistemas multiprocesador . Actas del 12.º Simposio Internacional Anual sobre Arquitectura de Computadoras (ISCA '85). ACM SIGARCH Computer Architecture News . Vol. 13, n.º 3, págs. 225-231 . ISSN 0163-5964 .
- Cordsen, Jörg; Schröder-Preikschat, Wolfgang (23-27 de noviembre de 1992). Hacia una arquitectura de núcleo escalable . Actas de la Conferencia Técnica Openforum de otoño de 1992. Utrecht, Países Bajos. págs. 15-33 .
- Rendimiento informático
- Control de concurrencia
- núcleos de sistemas operativos