Saviez-vous que les sauvegardes Time Machine de votre Mac ne débutaient pas précisément toutes les 60 minutes ? En théorie, la sauvegarde est mise à jour toutes les heures, mais dans les faits, elle est parfois en avance ou en retard de quelques minutes. Ce n’est pas un bug, c’est voulu : depuis macOS Sierra, la décision de lancer ou de retarder une sauvegarde dépend de Grand Central Dispatch (GCD).
Cette technologie est présente dans le système d’Apple depuis 2009 et Snow Leopard (et iOS 4 en 2010). GCD facilite la gestion des processeurs multi-core qui sont la norme depuis plus de dix ans pour les Mac. Avant son arrivée, les développeurs de chaque app devaient gérer tous les cœurs à disposition pour optimiser leurs logiciels. C’était une tâche difficile et très peu d’apps le faisaient et encore moins le faisaient correctement.
C’est pourquoi Apple a pris les choses en main avec GCD, une technologie qui met en parallèle les tâches au sein d’un programme et au sein du système d’exploitation. En fonction des besoins et des ressources disponibles, les tâches sont positionnées et programmées sur un cœur ou sur un autre. L’idée étant d’éviter les ralentissements en répartissant la charge sur tous les cœurs, notamment pour éviter le blocage complet de l’interface (la fameuse roue colorée de macOS).
Le principe de GCD est facile à saisir instinctivement. Néanmoins, Quand on essaie de comprendre comment il fonctionne concrètement, c’est une autre paire de manches. Le système est devenu extrêmement sophistiqué au fil des années et la prise de décision dépend d’un si grand nombre de critères que GCD apparaît comme une boîte noire pour la majorité des utilisateurs et même pour les développeurs. En particulier, la gestion de la priorité, pour savoir quelle tâche doit être exécutée en premier, est très difficile à comprendre.
macOS compte toujours plus sur ce système de gestion de tâches et c’est tout particulièrement le cas avec El Capitan et Sierra. Certains bugs de ces systèmes sont sans doute liés à GCD, puisqu’il prend en charge de plus en plus de fonctions du système. Les coupures de Bluetooth que l’on observe parfois avec Sierra sont peut-être associées à GCD plutôt qu’aux pilotes eux-mêmes.
Pour en revenir à Time Machine, un bug rare (le Mac ne devait pas entrer en veille pendant plusieurs jours de suite) corrigé avec macOS 10.12.4 pouvait bloquer complètement les sauvegardes automatiques. GCD est, au moins en partie, responsable : c’est lui qui lance une sauvegarde automatique, et non plus le processus historique launchd
. Ce choix a permis à Apple d’optimiser encore davantage son système de sauvegarde et le choix d’initier ou de retarder une mise à jour dépend aussi de votre utilisation du Mac.
Une heure après la sauvegarde précédente, macOS essaie de deviner ce que vous faites avec votre ordinateur pour décider de lancer une nouvelle sauvegarde ou la retarder de quelques minutes. Cela passe par l’utilisation du processeur, naturellement, mais ce n’est pas le seul critère. GCD a été développé avec l’optimisation de l’autonomie en tête et le lancement de la sauvegarde dépend aussi d’autres choses certainement liés à l’état de la batterie sur les portables.
Cette sophistication permet d’améliorer les performances de macOS, mais elle complique au passage la recherche face à un bug. Pour essayer de mieux comprendre le fonctionnement de GCD, DispatchView est un utilitaire gratuit qui filtre l’historique de macOS (les logs) pour n’afficher que ce qui concerne GCD. Il affiche l’information sur deux colonnes : à gauche, la liste des messages envoyées par le Duet Activity Scheduler (DAS), le composant qui détermine la priorité de chaque tâche ; à droite, la liste Centralized Task Scheduling (CTS) qui exécute ou programme les tâches en fonction de cette priorité.
L’interface est rudimentaire et les informations remontées par macOS ne sont pas toujours très lisibles. Mais en cas de problème lié à GCD, cet outil peut servir à déterminer la cause. Sur la capture d’écran, on voit à droite que la sauvegarde Time Machine a été initiée grâce à ce message :
2017-05-11 10:01:39.242046+0200 localhost UserEventAgent[52]: (com.apple.cts) [com.apple.xpc.activity.All] DAS told us to run com.apple.backupd-auto
On peut alors chercher dans la colonne de gauche la décision du DAS en retrouvant à peu près la même heure. Les messages ne sont pas explicites, mais vous verrez parfois des tâches qui sont suffisamment importantes et qui vont ainsi être exécutées par le CTS :
2017-05-11 10:01:39.240029+0200 localhost DuetHeuristic-BM[109]: (DuetActivitySchedulerDaemon) [com.apple.duetactivityscheduler.scoring] '<private>' CurrentScore: 0.931058, ThresholdScore: 0.780057 DecisionToRun:1
Et parfois, des tâches qui ne sont pas suffisamment importantes et qui ne sont pas exécutées. Ce qui revient à retarder la tâche en question et éventuellement la relancer quelques secondes ou minutes plus tard selon les cas. Voici à quoi cela ressemble :
2017-05-11 10:01:39.238408+0200 localhost DuetHeuristic-BM[109]: (DuetActivitySchedulerDaemon) [com.apple.duetactivityscheduler.scoring] <private>:[
<private> ] sumScores:29.020000, denominator:29.020000, FinalDecision: Must Not Proceed FinalScore: 0.000000}
Seuls les développeurs au sein d’Apple qui travaillent sur Grand Central Dispatch pourraient comprendre la logique du DAS et savoir pourquoi une tâche est importante ou non. Cet utilitaire ne vous aidera pas vraiment, mais il offre une plongée fascinante dans l’envers du décor pour les plus curieux.
Et si vous voulez aller plus loin encore, Apple propose de nombreuses sessions techniques sur GCD à cette adresse.