In den letzten Jahren hatte Linus Torvalds nicht die Zeit, zu viel originellen neuen Code für den Linux-Kernel selbst zu schreiben, da er heutzutage hauptsächlich Entwickler verwaltet, aufschlussreiche Mailinglisten-Posts liefert und Code zum Zusammenführen in den Kernel-Baum zusammen mit verwandten Aufgaben überprüft. Für Linux 6.4 hat er es jedoch geschafft, etwas neuen Code zu schreiben.
Letzte Woche hat Linus Torvalds seinen eigenen”x86-rep-insns”-Zweig mit dem Kernel für das Zusammenführungsfenster von Linux 6.4 zusammengeführt. Der Fokus von Torvalds’Code für Linux 6.4 liegt auf der Bereinigung des x86-Speicherkopiecodes. Er erklärte in die Git-Zusammenführung:
“Dies bereinigt einen Großteil unseres x86-Speicherkopiercodes, insbesondere für Benutzerzugriffe. Ich habe lange Zeit auf die Unterstützung der Mikroarchitektur für gutes Kopieren und Löschen des Speichers gedrängt, und das war es auch sichtbar daran, wie der Kernel wann immer möglich’rep movs’und’rep stos’aggressiv verwendet hat.
Und diese Unterstützung der Mikroarchitektur hat sich im Laufe der Jahre verbessert, bis zu dem Punkt, an dem moderne CPUs die beste Option für eine Speicherkopie sind das zu einem Funktionsaufruf werden würde (im Gegensatz zu etwas, das einfach in einzelne’mov’-Anweisungen umgewandelt werden kann), ist jetzt stattdessen die String-Anweisungssequenz einzufügen.
Das macht jedoch nur Sinn, wenn wir es getan haben die modernen Marker dafür: die x86 FSRM-und FSRS-Fähigkeiten (“Fast Short REP MOVS/STOS”).
Das bereinigt also einen Großteil unseres historischen Codes, entfernt die alte Markierungsverwendung (“REP_GOOD”und”ERMS”) aus den memcpy/memset-Fällen und ersetzt es mit dieser modernen Realität. Beachten Sie, dass REP_GOOD und ERMS am Ende immer noch von den bekannten großen Fällen verwendet werden (dh Kopieren von Seiten und Löschen).
Der Grund, warum sich vieles davon um Benutzerspeicherzugriffe dreht, ist, dass die normalen In-Kernel-Fälle vom Compiler erledigt werden (__builtin_memcpy() und __builtin_memset()) und zu dem Punkt kommen, an dem wir verwenden können Unser Umschreiben von Anweisungen, um diese als String-Anweisungen zu inlinen, erfordert etwas Compiler-Unterstützung.
Im Gegensatz dazu werden die Benutzerzugriffsfunktionen alle vollständig vom Kernel-Code gesteuert, sodass wir diese beliebig ändern können.”
Das Zusammenführungsfenster von Linux 6.4 bleibt geöffnet, bis nächstes Wochenende mit weiteren Feature-Codes, die weiterhin veröffentlicht werden.