L’appel système”RSEQ”des séquences redémarrables a fusionné il y a quelques années dans le noyau Linux et est maintenant utilisé par la bibliothèque GNU C et ses amis pour des opérations plus rapides dans l’espace utilisateur sur les données par processeur. L’année prochaine, Linux 6.3 devrait apporter des ajouts notables au support RSEQ.
En évitant les opérations atomiques dans des cas tels que l’incrémentation des compteurs par processeur, la modification des verrous d’attente par processeur, la lecture/écriture dans les tampons circulaires par processeur, etc., les séquences redémarrables peuvent offrir un avantage en termes de performances avec d’excellents résultats de référence.
Mathieu Desnoyers, qui a dirigé une grande partie des efforts du RSEQ, a récemment travaillé à étendre l’ABI Séquences redémarrables pour exposer les champs ID de nœud NUMA, mm_cid et mm_numa_cid. Desnoyers a expliqué avec la série de correctifs :
Le champ ID de nœud NUMA permet d’implémenter un getcpu(2) plus rapide dans la libc.
L’identifiant de concurrence par carte mémoire (mm_cid) permet une mise à l’échelle idéale (vers le bas ou vers le haut) des structures de données par processeur de l’espace utilisateur. Les identifiants de concurrence alloués dans une carte mémoire sont suivis par le planificateur, qui prend en compte le nombre de threads exécutés simultanément, considérant ainsi implicitement le nombre de threads, l’affinité cpu, les cpusets s’appliquant à ces threads et le nombre de cœurs logiques sur le système.
L’identifiant de concurrence compatible NUMA (mm_numa_cid) est similaire à mm_cid, sauf qu’il garde une trace des identifiants de nœud NUMA auxquels chaque cid a été associé. Sur les systèmes NUMA, lorsqu’un ID de simultanéité compatible NUMA est observé par l’espace utilisateur comme étant associé à un nœud NUMA, il est garanti qu’il ne changera jamais de nœud NUMA à moins qu’un changement de configuration NUMA au niveau du noyau ne se produise. Ceci est utile pour les structures de données par processeur compatibles NUMA exécutées dans des environnements où un processus ou un ensemble de processus appartenant à cpuset sont épinglés à un ensemble de cœurs appartenant à un sous-ensemble de nœuds NUMA du système.
En particulier, la possibilité de getcpu() plus rapide est particulièrement utile pour les utilisateurs de la glibc.
Depuis ce matin, le code introduisant l’ABI RSEQ extensible, ajoutant ces nouveaux champs et d’autres améliorations RSEQ ont été mis en file d’attente dans la branche sched/core de TIP. Avec la fenêtre de fusion Linux 6.2 derrière nous, le référentiel TIP Git commence à mettre en file d’attente diverses modifications de fonctionnalités à tour de rôle pour les envoyer dans la fenêtre de fusion Linux 6.3 une fois qui s’ouvre dans deux mois.
Ces ajouts RSEQ peuvent être vérifiés via le branche sched/core.
