Depuis quelques temps, je me pose une question sur l'ordonnancement de processus sur certains SOC. Je comprends comment fonctionne l'ordonnancement sur un système SMP, mais depuis quelques temps, on voit apparaître des SOC qui disposent de cores de types différents (exemple pour mon téléphone : 4x 2.36 GHz ARM Cortex-A53, 4x 1.7 GHz ARM Cortex-A53). Dans ce cas, le type de core est le même, et seule la fréquence change, mais il me semble aussi avoir vu des SOC sur des cartes d'évaluation qui disposent de cores de types différents.
Du coup je me demande comment fait le système d'exploitation pour gérer l'ordonnancement de processus sur ce type de SOC.
Auriez-vous de la littérature ou des liens sur ce sujet ? Ou des réponses à m'apporter ?
Merci d'avance.
# Plusieurs cas de figure
Posté par cg . Évalué à 2. Dernière modification le 16 septembre 2023 à 15:42.
Je n'ai pas vraiment de réponse pour le cas que tu présentes, mais des indices qui tentent à me faire penser que le système ne gère pas l’ordonnancement entre cores de types différents¹.
De mémoire (ça fait un bail que j'ai pas regardé), il y a plusieurs possibilités :
les microcontrôleurs parlent par un bus de communication. Par exemple un proc ARM parle à un AVR, pas trop de partage possible, ce sont deux archis genre rien à voir. Par exemple le Arduino Yun.
Plus intéressant, les deux microcontrôleurs (ou cores) ont des archis proches mais sont quand mêmes différents et ne peuvent pas facilement partager de code compilé. Par contre, il peuvent se partager la mémoire (RAM et/ou flash), qui va, selon le SoC ou la carte, être intégrée au SoC ou externe. Peut-être chez Beagleboard, en fait je pense à une autre carte mais j'ai oublié le nom.
Dans ces deux cas, je ne crois pas qu'un ordonnanceur puisse migrer un processus d'un core à un autre.
Après, hors Soc, il y a aussi des cas comme la mémoire graphique partagée avec la RAM (CPU/GPU), sur certains chipsets (je ne sais pas si ça se fait encore trop), ou encore GPU/GPU (cas de Optimus avec Intel/NVidia).
Mais si c'est faisable, j'aimerai bien savoir aussi :). gUI qui bosse dans l'embarqué a sans doute plein de trucs à dire sur le sujet !
¹ par types différents j'entends "jeux d'instructions différents" ou "archi différentes".
[^] # Re: Plusieurs cas de figure
Posté par totof2000 . Évalué à 3. Dernière modification le 16 septembre 2023 à 20:50.
Voici un cas concrêt de carte qui dispose de CPU core différents :
la carte : https://www.st.com/resource/en/data_brief/nucleo-h745zi-q.pdf
le SOC : https://www.st.com/en/microcontrollers-microprocessors/stm32h755zi.html
La carte est disponible sur ce site
[^] # Re: Plusieurs cas de figure
Posté par totof2000 . Évalué à 2.
En regardant le datasheet du SOC, je lis ceci :
Du coup j'ai l'impression que l'OS ou le logiciel embarqué gère deux listes de taches différentes pour l'ordonnancement, ou utilise le coeur optimisé pour les taches en temps-réel pour exécuter le traîtement des interruptions liées à ces taches. Pour les CPU du même type que celui de mon téléphone, je ne sais pas ….
[^] # Re: Plusieurs cas de figure
Posté par Renault (site web personnel) . Évalué à 4.
Non, ce n'est pas comme ça que cela fonctionne.
Le but est que tu as un processeur classique, avec un système classique d'un côté (ici un Linux par exemple).
Et tu as à côté un processeur orienté temps réel avec un système temps réel dessus, souvent bien plus limité dans ses tâches et possibilités (dialoguer avec certains composants qui ont des contraintes temps réels, faire quelques calculs spécifiques, etc.). Souvent ils peuvent partager un bout de mémoire ou utiliser un bus spécifique pour échanger des données entre eux.
Linux dans ce cas ci n'est pas spécialement au courant du processeur M4 à côté, il initialise juste de quoi dialoguer avec, mais ce qui tourne dessus et comment n'est pas de son ressort.
[^] # Re: Plusieurs cas de figure
Posté par cg . Évalué à 2.
Les schémas pages 18 et 31 semblent montrer que ça ressemble au premier cas que je décris. Sur ce genre de SoC, le M7 pourrait faire tourner un Linux minimal, mais ça ne semble pas être le genre de carte faite pour faire tourner un système d'exploitation complet.
Je dirais que dans ce cas tu développes 2 firmwares, qui se parlent l'un l'autre par un bus série (SPI/UART/I2C). Mais je peux me tromper :-/ …
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.