Ce este TSC și de ce kernelul Linux 7.2 îl cere acum obligatoriu

Dacă ai văzut știrea că „Linux cere acum TSC pentru a porni” și te-ai întrebat dacă calculatorul tău mai rulează Linux de mâine, răspunsul scurt este: da, merge în continuare, dacă nu ai un procesor din anii '90 timpurii. Citește mai jos să înțelegi ce s-a schimbat de fapt și de ce.

Ce este TSC?

TSC (Time Stamp Counter) este un registru hardware pe 64 de biți integrat direct în procesoarele x86, care se incrementează la fiecare ciclu de ceas al procesorului. Practic, este un contor intern de mare precizie care măsoară câte cicluri au trecut de la ultima resetare.

TSC-ul oferă o metodă de mare rezoluție pentru măsurarea timpului scurs și poate fi accesat mult mai rapid decât temporizatoarele de platformă, cum ar fi HPET (High Precision Event Timer) sau timerul ACPI PM (Power Management), deoarece este un simplu registru din procesor.

În termeni mai simpli: sistemul de operare trebuie să știe cu precizie cât timp a trecut între două evenimente. Poate face asta în mai multe feluri - poate întreba ceasuri externe din placa de bază (HPET, ACPI PM Timer), sau poate citi direct un registru din procesor. TSC-ul este cea de-a doua variantă, și este mult mai rapidă și mai precisă decât prima.

De când există TSC?

TSC a fost introdus de Intel în procesorul Pentium, lansat pe 22 martie 1993, ca un registru pe 64 de biți proiectat să ofere temporizare internă precisă prin numărarea ciclurilor CPU de la resetare. Cu alte cuvinte, dacă ai un procesor mai nou decât primul Pentium din 1993 - și aproape sigur ai - procesorul tău are TSC. Astăzi, fiecare procesor modern Intel și AMD are un TSC pe 64 de biți care poate fi citit folosind instrucțiunile RDTSC și RDTSCP.

Ce s-a schimbat în Linux 7.2?

Un patch recent în kernel, x86/cpu: Make CONFIG_X86_TSC unconditional, elimină ultima logică de configurare care permitea construirea unui kernel Linux x86 fără suport pentru TSC. Schimbarea este legată de ciclul de dezvoltare Linux 7.2.

Adică kernelul nu mai include codul de rezervă care gestiona procesoarele foarte vechi fără TSC. Dacă un procesor pornește kernelul 7.2 și nu are TSC, kernelul refuză să pornească.

Dar de ce tocmai acum? Acel cod a devenit bagaj mort pe măsură ce suportul pentru procesoarele vechi a fost eliminat treptat. Linux 7.0 a renunțat la suportul pentru Intel 486, iar ciclurile ulterioare de dezvoltare au eliminat alte cipuri vechi, inclusiv liniile AMD K5 și AMD Elan, care împiedicau tratarea TSC ca universal. Cu acel hardware legacy eliminat, dezvoltatorii de kernel pot acum presupune în siguranță că fiecare procesor x86 suportat are un TSC funcțional.

Asta înseamnă că Linux devine ca Windows 11 cu TPM 2.0?

Nu. Și această comparație circulă mult online, dar este inexactă.

Înainte să intrați în panică, aceasta nu este echivalentul Linux al cerinței TPM 2.0 din Windows 11. TSC există în procesoarele x86 din momentul în care Intel Pentium a fost lansat în 1993.

Efectul practic este limitat pentru PC-urile și serverele obișnuite: practic fiecare mașină x86 care rulează în prezent o distribuție curentă are deja un TSC. Schimbarea semnificativă este pentru dezvoltatori și un număr mic de instalații retro sau embedded, care pierd un alt fragment de cod de compatibilitate upstream pentru hardware din era pre-Pentium.

Cu Windows 11 și TPM 2.0 a fost altă situație: cerința a exclus procesoare perfect funcționale și relativ recente - Core i5-7xxx sau Ryzen 1000 - de la upgrade. Cerința TSC din Linux 7.2 exclude în practică hardware din urmă cu 30+ de ani.

