LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Raspberry Pi/Tutorials / Taktowanie Raspberry Pi: governor CPU a dławienie...
Ten artykuł w innych językach:

Taktowanie Raspberry Pi: governor CPU a dławienie oraz co raportuje vcgencmd get_throttled

Taktowanie Raspberry Pi: governor CPU a dławienie oraz co raportuje vcgencmd get_throttled
Spis treści
  1. Dwa powody, jeden widok
  2. Regulator i jego dziesięć stopni
  3. Co melduje get_throttled
  4. Liczba ma dwie połowy
  5. Co zameldowała prawdziwa płytka
  6. Co sprawdzić, gdy podejrzenie zostaje
  7. Pytania i odpowiedzi
  8. Źródła

Raspberry Pi meldujące 700 MHz tam, gdzie na papierze stoi 1500, wygląda jak komputer, który się poddał. Odczyt jest prawdziwy, a mimo to najczęściej nic nie jest zepsute.

Tę liczbę obniżają dwa zupełnie różne zjawiska i nie mają one ze sobą nic wspólnego. Jedno to system operacyjny oszczędzający prąd. Drugie to firmware chroniący płytkę. Jedno polecenie mówi, które z nich właśnie działa.

Osiem znaczących bitów rejestru dławienia, wszystkie na zero, a nad nimi dwadzieścia prób taktowania, z których jedna leży daleko poniżej pozostałych
Cztery bity opisują chwilę obecną, kolejne cztery cały czas od ostatniego startu.

Dwa powody, jeden widok

Pierwszy powód jest zwyczajny i zamierzony. Linux prowadzi mały kawałek programu, którego całym zadaniem jest niedopuszczenie, by procesor pracował szybciej, niż wymaga tego praca. Między dwoma zadaniami obniża taktowanie i podnosi je w tej samej chwili, w której coś nadchodzi.

Drugi powód to ochrona płytki. Gdy napięcie zasilania spada albo układ robi się za gorący, firmware sam obniża taktowanie, niezależnie od systemu operacyjnego, aby zapobiec nieprawidłowej pracy płytki. To jest dławienie i stanowi objaw innego problemu.

Oba dają ten sam odczyt przy tym samym poleceniu. Samo taktowanie nie rozdzieli tych dwóch rzeczy i właśnie dlatego tyle całkowicie zdrowych płytek zostaje spisanych na straty.

Regulator i jego dziesięć stopni

Kawałek programu, który zajmuje się codziennym obniżaniem, nazywa się regulatorem, a na niezmienionym Raspberry Pi OS jest nim ondemand.

Zmierzona tutaj płytka oferuje dziesięć stopni: 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400 i 1500 MHz. Regulator wybiera między nimi nieprzerwanie, w zakresie milisekund, według tego, jak zajęte były ostatnio rdzenie.

Niski odczyt jest zatem migawką chwili, a nie stanem. Dwadzieścia prób w ciągu sześciu sekund trafiło dziewiętnaście razy na 1500 MHz i raz na 600 MHz – i właśnie ta jedna próba, wzięta osobno, wyglądałaby niepokojąco.

Co melduje get_throttled

Polecenie, które rozstrzyga sprawę, brzmi vcgencmd get_throttled. Odpowiada jedną liczbą szesnastkową, a liczba ta jest szeregiem przełączników, nie pomiarem.

Każdy przełącznik odpowiada jednemu warunkowi: napięcie zasilania za niskie, taktowanie ograniczone, dławienie, osiągnięta miękka granica temperatury. Przełącznik włączony znaczy, że warunek zachodzi. Cała liczba na zerze znaczy, że nie zachodzi żaden.

Rzecz najważniejsza: ten rejestr nie wie nic o regulatorze. Oszczędzanie prądu nie ustawia ani jednego bitu. Taktowanie 600 MHz obok throttled=0x0 nie jest więc sprzecznością, tylko odpowiedzią.

Dwa dokładnie równie wysokie walce obok siebie; nad lewym tylko pusta przestrzeń, na prawym koralowy pierścień leżący na wierzchu

Liczba ma dwie połowy

W tym miejscu odczyt bywa najczęściej mylnie rozumiany. Cztery dolne bity opisują chwilę obecną. Kolejne cztery, szesnaście miejsc wyżej, notują, czy ten sam warunek zaszedł kiedykolwiek od ostatniego startu.

Krótki spadek napięcia o trzeciej nad ranem nie jest już widoczny w bitach bieżących przy śniadaniu, ale bity trwałe nadal go odnotowują. Jednorazowy odczyt rejestru w spokojnej chwili i zera w dolnej połowie dowodzą tylko, że w tym momencie nie występuje żaden z rejestrowanych warunków.

