Ces dernières années, Linus Torvalds n’a pas eu le temps d’écrire lui-même trop de nouveau code original pour le noyau Linux, gérant principalement les développeurs, fournissant des messages perspicaces sur la liste de diffusion et révisant le code à fusionner dans l’arborescence du noyau avec les tâches connexes. Pour Linux 6.4, cependant, il a réussi à écrire un nouveau code.
La semaine dernière, Linus Torvalds a fusionné sa propre branche”x86-rep-insns”avec le noyau pour la fenêtre de fusion Linux 6.4. L’accent mis sur le code de Torvalds pour Linux 6.4 est sur le nettoyage du code de copie de la mémoire x86. Il a expliqué dans la fusion Git :
“Cela nettoie une grande partie de notre code de copie de mémoire x86, en particulier pour les accès des utilisateurs. Je fais pression depuis longtemps pour un support microarchitectural pour une bonne copie et un bon nettoyage de la mémoire, et ça a été visible dans la façon dont le noyau a utilisé de manière agressive’rep movs’et’rep stos’chaque fois que possible.
Et ce support micro-architectural s’est amélioré au fil des ans, au point où sur les processeurs modernes la meilleure option pour une copie de mémoire qui deviendrait un appel de fonction (au lieu d’être quelque chose qui peut simplement être transformé en instructions’mov’individuelles) est maintenant d’intégrer la séquence d’instructions de chaîne à la place.
Cependant, cela n’a de sens que lorsque nous avons les marqueurs modernes pour cela: les capacités x86 FSRM et FSRS (“Fast Short REP MOVS/STOS”).
Cela nettoie donc une grande partie de notre code historique, se débarrasse de l’utilisation des marqueurs hérités (“REP_GOOD”et”ERMS”) des cas memcpy/memset, et remplace avec cette réalité moderne. Notez que REP_GOOD et ERMS finissent toujours par être utilisés par les grands cas connus (c’est-à-dire la copie de page et l’effacement).
La raison pour laquelle une grande partie de cela finit par concerner les accès à la mémoire de l’utilisateur est que les cas normaux dans le noyau sont effectués par le compilateur (__builtin_memcpy() et __builtin_memset()) et arrivent au point où nous pouvons utiliser notre réécriture d’instructions pour intégrer celles qui seront des instructions de chaîne nécessitera un support du compilateur.
En revanche, les fonctions d’accès utilisateur sont entièrement contrôlées par le code du noyau, nous pouvons donc les modifier arbitrairement.”
La fenêtre de fusion Linux 6.4 reste ouverte jusqu’à ce que le week-end prochain avec plus de code de fonctionnalité qui continue d’être publié.