Ce procesoare sunt afectate?

Practic niciun procesor pe care l-ai putea folosi zi de zi în 2026. Printre procesoarele afectate de această schimbare se numără AMD K5 și diverse modele de procesoare Cyrix - primul AMD K5 a fost introdus în 1996 pentru a concura cu Intel Pentium.

Dacă ai un Pentium 4, Core 2 Duo, orice Core iX, orice Ryzen, orice Athlon 64 sau mai nou - ai TSC. Dacă ai un 486, un AMD K5 original, sau un Cyrix din anii '90 - nu ai TSC, dar și kernelul Linux actual oricum nu mai suporta acel hardware de ceva vreme.

Un detaliu tehnic important

O mașină poate deține instrucțiunea și registrul, și totuși prezenta un contor pe care kernelul îl consideră nepotrivit pentru cronometrare fiabilă, din cauza defectelor de firmware, problemelor de sincronizare între procesoare, comportamentului la gestionarea consumului pe design-uri vechi, sau a particularităților de virtualizare. Noua cerință spune că un CPU x86 trebuie să aibă un TSC - ea nu elimină munca kernelului de a determina dacă acel TSC este stabil, sincronizat și utilizabil ca sursă de ceas.

Cu alte cuvinte, kernelul verifică în continuare calitatea TSC-ului după ce constată că există. Schimbarea din 7.2 elimină doar ramura de cod care spunea „ce facem dacă TSC lipsește cu totul”.

Cum poți verifica dacă procesorul tău are TSC?

Simplu, dintr-un terminal:

grep -o 'tsc[^ ]*' /proc/cpuinfo | head -1

Dacă apare tsc în output, ai TSC. Dacă vrei mai multe detalii:

grep -m1 'flags' /proc/cpuinfo | tr ' ' '\n' | grep -E 'tsc|constant_tsc|nonstop_tsc'

Prezența lui constant_tsc și nonstop_tsc înseamnă că TSC-ul tău funcționează la frecvență constantă și nu se oprește în stările de economie de energie - adică este de cea mai bună calitate pentru cronometrare.

Kernelul 7.2 nu apare mâine pe laptopul tău

Un lucru pe care mulți îl uită: kernelul Linux și distribuția pe care o folosești sunt două lucruri separate. Ubuntu, Debian, Fedora, Arch și celelalte nu livrează kernelul 7.2 automat peste noapte doar pentru că a fost lansat.

Distribuțiile stabile, cum ar fi Debian sau Ubuntu LTS, testează și integrează versiuni noi de kernel pe parcursul unor cicluri lungi - uneori durează luni, alteori mai mult de un an până ce o versiune nouă de kernel ajunge în depozitele stabile. Arch și Fedora se mișcă mai repede, dar și acolo există un proces de validare. Practic, până ce kernelul 7.2 ajunge implicit pe sistemul tău prin apt upgrade sau dnf upgrade, va mai trece timp considerabil, iar tu vei fi notificat ca de obicei prin procesul normal de actualizare.

Dacă nu actualizezi manual kernelul și nu compilezi unul singur, nu ai de ce să te îngrijorezi că mâine dimineață nu mai pornește sistemul.

Concluzie

Kernelul Linux 7.2 a făcut o curățenie în cod eliminând suportul pentru procesoare care nu au TSC - procesoare din prima jumătate a anilor '90. Nu este o cerință nouă de hardware pentru utilizatorii obișnuiți, ci sfârșitul unui efort de mai mulți ani de a renunța la suportul pentru hardware extrem de vechi. Dacă procesorul tău a fost fabricat după lansarea primelor procesoare Pentium, nu ai de ce să-ți faci griji.

Dacă rulezi Debian, Fedora, Arch, Ubuntu sau orice altă distribuție pe hardware din ultimii 25-30 de ani, nu se schimbă absolut nimic pentru tine.