A Linux követi a Windows példáját: alapkövetelménnyé válik egy régi, de kritikus CPU funkció

Több mint egy évtizeddel a Microsoft után a Linux kernel is kötelezővé teszi a Time Stamp Counter (TSC) támogatását az x86-os processzoroknál, lezárva ezzel egy korszakot a rendkívül régi hardverek támogatásában.

Megosztom
A Linux követi a Windows példáját: alapkövetelménnyé válik egy régi, de kritikus CPU funkció

A Linux kernel fejlesztői nemrég egy aprónak tűnő, de történelmi jelentőségű változtatást véglegesítettek: a Time Stamp Counter (TSC) immár hivatalosan is kötelező hardveres követelmény az x86-os processzorok esetében. Ezzel a Linux végre követte a Microsoft évtizedes gyakorlatát, amely már régóta ezt a funkciót használja a nagy felbontású időzítés alapjaként a Windows rendszerekben.

Mi az a TSC és miért olyan fontos?

A Time Stamp Counter (TSC) egy speciális 64 bites regiszter, amely processzorszámlálóként funkcionál, és már az Intel Pentium korszak óta jelen van a processzorokban. A TSC kiválóan alkalmas az eltelt idő rendkívül precíz, úgynevezett nagy felbontású (high-resolution) mérésére.Mivel ez egy közvetlenül a CPU-ban található regiszter, a kiolvasása (például az RDTSC és RDTSCP utasításokkal) nagyságrendekkel gyorsabb, mint az alaplapra integrált platform-időzítők, mint például a HPET (High Precision Event Timer) vagy az ACPI PM (Power Management) timer használata. A modern Intel és AMD processzorok ma már kivétel nélkül rendelkeznek 64 bites TSC-vel, amelyet a teljesítményoptimalizálás miatt a szoftverek is előszeretettel használnak.

Miért most vált kötelezővé a Linuxban?

Bár a TSC évtizedek óta létezik, a Linuxnak eddig fenntartania kellett azokat a kódrészleteket, amelyek a TSC-vel nem rendelkező, vagy a megbízhatatlan TSC-implementációval bíró processzorokat kezelték. Ez a "technikai adósság" nagyrészt abból fakadt, hogy a kernel egészen az i486-os processzorokig visszamenőleg biztosította a kompatibilitást.A helyzet azonban drasztikusan megváltozott: a Linux 7.0 hivatalosan is eltávolította az Intel 486 processzorok támogatását, majd a következő fejlesztési ciklusban kikerültek azok a régi CPU-k is, amelyek megakadályozták a TSC univerzálisként kezelését. Mivel ezek a régi hardverek végleg kikerültek a támogatott eszközök köréből, az x86/cpu: Make CONFIG_X86_TSC unconditional nevű commit immár feleslegessé tette a régi konfigurációs logikákat. A kernel mostantól biztonsággal feltételezheti, hogy minden támogatott x86-os processzor rendelkezik TSC-vel.

Hogyan csinálta ezt eddig a Windows?

Érdekesség, hogy a Microsoft sokkal korábban eljutott erre a pontra, bár a Windows megközelítése némileg eltérő. A Windows 2000 és XP óta elérhető QueryPerformanceCounter (QPC) régebbi rendszereken még problémákba ütközhetett a nem invariáns vagy szinkronizálatlan TSC-k miatt, így a Windows ilyenkor a HPET vagy ACPI PM időzítőkhöz nyúlt vissza.A Windows 8 és 8.1 (valamint a nekik megfelelő szerver verziók) óta azonban a TSC a teljesítménymérő számláló (performance counter) elsődleges alapja. A Microsoft dokumentációja ugyan még mindig említi a fallback opciókat, és a fejlesztőket is óva inti a TSC közvetlen olvasását (az absztrakciós réteg és a virtualizáció miatt a QPC használatát javasolják), a TSC előnyei megkérdőjelezhetetlenek.A Microsoft mérései szerint egy TSC-alapú QPC lekérdezése mindössze tíz- vagy száz nagyságrendű CPU ciklusba kerül, míg az alaplapra támaszkodó időzítők használata nagyjából 0,8-1,0 mikroszekundumos késleltetést jelent – ami szoftveres szinten, különösen nagy terhelésnél, óriási különbség. Ráadásul a TSC-alapú QPC megússza a kernel tranziciót (átmenetet a user-space és a kernel-space között), ami elkerülhetetlen, ha a Windowsnak a HPET-et vagy a PM timert kell használnia.

Egy korszak lezárul

A Linux tehát évekig, sőt évtizedekig detektálta, kalibrálta és kerülgette a TSC megbízhatósági problémáit. A mostani lépés valójában nem arról szól, hogy a Linux hirtelen egy olyan funkcióra kezdjen el támaszkodni, ami a modern gépekből hiányzik. Épp ellenkezőleg: arról van szó, hogy végre eltávolításra kerül az a rengeteg örökölt (legacy) kompatibilitási kód, amelyre már egyszerűen nincs szükség.Ezzel a lépéssel a Linux kernel ismét egy kicsit karcsúbb és modernebb lett, egyúttal lezárva a rendkívül régi x86-os hardverek támogatásának egyik utolsó fejezetét.

Hirdetés / Banner

Kiemelt ajánlat

További cikkek

Hirdetés