Amélioration de la stabilité du client Steam sous Linux
(ttimo.typepad.com)Amélioration de la stabilité du client Steam
-
Contexte : la mise à jour du client Steam du 5 novembre a corrigé des plantages courants sous Linux. Parmi eux, le plus marquant concernait un changement dans la manière d’utiliser les fonctions
setenvetgetenv. -
Problème :
setenvest une API non sûre sous Linux, dont l’utilisation peut poser problème dans un environnement multithread. Après un appel àgetenv, des plantages comme SIGABRT peuvent survenir dans un autre thread. -
Solution :
- suppression de la plupart des appels à
setenv, avec une refactorisation pour transmettre l’environnement lors de la création du processus viaexecvpe. - mise en cache des appels afin de réduire la dépendance à
getenv. - pour les cas restants d’utilisation de
setenv, introduction d’un « gestionnaire d’environnement » qui préalloue au démarrage un tampon de valeurs suffisamment grand.
- suppression de la plupart des appels à
-
Résultat : ces changements ont fortement réduit la fréquence des occurrences de SIGABRT. Ce n’est toutefois pas une solution parfaite, et il subsiste un risque de plantage si des bibliothèques externes appellent
setenv. -
Plan futur : dans glibc, des recherches sont en cours pour résoudre ce problème en maintenant la sûreté asynchrone des signaux tout en synchronisant l’usage de
envp. Ce travail est complexe, mais l’objectif est de proposer à long terme une solution qui reste dans le cadre de la spécification POSIX.
1 commentaires
Avis Hacker News
Un correctif est à l’étude en raison de problèmes de stabilité de la pile graphique de Red Hat
getenvsoit incluse dans glibc 2.41setenvest déjà plus simple à traiter, car il ne libère pas les chaînes d’environnementunsetenvest complexe à cause des problèmes de concurrencegetenvest de préserver la sûreté vis-à-vis des signaux asynchronesvfork+execve, il est difficile d’éviter les fuites mémoire, ce qui rend controversées les modifications de la gestion de l’environnementReconnaissance que Steam fonctionne bien sous Linux
La meilleure approche est de lire les variables d’environnement au démarrage et de ne pas utiliser
setenvgetenv/setenvcomme mécanisme de messagerie IPC peut poser problèmeQuestion sur le fait de savoir si
setenvfait partie de l’API Linuxsetenvest défini par POSIX et implémenté en espace utilisateur, pas dans le noyau LinuxQuestion sur l’existence de cas où un programme appelle
setenvdans un thread et attend un effet dans un autre threadProblème où Steam se plaint de ne pas avoir de connexion
Les éclairages sur le client Steam et la programmation Linux sont intéressants
Résoudre le problème dans glibc pourrait nécessiter des compromis de fonctionnalité
Les performances de rendu du client Steam sont mauvaises lorsque la souris est dans la fenêtre
Il existe un bug de longue date dans le client Steam sous Linux