Skip to content

Kas tas 0.25 ir kodėl jis apskritai egzistuoja?

Jei kada nors atsidarei užduočių tvarkytuvę sistemoje „Windows” arba paleidai top komandą „Linux” terminale, tikriausiai pastebėjai keistą reiškinį – procesoriaus apkrova kartais rodo ne 0%, ne 100%, o kažkokius tarpinį skaičių. Ir kartais tas skaičius yra 0.25%. Arba 0.5%. Arba 1.75%. Tokie skaičiai atrodo lyg kažkas skaičiuotų labai tiksliai, bet kartu ir labai keistai.

Šis straipsnis – apie tai, kaip procesorius iš tikrųjų matuoja savo apkrovą, kodėl matome tokias smulkias reikšmes, ir ką reiškia tas keistas 0.25 proc., kurį kartais rodo sistema, kai ji tarsi “nieko nedaro”.

Procesorius niekada tikrai nemiega

Pirmiausia reikia sugriauti vieną mitą: procesorius niekada nėra 100% laisvas. Net kai kompiuteris stovi ant stalo, ekranas užgesęs, o tu gerai miegi – procesorius vis tiek kažką veikia. Jis tikrina klaviatūrą, ar nenuspausti mygtukai. Jis apdoroja laiko signalus. Jis valdo atminties valdymą. Jis stebi temperatūrą. Jis aptarnauja operacinę sistemą, kuri nuolat sukasi fone.

Bet kaip visa tai susijusi su tuo 0.25? Labai tiesiogiai.

Procesoriaus apkrova matuojama ne realiu laiku – tai būtų techniškai neįmanoma, nes pats matavimas užimtų resursus. Vietoje to, operacinė sistema naudoja laiko intervalų metodą: kas tam tikrą laikotarpį (paprastai kas 10-50 milisekundžių) sistema “pažiūri” į procesorių ir užsirašo – ką jis dabar daro? Dirba ar laukia?

Šis metodas vadinamas polling arba sampling. Ir būtent dėl jo atsiranda tie keisti 0.25 procentai.

Kaip procesorius skaičiuoja laiką: taktai ir branduoliai

Norėdami suprasti 0.25, turime trumpam pasinerti į procesorių architektūrą. Šiuolaikinis procesorius turi kelis branduolius (cores). Kiekvienas branduolys gali dirbti nepriklausomai. Jei tavo procesorius turi 4 branduolius, tai teoriškai gali vienu metu vykdyti 4 skirtingas užduotis.

Kai sistema rodo “bendrą” procesoriaus apkrovą, ji susumuoja visų branduolių apkrovą ir padalina iš jų skaičiaus. Taigi:

  • 4 branduolių procesorius, kurio vienas branduolys dirba 100%, o kiti 3 nieko nedaro = 25% bendra apkrova
  • 8 branduolių procesorius, kurio vienas branduolys dirba 100% = 12.5% bendra apkrova
  • 4 branduolių procesorius, kurio vienas branduolys dirba 1% = 0.25% bendra apkrova

Štai ir atsakymas į pagrindinį klausimą. Tas 0.25% dažniausiai reiškia, kad vienas branduolys iš keturių atliko labai nedidelę užduotį per matavimo intervalą. Arba visi keturi branduoliai atliko po labai mažą darbo dalį.

Bet tai dar ne viskas. Yra ir kitas mechanizmas, kuris dar labiau komplikuoja reikalus – ir daro juos dar įdomesnius.

CPU Idle States: kaip procesorius “miega” bet vis tiek dirba

Šiuolaikiniai procesoriai turi keletą miego būsenų, kurios vadinamos C-states (C0, C1, C2, C3 ir t.t.). Kuo didesnis skaičius, tuo gilesnė miego būsena, tuo mažiau energijos sunaudojama, bet tuo ilgiau užtrunka “prabusti”.

C0 – tai aktyvus darbas. C1 – procesorius sustabdė vykdymą, bet vis dar pasiruošęs greitai reaguoti. C6 – procesorius iš esmės išjungė didelę dalį savo grandinių ir laukia.

Kai sistema rodo 0.25% apkrovą, tai gali reikšti, kad procesorius didžiąją laiko dalį praleido C1 ar C3 būsenoje, o tik labai trumpą akimirką – C0 (aktyvaus darbo) būsenoje. Operacinė sistema apskaičiuoja šį santykį ir išveda procentą.

Praktiškai tai atrodo taip: per vieną sekundę procesorius gali “pabusti” šimtus kartų, atlikti keletą instrukcijų (patikrinti laikrodį, atsakyti į pertraukimą, atnaujinti ekraną), ir vėl “užmigti”. Kiekvienas toks pabudimas trunka mikrosekundes. Susumuoji visą tą aktyvų laiką ir gauni – 0.25% per sekundę.

