Die Temperaturüberwachung von CPUs ist essenziell für die Performance und Stabilität moderner Computer. Unter Linux ist der Pfad /sys/class/hwmon/ eine zentrale Schnittstelle, um auf Sensorwerte zuzugreifen – insbesondere die Temperaturen von Prozessoren. Jedoch fällt Nutzern oft auf, dass in diesem Verzeichnis mehr temperaturebezogene Label-Dateien existieren als die eigentliche Anzahl der physischen CPU-Kerne. Dieses Phänomen wirft Fragen auf: Warum gibt es mehr temp_label Dateien als CPU-Kerne? Was bedeuten diese Labels tatsächlich? Und wie hängt das mit der CPU-Hardware und dem Linux-Kernel zusammen? Um diese Fragen zu beantworten, lohnt es sich, die Grundlagen der CPU-Temperaturüberwachung sowie die dahinterliegenden Hardware- und Softwaremechanismen genauer zu betrachten. Unter /sys/class/hwmon/ befinden sich Verzeichnisse, die verschiedene Hardwareüberwachungsgeräte repräsentieren.
Diese umfassen Temperatur-, Spannungs- und Lüfterdrehzahlsensoren. Bei einer CPU, die oft durch den Treiber coretemp repräsentiert wird, sind die Dateien temp*_input und temp*_label besonders interessant. Jede temp*_label Datei dokumentiert, für welchen Temperaturwert eine bestimmte temp*_input Datei steht. Grundsätzlich erwarten viele Nutzer eine eins-zu-eins-Beziehung: ein physischer Kern, ein Temperatur-Sensor – also eine temp_label Datei pro Kern. Die Realität ist jedoch komplexer.
Beim Durchsehen der temp_label Dateien eines Systems kann man leicht auf Lücken in der Nummerierung oder seltsame, hohe Kernnummern stoßen, die scheinbar nicht zu den vorhandenen CPU-Kernen passen. Ein konkretes Beispiel zeigt auf einem Laptop mit 32 Kernen sogar temp_label Einträge mit Nummern bis 47. Ein genauerer Blick auf die Inhalte beantwortet einen ersten Teil der Frage. Die temp1_label Datei wird als „Package id 0“ angezeigt, während andere Dateien Core 0, Core 4, Core 8 und so weiter angeben. Der Begriff „Package“ steht für das gesamte CPU-Paket, also den physischen Prozessor als Ganzes.
Die Temperatur des „Package id 0“ liefert eine globale Temperatur für die gesamte CPU, also eine Art Durchschnitts- oder Maximalwert über alle Kerne hinweg. Die einzelnen Kerntemperaturen sind dagegen feingranulare Messungen, die für die Temperaturregelung einzelner Kerne gebraucht werden. Warum die Core-Nummern so verteilt und mit Lücken erscheinen, ist durch den Herstellungsprozess moderner CPUs bedingt. Hier kommt das sogenannte Core-Binning zum Tragen. Bei der Halbleiterfertigung entstehen aus einer Siliziumwafer-Masse hunderte oder tausende CPU-Chips.
Nicht alle funktionieren perfekt. Einige Kerne weisen Herstellungsfehler oder eine geringere Leistung auf. Statt komplette CPUs wegzuwerfen, werden diese CPUs klassifiziert und passende Modelle daraus gebildet. Üblicherweise sind die besseren Chips Spitzenmodelle mit voller Kernanzahl. Modelle mit etwas mehr Fehlern oder weniger einwandfreien Kernen werden als niedrigere SKUs (Stock Keeping Units) verkauft, bei denen einige Kerne deaktiviert sind.
Das führt dazu, dass eine CPU, die offiziell 32 Kerne hat, physisch als abgespeckte Version eines 64-Kern-Chips vom Band läuft. Im Betrieb ist nur ein Teil der Kerne aktiv, weshalb im hwmon-Verzeichnis auch Temperaturlabels von Kernen auftauchen, die eigentlich nicht genutzt werden. Die Kernel-Treiber wie coretemp greifen auf diese Hardwareinformationen zurück und liefern sie eins zu eins, was erklärt, warum es scheinbar mehr Sensoren und Labels gibt als physische Kerne. Diese scheinbare Diskrepanz ist also ein Spiegelbild des komplexen Fertigungs- und Designprozesses moderner Mehrkern-CPUs. Die verschiedenen temp*_input Sensorwerte werden entsprechend der Firmware und dem Treiber mit ihrem jeweiligen Core-Index versehen, auch wenn einzelne Kerne deaktiviert oder gebinnt sind.
Aus der Perspektive des Betriebssystems bleibt dies sichtbar, da der Treiber alle Kameraden ausliest, die die CPU bereitstellt. Ein weiterer Aspekt bei der Häufung der Labels ist, dass manche Kerne eben gar nicht thermisch sensorisch überwacht werden oder dass mehrere Sensoren pro Kern existieren können, zum Beispiel für unterschiedliche Temperaturbereiche oder Hotspots innerhalb des Kernbereichs. Manche CPUs bieten neben den eigentlichen Kern-Temperatursensoren auch zusätzliche Sensoren für Spannungen, VRMs (Voltage Regulator Modules) oder andere interne Bereiche an, die ebenfalls über hwmon angezeigt werden. Betriebssysteme und Kernel bemühen sich, die Temperaturdaten präzise auf die verfügbaren Temperaturdaten-Sensoren abzubilden, jedoch kann durch die verschiedenen Sensorarten und den Herstellungsprozess ein Überhang an Labels entstehen. Für Entwickler, die Systeme optimieren oder eigene Tools zur CPU-Temperaturüberwachung und -steuerung schreiben wollen, ist ein wichtiges Verständnis, dass nicht alle aufgelisteten Sensor-IDs notwendigerweise aktive Kerne oder echte Kern-Temperaturen widerspiegeln.
Sie können unverbrauchte, deaktivierte Kerne oder das gesamte CPU-Package abbilden. Die praktische Konsequenz für die Systemnamen und Monitoring-Tools ist, mit diesen Unterschieden umgehen zu können. Das heißt, dass der Algorithmus zur Interpretation der Sensorwerte neben der reinen Nummer auch die Namensbeschriftung, die aus temp*_label ausgelesen wird, beachten muss. Nur so kann eine sinnvolle Zuordnung der Temperaturwerte und damit eine effiziente Steuerung der CPU-Frequenzen und Kühlsysteme gelingen. Heutige High-End-CPUs mit sehr hoher Kernzahl profitieren enorm von einer differenzierten Temperaturüberwachung, um die einzelnen Kerne entsprechend ihrer Temperatur gezielt zu regulieren und Überhitzungen zu vermeiden.