Piratage du ramasse-miettes Go : stockage de pointeurs depuis l’assembleur

2025-06-23
Piratage du ramasse-miettes Go : stockage de pointeurs depuis l’assembleur

Cet article explore les complexités de la manipulation de pointeurs Go à partir de code assembleur, en se concentrant sur l’interaction cruciale avec le ramasse-miettes de Go. La manipulation directe des pointeurs nécessite d’informer explicitement le GC à l’aide de fonctions telles que `runtime.gcWriteBarrier2` et `runtime.writeBarrier` pour éviter les conflits et les pannes éventuelles. L’article aborde également le défi de l’allocation de mémoire alignée sur 128 bits pour une utilisation optimale des instructions AVX, en présentant une solution astucieuse. Cependant, il met en garde contre la dépendance aux fonctions internes du runtime, car leur disponibilité peut changer dans les futures versions de Go.

Lire plus
Développement Assembleur Go

Repousser les limites des pipes Linux : de 3,5 GiB/s à 62,5 GiB/s

2025-06-22
Repousser les limites des pipes Linux : de 3,5 GiB/s à 62,5 GiB/s

Cet article explore l’implémentation des pipes Unix sous Linux en optimisant itérativement un programme de test qui écrit et lit des données via un pipe. En partant d’un programme simple atteignant un débit d’environ 3,5 GiB/s, l’auteur améliore ses performances de vingt fois grâce à plusieurs étapes d’optimisation. Les principales améliorations consistent à utiliser les appels système `vmsplice` et `splice` pour éliminer la copie de données, à exploiter les pages gigantesques pour réduire la surcharge de pagination et à utiliser des boucles chargées pour minimiser les coûts de synchronisation. Le processus est détaillé avec des exemples de code et une analyse des performances à l’aide de l’outil `perf` de Linux.

Lire plus
Développement