W ostatnich latach Linus Torvalds nie miał czasu na samodzielne napisanie zbyt dużej ilości nowego, oryginalnego kodu dla jądra Linuksa, ponieważ obecnie zajmuje się głównie zarządzaniem programistami, dostarczaniem wnikliwych postów na listach dyskusyjnych i przeglądaniem kodu do włączenia do drzewa jądra wraz z powiązanymi zadaniami. Jednak dla Linuksa 6.4 udało mu się napisać trochę nowego kodu.
W zeszłym tygodniu Linus Torvalds połączył swoją własną gałąź „x86-rep-insns” z jądrem okna łączenia Linuksa 6.4. W kodzie Torvaldsa dla Linuksa 6.4 skupiono się na oczyszczeniu kodu kopii pamięci x86. Wyjaśnił w łączenie Gita:
“To czyści wiele naszego kodu kopiowania pamięci x86, szczególnie w przypadku dostępu użytkowników. Od dłuższego czasu naciskałem na wsparcie mikroarchitektury dla dobrego kopiowania i czyszczenia pamięci, i to było widoczne w tym, jak jądro agresywnie używało „rep movs” i „rep stos”, kiedy tylko było to możliwe.
I ta obsługa mikroarchitektury poprawiała się przez lata, do tego stopnia, że na nowoczesnych procesorach najlepszą opcją dla kopii pamięci które stałoby się wywołaniem funkcji (w przeciwieństwie do czegoś, co można po prostu przekształcić w indywidualne instrukcje „mov”), teraz zamiast tego należy wstawić sekwencję instrukcji łańcuchowych.
Jednak ma to sens tylko wtedy, gdy mamy nowoczesne znaczniki tego: możliwości x86 FSRM i FSRS („Fast Short REP MOVS/STOS”).
To czyści więc wiele naszego historycznego kodu, pozbywa się starszego użycia znaczników („REP_GOOD” i „ERMS”) z przypadków memcpy/memset i zastępuje z tą współczesną rzeczywistością. Zauważ, że REP_GOOD i ERMS są nadal używane w znanych dużych przypadkach (tj. kopiowanie i czyszczenie strony).
Powodem, dla którego wiele z tego kończy się na dostępie do pamięci użytkownika, jest to, że normalne przypadki w jądrze są wykonywane przez kompilator (__builtin_memcpy() i __builtin_memset()) i dochodzimy do punktu, w którym możemy użyć nasze przepisywanie instrukcji w celu wstawienia tych, które mają być instrukcjami łańcuchowymi, będzie wymagało wsparcia kompilatora.
W przeciwieństwie do tego, funkcje akcesorów użytkownika są całkowicie kontrolowane przez kod jądra, więc możemy je dowolnie zmieniać.”
Okno scalania Linuksa 6.4 pozostaje otwarte do następny weekend z dalszym publikowaniem kodu funkcji.