Połowa trwała jest ponadto czyszczona przy każdym starcie. Zera na komputerze pracującym od minuty nie znaczą zupełnie nic; te same zera po trzech tygodniach pracy znaczą bardzo dużo.

Co zameldowała prawdziwa płytka

Zmierzona tutaj płytka to Raspberry Pi 4 Model B, dziewiętnaście godzin po starcie, wydająca tę stronę w trakcie pomiaru.

Rejestr meldował w każdej pojedynczej próbie 0x0, w obu połowach, także w tej próbie, która złapała taktowanie przy 600 MHz. Temperatura utrzymywała się nieprzerwanie między 57,4 a 59,9 °C. Dziennik jądra nie zawierał ani jednego wpisu o napięciu czy dławieniu.

Ustawienie jest niezmienione: arm_freq=1500, żadnej ręcznie ustawionej granicy temperatury, regulator nietknięty. Niczego tutaj nie przygotowano tak, by wyszedł czysty wynik.

Co sprawdzić, gdy podejrzenie zostaje

Tam, gdzie bity trwałe są ustawione, przyczyna leży częściej po stronie zasilacza niż gorąca, a jądro ułatwia sprawdzenie. Obok czujnika temperatury udostępnia czujnik o nazwie rpi_volt i wpisuje linijkę do dziennika jądra, gdy tylko zasilanie spadnie. Pusty dziennik sam w sobie jest wynikiem.

Gdy podejrzewasz przegrzewanie, mierz temperaturę w serii, gdy płytka pracuje pod obciążeniem, zamiast polegać na pojedynczym odczycie. Wartość odczytana po minucie spoczynku mówi bardzo niewiele.

A tam, gdzie całą skargą jest samo taktowanie, rejestr prowadzi do odpowiedzi najkrótszą drogą: jedno polecenie, jedna liczba, a w niej różnica między odpoczywającym procesorem a płytką w kłopotach.

Pytania i odpowiedzi

Jak da się ręcznie rozszyfrować wartość taką jak 0x50000?

Liczba zostaje rozłożona na bity, a każdy ustawiony bit oznacza jeden warunek. Dokumentacja Raspberry Pi przypisuje je następująco:

  • bit 0 (0x1): napięcie za niskie, teraz
  • bit 1 (0x2): taktowanie ograniczone, teraz
  • bit 2 (0x4): dławienie, teraz
  • bit 3 (0x8): miękka granica temperatury aktywna, teraz
  • bity 16–19 (0x10000, 0x20000, 0x40000, 0x80000): te same cztery warunki, kiedykolwiek od startu

0x50000 to suma 0x10000 i 0x40000: od startu co najmniej raz wystąpiło za niskie napięcie i co najmniej raz dławienie, a w tej chwili nie zachodzi żadne z nich. Taki wzór pasuje do zasilacza, którego napięcie spada pod obciążeniem i wraca w spokojnych chwilach. Odczyt 0x50005 oznacza natomiast, że oba warunki zachodzą także w tej chwili.

Dlaczego Raspberry Pi na ładowarce do telefonu zgłasza za niskie napięcie, choć na ładowarce widnieje 5 V?

Ponieważ liczy się to, co dociera do płytki, a nie to, co jest nadrukowane na ładowarce. Każdy kabel ma opór i pod obciążeniem spada na nim napięcie; cienkie, długie kable tracą przy tym więcej niż krótkie i grube. Zasilacz dający dokładnie 5,0 V nie ma na tę stratę żadnego zapasu, dlatego oficjalny zasilacz do Raspberry Pi 4 daje 5,1 V przy prądzie do 3 A.

Niektóre ładowarki do telefonów są ponadto zaprojektowane na mniejsze prądy albo pozwalają napięciu opaść pod obciążeniem. Spadek przypada wtedy dokładnie na chwile, w których pracują wszystkie rdzenie, i dlatego bity trwałe mogą być ustawione, choć każdy odczyt w spoczynku wygląda czysto.

Czy pomaga przestawienie regulatora na performance?

Na odczyt tak, na dławienie nie. Przy performance taktowanie pozostaje wysokie także w spoczynku, ale firmware nadal dławi ponad głową systemu operacyjnego, gdy napięcie spada albo układ robi się za gorący. Stale wysokie taktowanie wytwarza przy tym więcej ciepła i przybliża płytkę do miękkiej granicy temperatury.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innymi modelami i pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.