Forum général.général Programmation des CPU/SOC contenant plusieurs coeurs de type différents

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
4
16
sept.
2023

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  . É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  . É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  . Évalué à 2.

        En regardant le datasheet du SOC, je lis ceci :

        3.1 Dual Arm ® Cortex ® cores

        The industrial STM32H755xI devices embed two Arm® cores, a Cortex®-M7 and a Cortex®-
        M4. The Cortex®-M4 offers optimal performance for real-time applications while the
        Cortex®-M7 core can execute high-performance tasks in parallel.

        The two cores belong to separate power domains. This allows designing gradual high-
        power efficiency solutions in combination with the low-power modes already available on all
        STM32 microcontrollers.

        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  (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  . É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.