Linux na x86 stawia na TSC. Znika zgodność z najstarszymi CPU

Linux wprowadza obowiązkową obsługę licznika TSC na platformie x86, co symbolicznie domyka epokę utrzymywania kompatybilności z najstarszymi procesorami tej architektury. Dzięki temu jądro może zostać uproszczone, bo odpada część mechanizmów przeznaczonych dla bardzo leciwego sprzętu.
procesor intelLinux zmienia wymagania procesorów
Źródło zdjęć: © unsplash
Oskar Ziomek

W jądrze Linuksa usunięto ostatnie elementy konfiguracji, które jeszcze pozwalały zbudować wariant x86 bez obsługi TSC. Od teraz wsparcie dla tego licznika jest traktowane jako domyślne i niepodważalne, ponieważ wszystkie procesory x86, które wciąż mieszczą się w zakresie wspieranych przez Linuksa, mają już tę funkcję.

TSC (Time Stamp Counter) to 64-bitowy rejestr obecny w procesorach od czasów Intel Pentium. Umożliwia bardzo precyzyjny pomiar upływu czasu, a jego przewaga polega na tym, że odczyt odbywa się bezpośrednio z CPU. W praktyce bywa to szybsze niż korzystanie z liczników i timerów platformowych, takich jak HPET czy licznik ACPI PM.

Przez wiele lat Linux zachowywał obsługę procesorów, które nie miały TSC albo nie potrafiły wykorzystywać go w sposób gwarantujący wiarygodne wyniki. To był efekt wyjątkowo długiego utrzymywania zgodności ze starym sprzętem x86, sięgającego jeszcze czasów i486. Z biegiem lat taka kompatybilność traciła jednak praktyczne znaczenie, a dodatkowy kod stawał się coraz mniej uzasadniony.


WIDEO
Sztuczna inteligencja wymyka się spod kontroli?


Przełom przyniósł Linux 7.0, który zakończył wsparcie dla procesorów Intel 486. W następnym cyklu rozwojowym usunięto kolejne układy, które blokowały przyjęcie założenia, że TSC jest powszechnie dostępny. W efekcie jądro może dziś wychodzić z założenia, że na x86 licznik TSC po prostu jest.

W zbliżonym kierunku wcześniej poszedł Microsoft. Windows od dawna korzystał z QueryPerformanceCounter jako licznika wysokiej rozdzielczości, a w sprzyjających warunkach opierał jego działanie na TSC. Jednocześnie pozostawiono możliwość przełączenia się na inny mechanizm pomiaru czasu w sytuacjach, gdy TSC nie spełniał wymaganych kryteriów.

Powód zmian jest przede wszystkim praktyczny: odczyt licznika bazującego na TSC to koszt rzędu dziesiątek do setek cykli procesora, podczas gdy alternatywne rozwiązanie oparte na timerze płyty głównej może pochłaniać około 0,8–1,0 mikrosekundy. Dla Linuksa nie jest to więc tyle nowy warunek sprzętowy, co konsekwentne porządkowanie kodu — w tym usunięcie jednego z najstarszych elementów warstwy zgodności.

Wybrane dla Ciebie
ZACZEKAJ! ZOBACZ, CO TERAZ JEST NA TOPIE