Comment l’iPhone a appris au Mac à mieux utiliser ses cœurs

Nicolas Furno |

Si les Mac équipés d’un Apple M1 semblent aussi rapides, ce n’est pas seulement parce que la puce créée par Apple est étonnamment puissante. C’est aussi parce que les développeurs de macOS ont exploité pleinement ses caractéristiques pour optimiser le système d’exploitation des Mac. Même si le CPU de huit cœurs intégré au M1 n’est pas plus puissant que les meilleurs CPU d’Intel, cette optimisation peut faire la différence en usage courant.

Pour comprendre pourquoi, il faut s’intéresser à un concept central pour tout système d’exploitation multitâche : le QoS, pour « Quality of Service ». Cette qualité de service permet au système de prioriser les tâches qu’il doit effectuer, lancer en premier les tâches prioritaires et leur accorder une part importante des ressources ; retarder les tâches secondaires et leur laisser une part moins importante des capacités de calcul. Si une app indique qu’une tâche est importante, elle sera traitée au plus vite et avec le maximum de ressources. Au contraire, si elle signale qu’elle ne l’est pas, le système pourra la mettre en attente et la traiter plus lentement.

Ce concept général n’est pas nouveau, mais il y a une différence fondamentale entre les CPU Intel et les processeurs Apple Silicon. Dans l’univers Intel, les cœurs sont symétriques, c’est-à-dire qu’ils sont tous identiques. Ils ont la même capacité, tournent tous à la même fréquence et rien ne permet de les distinguer. Dans l’Apple M1, ce n’est pas le cas : ses cœurs sont asymétriques, puisqu’il y a des cœurs puissants et d’autres économes.

avatar Faabb | 

Merci pour cet article!

avatar Kin Sapalot | 

Très intéressant ! Et cela prouve bien une fois de plus que la puissance brute ne fait pas tout, loin de là…

avatar horatius | 

J’aime bien ces articles qui font comprendre des trucs auquel normalement je ne comprends rien.

avatar Lucas | 

@horatius

Pareil ! Ça suffit à justifier l’abonnement au Club iGen pour moi !

avatar iftwst | 

Merci Nicolas pour cet article intéressant.

Peut être aurais tu pu aborder, si cela n'était pas trop technique, comment l'iphone a appris au mac à mieux utiliser ses coeurs et aussi être toujours plus performant que les autres CPU ARM pourtant eux aussi à coeur asymétriques existants (des mobiles android) et n'en doutons pas, de futurs PC au moins portables.

avatar David Finder | 

@iftwst

Bein c’est ce qui est expliqué, en fond, dans l’article, non ?
En commençant par iOS, Apple a appris et à transféré ce savoir sur ses systèmes de bureau avec Big Sur.
Et quand Nicolas parle d’intégration matérielle/logicielle, là voilà l’explication sur la réactivité d’iOS par rapport aux autres systèmes, comme Androïd par exemple.
Apple maîtrise le matériel et le logiciel.

Tout est dit dans l’article, enfin c’est comme ça que je le comprends.

Apple maîtrise la chaîne d’un bout à l’autre. Et c’est bien grâce à iOS qu’on en est là avec les Mac M1 😉

avatar mne | 

@iftwst

Il y a eu de nombreux articles sur le club sur les processeurs apple. J’ai souvenir notamment qu’Apple avait fait des choix à contre courant de l’industrie sur la dotation en mémoire cache qui permettait une meilleure réactivité de l’os

avatar Nicolas Furno | 
avatar Rifilou | 

Qu’est-ce qu’il y a comme autres configurations asymétriques que cœurs économes vs puissants ?

avatar Rifilou | 

Très bon article, merci!

avatar David Finder | 

Superbe article.
Merci beaucoup !

avatar Florent Morin | 

Excellent article. 👍

Petite note historique concernant GCD.

Avant, c’était des threads POSIX. 8 coeurs = 8 threads si 1 app est lancée, 4 threads / app si 2 apps sont lancées, etc.

Avec GCD, c’est reparti par le noyau en fonction des besoins de chaque app. Ça a bien boosté les performances. ^^

avatar Lucas | 

Impressionnant travail et passionnant article, bravo Apple et merci MacG !

avatar Krounch | 

Article très intéressant. Merci

avatar cecile_aelita | 

Excelent article!
C’est ce genre d’article qui justifie sans soucis l’abonnement !!

avatar imrfreeze | 

👏🏻 l’article 😊

avatar hougoul | 

Pas vraiment convaincu par l’article.
Apple pourrait très bien faire de même sur Intel en choisissant de dispatcher les threads non prioritaires sur un seul core. (Je rappelle que les systèmes multiprocess existent depuis bien avant l’existence des multiprocesseurs pour le grand public).
C’est ce que fais Microsoft sur la Xbox (8 cœurs mais 2 réservés à l’OS)
L.instabilité des résultats sur Intel est dû au fait que la fréquence du CPU n’est pas stable au contraire du M1.

La rapidité du M1 est surtout du à son incroyable performance en monothread.
La majorité des applications ne sont pas capables d’utiliser correctement les multicoeurs des CPU.
Même les applications de 3D, retouche photos… ont beaucoup de tâches qui ne sont pas, très difficiles ou inutiles à paralléliser (// à un coût et suivant le cas il peut être plus rapide de traiter la tâche en mono qu’en //)

avatar Florent Morin | 

@hougoul

Côté développeur, c’est clair que la moindre app gère plusieurs tâches concurrentes : cette gestion est déléguée aux frameworks Apple. (Reseau, parsing XML, notifications in-app et autres événements, etc)

L’arrivée de GCD en remplaçant des threads POSIX a changé la donne en termes de performances par une meilleure répartition de la charge côté OS, mais aussi par une simplification du code. C’est devenu relativement facile. En tout cas, incroyablement moins complexe que les threads POSIX ! Et aussi plus léger en termes de charge CPU.

D’ailleurs, il y a eu immédiatement un boost des performances quand les développeurs l’ont adopté.

Le framework Combine simplifie énormément le traitement des tâches concurrentes sur les entrées-sorties. C’est assez haut niveau, mais c’est bien pratique.

Et Swift 5.5 va apporter une simplification supplémentaire côté langage. Tout en sécurisant les accès concurrents qui sont souvent sources de crashs ou de chute des performances. Le genre de chose habituellement difficile à débogguer.

Ça fonctionne très bien avec Intel. Mais c’est clairement plus abouti sur Apple Silicon qui intègre le principe de QoS directement sur les puces.

Pour avoir vécu ces évolutions, l’article en bien en phase avec la réalité.

avatar hougoul | 

@FloMo

L’article sous entend que c’est grâce à l’architecture hybride que la réactivité est meilleur. Moi je dis non, ils auraient pu obtenir le même résultat avec une architecture de 5 ou 6 cœur haute performance.
La seule chose que l’architecture hybride permet et d’optimiser la qualité de service rendu avec la consommation électrique des puces.

Par contre ce qui fait réellement la différence est le fait d’avoir mis sur puce une partie de la gestion du dispatch des threads qui est géré en software sur Intel.

Et au final ce qui est le plus important c’est la performance mono cœur du CPU car tout fini par être calculé sur un cœur.
D’ailleur ce n’est pas le seul CPU à être comme ça, pendant longtemps les androïdes avaient plus de cœur, aussi une architecture hybride et étaient moins réactif.

CONNEXION UTILISATEUR