Selon les développeurs de FEX-Emu, émuler le modèle de fonctionnement de la mémoire d’un ordinateur est bien plus difficile qu’on ne le pense lorsque les caches et plusieurs processeurs entrent en jeu. Le modèle Total Store Ordering de x86 offre de fortes garanties quant à la visibilité des opérations mémoire, tandis que le modèle plus faible d’ARM autorise leur réordonnancement pour améliorer les performances. Même si les émulateurs peuvent compenser cela au moyen d’opérations acquire/release, le coût augmente ; les extensions LRCPC et le mode TSO compatible avec x86 d’Apple Silicon réduisent cette surcharge.
Les accès mal alignés et les opérations atomiques aggravent les problèmes. FEX peut détecter les erreurs d’alignement et ajouter des barrières au code traduit ; les opérations split-lock, quant à elles, peuvent devenir des centaines, voire des milliers de fois plus lentes que la normale en faisant appel au noyau et aux gestionnaires de signaux. Les cœurs Oryon de Qualcomm et les optimisations de Valve pour Linux atténuent certains de ces problèmes.
Les équivalents ARM de la mémoire write-combined écrite par le GPU restent incomplets ; dans le pire des cas, la bande passante peut chuter de 800×, faisant passer les jeux sous la barre de 1 FPS. Les systèmes UMA donnent de meilleurs résultats. L’émulation consiste moins à traduire des instructions qu’à reproduire les hypothèses architecturales.
Pourquoi c’est important
Cette différence technique complique le maintien simultané de la compatibilité et des performances dans les émulateurs qui exécutent des logiciels x86 sur du matériel basé sur ARM. Comme le problème ne se limite pas à la traduction des instructions du processeur, des mécanismes tels que l’utilisation multicœur, les opérations atomiques et l’accès à la mémoire du GPU peuvent produire des résultats différents selon le matériel. Les résultats dépendent donc non seulement du processeur et de l’architecture mémoire utilisés, mais aussi des optimisations appliquées par le système d’exploitation et l’émulateur ; Apple Silicon, Oryon, les optimisations de Valve et les architectures UMA montrent qu’il est possible de réduire cet écart. La question qui reste ouverte est de savoir pour quelles charges de travail ces améliorations seront suffisantes et dans quelle mesure le coût supplémentaire nécessaire à la compatibilité pourra être maintenu.