Kas iš tikrųjų sukelia tą 0.25 proc. apkrovą?

Čia prasideda detektyvinis darbas. Jei matai 0.25% apkrovą ir nori suprasti, kas ją sukelia, reikia žinoti, kokie procesai paprastai “gyvena” fone ir nuolat “kanda” po truputį procesoriaus laiko.

Sisteminiai pertraukimai (System Interrupts) – tai signaliniai pranešimai iš aparatinės įrangos. Klaviatūra paspaudė mygtuką? Pertraukimas. Tinklo kortelė gavo paketą? Pertraukimas. Laikrodis “tikštelėjo”? Pertraukimas. Kiekvienas toks įvykis reikalauja procesoriaus dėmesio bent kelioms mikrosekundėms.

Kernel darbai – operacinės sistemos branduolys nuolat atlieka įvairias priežiūros funkcijas: valo atmintį, rūšiuoja procesų eilę, atnaujina sistemos laikrodį, tikrina įrenginių būseną.

Antivirusinė programinė įranga – tai vienas dažniausių kaltininkų. Net kai antivirusinė “nieko nedaro”, ji stebi failų sistemą, tikrina procesus, atnaujina duomenų bazes. Visa tai sukuria nuolatinį 0.1-0.5% foninį triukšmą.

Telemetrija ir atnaujinimų tikrinimas – „Windows” sistemoje yra daugybė procesų, kurie periodiškai “pabunda” ir patikrina, ar nėra naujų atnaujinimų, ar reikia siųsti statistiką į „Microsoft” serverius. Kiekvienas toks patikrinimas – kelios mikrosekundės procesoriaus laiko.

Naršyklės fone – jei turi atidarytą „Chrome” ar „Firefox”, net jei naršyklė minimizuota, ji vis tiek vykdo JavaScript skriptus puslapiuose, tikrina pranešimus, atnaujina turinį. Tai gali lengvai pridėti 0.5-2% nuolatinės apkrovos.

Kaip tai matuoti ir stebėti: praktinis vadovas

Jei nori pats paeksperimentuoti ir suprasti, kas vyksta tavo kompiuteryje, štai keletas konkrečių įrankių ir metodų.

„Windows” sistemoje:

Užduočių tvarkytuvė (Task Manager) yra geras pradinis taškas, bet ji rodo tik apytikrius duomenis. Kur kas geriau naudoti Process Explorer iš „Sysinternals” paketo – tai nemokama „Microsoft” priemonė, kuri rodo kur kas daugiau detalių, įskaitant tikslų kiekvieno proceso CPU laiką.

Dar galingesnis įrankis – Windows Performance Analyzer (WPA). Jis leidžia įrašyti sistemos veiklą ir vėliau analizuoti, kas tiksliai vyko kiekvieną milisekundę. Tai naudoja profesionalūs kūrėjai, kai reikia surasti paslėptus našumo praradimus.

Komandų eilutėje galima naudoti:

wmic cpu get loadpercentage

Ši komanda grąžina momentinę procesoriaus apkrovą. Jei ją paleisi kelis kartus iš eilės, pamatysi, kaip reikšmė šokinėja – tai ir yra tas sampling efektas, apie kurį kalbėjome.

„Linux” sistemoje:

Komanda top arba modernesnė htop rodo procesoriaus apkrovą realiu laiku. Bet tikslesniam matavimui geriau naudoti:

mpstat -P ALL 1

Ši komanda kas sekundę rodo kiekvieno branduolio apkrovą atskirai. Labai patogiai matosi, kaip skirtingi branduoliai apkrauti skirtingai.

Taip pat labai informatyvi komanda:

cat /proc/stat

Ji rodo neapdorotus skaičius – kiek taktų kiekvienas branduolys praleido dirbdamas, laukdamas, tvarkydamas pertraukimus. Iš šių skaičių operacinė sistema ir apskaičiuoja tuos procentus, kuriuos matome ekrane.

Kada 0.25 proc. turėtų kelti nerimą?

Dažniausiai – niekada. 0.25% apkrova yra visiškai normali ir sveika sistemos būsena. Tai reiškia, kad kompiuteris ramiai laukia tavo komandų, o fone vyksta tik minimalūs priežiūros darbai.

Tačiau yra situacijų, kai net maža nuolatinė apkrova gali būti problema:

Nešiojamieji kompiuteriai ir baterija – jei nešiojamasis kompiuteris nuolat rodo 1-2% apkrovą net “nieko nedarydamas”, tai reiškia, kad kažkas nuolat neleidžia procesoriui pereiti į gilesnę miego būseną. Rezultatas – baterija senka greičiau nei turėtų. Šiuo atveju verta patikrinti, kuris procesas neleidžia sistemai “giliai užmigti”. „Windows” sistemoje tam puikiai tinka komanda powercfg /sleepstudy, kuri generuoja išsamią ataskaitą apie energijos vartojimą.

