O temperaturze i dokładności



Za oknem ciepło i słonecznie, ale dzisiaj skupiłem się na temperaturze wewnątrz komputera. Wykresiki dot. dysku NVMe pokazywały takie dziwne, nieokrągłe końcówki:

# sensors nvme-*
nvme-pci-0100
Adapter: PCI adapter
Composite:    +36.9°C  (low  =  -0.1°C, high = +69.8°C)
                     (crit = +89.8°C)

Dokładnie to widać tu:

nvme-pci-0100
Composite:
  temp1_input: 36.850
  temp1_max: 69.850
  temp1_min: -0.150
  temp1_crit: 89.850
  temp1_alarm: 0.000

Co ciekawe, polecenie nvme smart-log /dev/nvme0 pokazuje „pełne” stopnie. Poprawienie wydruku lm_sensors jest trywialne, w konfiguracji wystarczy dopisać:

chip "nvme-pci-0100"
        # bump readings, all ends with *.85
        compute temp1   @+0.15, @-0.15

I od razu wartości wyglądają na bardziej ludzkie:

# sensors nvme-*
Composite:    +37.0°C  (low  =  +0.0°C, high = +70.0°C)
                       (crit = +90.0°C)

No dobrze. Ale dlaczego takie przesunięcie? Piętnaście setnych to nie jest np. ⅛, co od biedy możnaby podciągnąć pod zaokrąglenia bitowe.

Zacząłem od źródła, czyli specyfikacji Non-Volatile Memory Host Controller Interface Specification (NVMe). Stoi tam:

Composite Temperature: Contains a value corresponding to a temperature in degrees Kelvin that represents the current composite temperature of the controller and namespace(s).

Poza tym, że jest tu błąd – nie ma „stopni” Kelwina, są po prostu kelwiny – to zaczyna wyłaniać się logiczne rozwiązanie.

Jak wiadomo ze szkoły, początek skali, zero kelwinów to -273°C… nie! To -273,15°C. Dla wygody zazwyczaj pomijamy tę końcówkę. I stąd ta rożnica.

Szybkie spojrzenie w kod źródłowy wyjaśnia też różnice w prezentacji. nvme-cli operuje na liczbach całkowitych, odejmując od odczytanej ze sprzętu wartości 273, co daje temperaturę w stopniach Celsjusza.

Z kolei podsystem hwmon w Linuksie operuje na tysięcznych częściach stopnia, a do przeliczenia używane jest makro kelvin_to_millicelsius(). Oczywiście w tym przypadku końcówka piętnastu setnych jest stosowana. Niestety, dane wejściowe nie zapewniają wymaganej dokładności, i efekt jest nie do końca zadowalający. To taka ilustracja powiedzenia, że nadgorliwość gorsza od faszyzmu.

Comments


Comments powered by Disqus