Da ich einen nicht-HP Storage Controller, sowie den integrierten HP Storage Controller im AHCI Modus betreibe, bin ich, wie viele andere, von einer unnötig hoher Lüftergeschwindigkeit betroffen. Da mich das subjektiv stört und unsere Wohnung keine Möglichkeit bietet den Microserver in einen separaten Raum zu stellen habe ich nach Möglichkeiten das Lüfterverhalten zu beeinflussen gesucht. Mit der neuen iLO Version hält sich die Lüftergeschwindigkeit (ab ca. 20%) ja noch in Grenzen, mit dem alten iLO zum Zeitpunkt meines Kaufs fand ich ab 30% inakzeptabel. Würde die Kühlung tatsächlich notwendig hätte ich mich damit abgefunden, jedoch fand ich es inakzeptabel mit 30% leben zu müssen, wo andere User von 6-12% Geschwindigkeit berichten. Prinzipiell finde ich persönlich iLO's Verhalten bei unbekannten Temperaturwerten etwa bei Drittherstellerkomponenten sicherheitshalber mit einer erhöhten Kühlung zu begegnen sinnvoll, jedoch scheint es sich bei der Erhöhung im AHCI-Modus um einen Bug zu handeln und außerdem war mir zumindest die Erhöhung auf ca. 30% im Idle bei der alten iLO Version zu hoch.
Früheren Schilderungen in diesem Thread zufolge ermittelt iLO den Kühlungsbedarf des Microserver auf Basis einer Aggregation der ermittelten Temperaturwerte diverser Sensoren. Die Geschwindigkeit des verbauten Lüfter wird über ein PWM Signal gesteuert. Zusätzlich verfügt das Microserver Mainboard über 2 Lüfter-Sicherheitsmechanismen. Zum einen wird über eine Masseschleife auf Pin 5 des Lüfterconnectors auf dem Mainboard geprüft ob das Lüfterkabel angeschlossen ist. (Die Pinbelegung des Mainboard Fan-Connectors findet man z.B. schön illustriert ebenfalls in [1].) Zum anderen verfügt der Originallüfter laut [1] über einen Rotationsdetektor (rotation detect), welcher ein entsprechendes Signal an Pin 4 anlegt. Ich bin nich besonders elektronikversiert und möchte daher nur direkt auf die Quelle [1] verweisen. ILO wertet jedenfalls beide Signale aus und reagiert auf Fehler etwa durch Wechsel in den Fehlermodus (rote Health-LED Anzeige) und Herunterfahren des Microservers.
Folgende Maßnahmen die Kühlung zu beeinflussen lassen sich aus diesem Thread und dem Homerserver Show Forum zusammenfassen (evtl. unvollständig):
- Überbrücken der Sicherheitsmechanismen (siehe [1]): damit kann man den Microserver komplett ohne Lüfter betreiben oder einen anderen Lüfter einbauen. Die Geschwindigkeit dieses Lüfters kann entweder durch Durchschleifen des (durch iLO bestimmten) PWM Signals des Mainboards (Pin 3) oder durch eine eigene Steuerung (etwa manuell oder dynamisch durch einen im Lüfter integrierte Temperatursensor) gesteuert werden. In allen Fällen entzieht man iLO durch die Überbrückung die Möglichkeit die Anwesenheit und korrekte Funktion eines Lüfters zu erkennen und auf Fehler zu reagieren.
- Betrieb mit einem anderen Lüfter mit rotation detect Signal (siehe [1]) mit geringerem Luftdurchsatz und resultierender geringeren Geräuschemission
- Erhalt des Originallüfters und Implementierung einer eigener Geschwindigkeitssteuerung. Nach Abwägung aller Faktoren habe ich mich aufgrund des Erhalts sämtlicher Sicherheitsfunktionen und der Leistung des Originallüfter für diese Lösung entschieden. Nachdem ich mein Lösungskonzept ja schon kurz skizziert habe, erläutere ich diese im Folgenden gerne etwas ausführlicher.
KONZEPT
Da ich den HP Ingenieuren zutraue den Kühlungsbedarf des Microservers zuverlässig und sinnvoll zu ermitteln (mit Ausnahme der oben erwähnten Einschränkungen
) wird die von iLO bestimmte Geschwindigkeit als Eingangsgröße für die Lüftersteuerung verwendet. Diese Größe soll dann verringert werden und dem Originallüfter als Steuersignal zugeführt werden. Da mein Microserver mit neuem ILO und meiner Konfiguration typischerweise beim idlen und 20°C Umgebungstemperatur eine Geschwindigkeit von ca. 20-25% vorgibt und diese dann lastabhängig steigert, hielt ich es für sinnvoll im geringen bis mittleren Lastbereich, welche ich für mich aus Lüftergeschwindigkeiten von 20-35% ableite, eine Reduktion der Geschwindigkeit um 10 Prozentpunkte in diesem Intervall vorzunehmen. Damit dreht der Lüfter ab 10% bis 25% und springt dann auf 36% und folgt dann der von iLO vorgegebenen Geschwindigkeit.
TECHNISCHE UMSETZUNG
- KOMPONENTEN
Zur Umsetzung der Steuerung habe ich mich der Einfachheit halber für einen Microcontroller auf Arduino Basis entschieden. Konkret verwende ich ein Teensy++ 2.0 [2] - ein Arduino-Klon Board mit kleinen Abmessungen. Stromversorgungskabel und Signalkabel vom/zum Mainboard ausgeschlossen werden damit keine weitere externe Komponenten benötigt. In meiner Umsetzung kommt der Strom vom Floppystromstecker (fürs ODD). Der PWM Singal Pin mit Kabel wurde vom Lüfteranschlusstecker abgelöst und durch einen anderen ersetzt, welcher das Signal in zum Microcontroller board leitet. Das dort erzeugte PWM Signal wird über ein Kabel auf den früher am Lüfteranschlusstecker eingerasteten Pin übertragen, welcher unverändert mit dem PWM Eingangspin auf der Lüfterelektronik verbunden ist. Das Ganze ist zwar einmalig etwas frickelig, lässt sich aber reversibel gestalten, nur durch Steckverbindungen.
- SIGNALVERARBEITUNG
Das PWM Signal vom Mainboard wird vom Teensy dekodiert. Beliebige Applikationslogik ermittelt auf dessen (oder beliebiger anderer) Grundlage eine neue Soll-Lüftergeschwindigkeit und erzeugt ein für den Lüfter geeignetes PWM Signal. Das PWM Signal wird an den Lüfter geschickt, welcher seine Geschwindigkeit entsprechend anpasst. Dabei habe ich die "4-Wire Pulse Width Modulation (PWM) Controlled Fans" Spezifikation als Annahme für den Originallüfter zugrunde gelegt. Diese sieht ein 25kHz PWM Signal zur Lüftersteuerung vor - ein eventuell von meiner Umsetzung abweichender Microcontroller sollte als im Stande sein ein solches Signal zu erzeugen. Abweichend zu Spezifikation dreht der HP Lüfter bei einer duty cycle von 0 mit maximaler Geschwindigkeit - und umgekehrt. Kommt als zusätzliches Sicherheistfeature sehr willkommen: sollte der Microcontroller mal die Funktion verweigern und kein PWM Singal erzeugen wird das vom Lüfter als 0 duty cycle interpretiert wodurch der Lüfter mit Maximalgeschwindigkeit dreht. Signalpegel sind bei mir TTL. [1] berichtet zwar von 3.3V Pegel, jedoch scheint der Lüfter von 5V Pegel keinen Schaden genommen zu haben, und der Microcontroller dekodiert das PWM Signal vom Mainboard zuverlässig. Ich habe nicht nachgemessen, aber die High-Level Output Voltage vom Mainboard PWM scheint zumindest über dem Minimum High-Level Input Voltage des Mircocontrollers zu liegen.
Da es aber doch zu Fluktuationen in der Dekodierung kommt, wird softwareseitig über 10 Werte gemittelt, wobei ein Wert alle 10ms ausgelesen wird. Hat sich soweit als sehr zuverlässig gezeigt.
- ALTERNATIVEN / ERWEITERUNGEN
Zumindest das von mir verwendete Teensy board verfügt über eine USB Schnittstelle. Damit lässt sich (z.B. mit dem internen Port des Microservers) nicht nur das Board mit Strom versorgen, zusätzlich die Schnittstelle zum debuggen verwendet werden oder die Kontrollsoftware kann auf dem Microserver selbst laufen und dann die gewünschte Geschwindigkeit über die USB Schnittstelle an den Microcontroller übertragen werden, wo dann nur noch das entsprechend PWM erzegt wird. Damit könnte man z.B. die einzelnen Temperatursensorwerte des Microservers mit eigener Applikationslogik auswerten und einen resultierenden Kühlungsbedarf selbst ermitteln.
Soweit zu meinem Konzept und dessen Umsetzung. Über Kritik und Anmerkungen freue ich mich, Fragen beantworte ich gerne
.
[1]
Faking the fan signal - Gen 8 - HomeServerShow Forums
[2]
https://www.pjrc.com/teensy/
[3]
http://www.formfactors.org/developer%5Cspecs%5CREV1_2_Public.pdf