Digamos que tengo un ARM Cortex-A multinúcleo.
Ahora tengo un Linux, con el parche RT_PREEMPT (llamado Linux en tiempo real ). Ejecuto procesos con afinidad establecida en un núcleo y alta prioridad (por encima de 50).
Gracias al parche en tiempo real, incluso el programador del kernel no puede adelantarse a mi proceso y, gracias a la afinidad, puede ejecutarse todo el tiempo en un solo núcleo (y el sistema operativo en otros).
En tales condiciones, ¿hay alguna diferencia (es decir, gastos generales) de ejecutar dicho código en Linux frente a bare-metal?
¿Será el rendimiento el mismo? Si no, ¿por qué?
Los gastos generales no se relacionan con la preferencia. La preferencia detiene su proceso y ejecuta otro proceso. Si deshabilita eso, por ejemplo, para un núcleo de CPU, tiene el núcleo de CPU solo para su proceso.
Aún así, hay una sobrecarga si realiza E/S a través de las funciones de E/S de Linux, por ejemplo, controlando las líneas de E/S directamente a través de su proceso. Pero, para cualquier E/S razonablemente complicada, usted mismo tuvo que implementar una función con una sobrecarga similar y puede suponer que la gente de Linux es mejor que usted en eso: más experiencia y más casos de prueba.
Por lo tanto, la única forma en que podría ganar la carrera de gastos generales es con funciones de E/S muy básicas (por ejemplo, bitbanging en un protocolo exótico y rápido) que implementa usted mismo en "su kernel" en lugar de ejecutarlo a través de las diversas capas de abstracción del subsistema Linux GPIO y haga lo mismo en "su proceso de espacio de usuario".
Rdo
marcus muller