Serveriai ir kritinės sistemos – jei serveris, kuris turėtų nieko nedaryti, nuolat rodo 0.5-1% apkrovą, tai gali reikšti, kad kažkoks procesas periodiškai “pabunda” ir atlieka kažką neplanuoto. Tai gali būti kenkėjiška programinė įranga, kuri slepiasi mažoje apkrovoje, arba blogai sukonfigūruotas cron darbas.

Realaus laiko sistemos – medicinos prietaisai, pramonės valdymo sistemos, garso apdorojimo įranga. Čia net 0.1% neplanuotos apkrovos gali sukelti vėlavimus, kurie yra nepriimtini. Tokioms sistemoms naudojamos specialios realaus laiko operacinės sistemos (RTOS), kurios garantuoja tikslų laiko valdymą.

Nuo tranzistorių iki procentų: kaip visa tai susiję

Šiuolaikiniame procesoriuje yra milijardai tranzistorių. „Apple M3 Pro” jų turi apie 37 milijardus. „Intel Core i9-14900K” – apie 6 milijardus. Kiekvienas tranzistorius gali būti “įjungtas” arba “išjungtas” – tai ir yra tas vienas bitas, mažiausia informacijos dalis.

Kai procesorius “dirba”, tranzistoriai keičia savo būseną milijardus kartų per sekundę. Kiekvienas perjungimas sunaudoja energiją ir išskiria šilumą. Kai procesorius “ilsisi” C6 būsenoje, didelė dalis tranzistorių tiesiog sustoja – jie nebeperjunginėjami, nebevartoja energijos.

Tas 0.25% apkrovos procentas iš esmės reiškia, kad per matavimo laikotarpį tik 0.25% galimo tranzistorių perjungimų iš tikrųjų įvyko. Likę 99.75% laiko tranzistoriai sėdėjo ramiai ir laukė.

Tai labai elegantiškas sprendimas, kurį inžinieriai išrado siekdami sutaupyti energiją. Ankstyvieji procesoriai (pavyzdžiui, „Intel 8086″ iš 1978 metų) neturėjo tokių miego būsenų – jie dirbo visu pajėgumu nuolat, nepriklausomai nuo apkrovos. Tai buvo labai neefektyvu energijos požiūriu.

Pirmosios energijos taupymo technologijos atsirado devintajame dešimtmetyje nešiojamiesiems kompiuteriams, kur baterijos resursas buvo kritiškai svarbus. Vėliau, augant duomenų centrams ir susirūpinus elektros sąnaudomis, tos pačios technologijos tapo svarbios ir staliniams kompiuteriams bei serveriams.

Kai 0.25 proc. tampa filosofiniu klausimu

Yra kažkas keisto ir gražaus tame, kaip mes matuojame kompiuterio “tingumą”. Mes iš esmės klausiame: kiek laiko šis įrenginys praleido nieko neveikdamas? Ir atsakymas – 99.75% laiko.

Bet ar procesorius tikrai “nieko neveikia”? Ne visai. Jis laukia. Jis yra pasiruošęs. Jis stebi aplinką. Tai labai panaši į tai, kaip žmogus gali sėdėti ramiai ir atrodyti neaktyvus, bet jo smegenys vis tiek apdoroja aplinkos garsus, stebi periferinį regėjimą, reguliuoja kvėpavimą.

Tas 0.25% yra sistemos “gyvybės ženklas”. Jis sako: aš čia, aš veikiu, aš pasiruošęs. Ir kai tu paspausi klavišą ar paspaudinėsi pelę, per kelias milisekundes ta apkrova šoks į 10%, 50%, gal net 100% – ir vėl nukris atgal į 0.25%.

Praktiškai, jei nori optimizuoti savo sistemą ir sumažinti net tą foninį 0.25-1%:

  • Išjunk nereikalingus paleidimo procesus (msconfig arba Task Manager > Startup „Windows” sistemoje)
  • Patikrink, ar antivirusinė programa nėra per agresyviai nuskanuojanti failų sistemą realiu laiku
  • Nešiojamajame kompiuteryje naudok “Balanced” arba “Power saver” energijos planą, kuris leidžia procesoriui greičiau pereiti į miego būsenas
  • Reguliariai tikrink, ar nėra kenkėjiškos programinės įrangos – ji dažnai slepiasi kaip maža, bet nuolatinė apkrova
  • Naršyklėse išjunk nereikalingus plėtinius, kurie veikia fone

Tas mažas skaičius ekrano kampe – ne klaida ir ne triukšmas. Tai tikslus, matematiškai pagrįstas atsakymas į klausimą: kiek tavo kompiuteris dirbo per paskutinę sekundę? Ir dažniausiai atsakymas yra: labai nedaug. Ir tai yra puiku.