CM5 Carrierboard Geekworm X1501

Ich hatte ja schon angekündigt, dass ich mein Compute Module 5 in ein anderes Carrierboard umbauen will. Das Geekworm X1501 stellt dem CM5 eine große Anzahl von I/O Möglichkeiten bereit.

Das Geekworm X1501 samt Montagematerial
Das Geekworm X1501 samt Montagematerial

Geekworm X1501

Auf dem Board befinden sich gleich zwei Ethernet Anschlüsse, eine ist für 2,5GBit/sec ausgelegt. Dazu gesellen sich 1 USB 3.0 und ein USB 2.0 und zwei fullsize HDMI Buchsen. Auf der Unterseite lassen sich zwei NVME Drives einsetzen. Die Stromversorgung geschieht über eine USB-C Buchse und ist mit 5V/5A spezifiziert. Damit ist das offizielle Raspberry Pi 5 Netzteil ausreichend. Auffällig ist, das alle Komponenten auf der Platine beschriftet sind, so dass keine Missverständnisse aufkommen.

Montage

Für den ersten Test setze ich das Compute Module 5 einfach so, wie ich es im Vorgängerpost geflasht habe in das X1501 ein und schalte die Stromversorgung ein. Tatsächlich läuft, wie erwartet, der Bootvorgang vom eMMC an und ich habe einen ssh Zugang über WLAN.

Tests

Echtzeituhr

Im Modul ist wie beim Raspberry Pi 5 eine Echtzeituhr (RTC) verbaut. Das Geekworm X1501 besitzt eine Halterung für eine CR1220 Knopfzelle als Pufferbatterie. So eine habe ich in meinem Lager sogar noch gefunden und setze sie ein. Wie im verlinkten Post, setze ich sie auf die aktuelle Uhrzeit und prüfe mit timedatectl, ob sie aktiv ist.

Die Echtzeituhr ist fertig eingerichtet.
Die Echtzeituhr ist fertig eingerichtet.

NVME

Die beiden NVME Slots bestücke ich mit einer Crucial P3 2TB und einer Crucial P3 512GB. Falls dir das bekannt vorkommen sollte, dann deshalb, weil es das gleiche Setup wie beim Nextcloud Pi ist. Der 512 Streifen ist bereits im Orange Pi RV2 testweise zum Einsatz gekommen. Dem Board liegen zwei Adapterschienen bei, um M.2 Drives kürzer als 2280 einzubauen.

Nach der Montage zeigen zwei blaue LED die  Betriebsbereitschaft der NVME Drives an.
Nach der Montage zeigen zwei blaue LED die Betriebsbereitschaft der NVME Drives an.
Die beiden NVME werden von lsblk als /dev/nvme0 und /dev/nvme1 angezeigt.
Die beiden NVME werden von lsblk als /dev/nvme0 und /dev/nvme1 angezeigt.

MicroSD

Der µSD Slot wird vom X1501 bereitgestellt, also schiebe ich eine neue 32GB SanDisk Ultra Speicherkarte ein und muss feststellen, dass sie in der Ausgabe von lsblk nicht zu finden ist, auch nach einem Reboot des Moduls tauchte sie nicht auf.

Nach etwas Suchen fand ich die Ursache. Wenn das CM5 vom eMMC bootet, wird der µSD Leser nicht durch das Compute Module aktiviert.

Um den Test trotzdem durchzuführen, bräuchte ich ein Compute Module 5 ohne eMMC. Ich mache es mir einfacher und flashe eine Raspberry Pi OS Installation auf die Speicherkarte und stelle die Bootreihenfolge so um, dass zuerst von der µSD gestartet wird. Das funktioniert leider auch nicht. Der Kartenleser wird vom CM5 mit eMMC nicht angebunden.

Also tausche das CM5 gegen ein CM5 Lite ohne eMMC aus und boote von MicroSD. Das klappt dann auf Anhieb. Die Speicherkarte wird unter /dev/mmcblk0 eingebunden wie auch das eMMC Modul auf dem ausgetauschten CM5. Ein Script, dass mit diesem Pfad arbeitet, würde den Unterschied also nicht bemerken.

df -h und lsblk zeigen, dass das CM5 Lite von der µSD Karte gestartet wurde.
df -h und lsblk zeigen, dass das CM5 Lite von der µSD Karte gestartet wurde.

Booten von NVME

Ich tausche das CM5 wieder aus und flashe Raspberry Pi OS (trixie) auf der 500er NVME, um davon zu starten. Dies klappt beim ersten Mal nicht. Da die Erkennung des Bootdevices beim Raspberry Pi mitunter etwas diffizil sein kann, tausche ich die beiden NVME Streifen untereinander, so dass die Boot M.2 jetzt im äußeren Slot steckt.

Aber auch danach wurde vom eMMC gestartet. Mit

sudo raspi-config

ändere ich über Advanced Options > Boot Order die Bootreihenfolge auf „B2 NVMe/USB Boot Boot from NVMe before trying USB and then SD Card„.

Mit Option B2 wird die korrekte Bootreihenfolge gesetzt.
Mit Option B2 wird die korrekte Bootreihenfolge gesetzt.

Nach Update des EPROM und dem notwendigen Neustart, startete das Geekworm X1501 tatsächlich von der NVME. In /etc/os-release wird auch Debian (trixie) als OS Version ausgewiesen.

lsblk zeigt, dass von der NVME gestartet wurde. Darunter der Inhalt von /etc/os-release mit der trixie Kennung
lsblk zeigt, dass von der NVME gestartet wurde. Darunter der Inhalt von /etc/os-release mit der trixie Kennung

Kühlung

Während meiner zahlreichen Umbauarbeiten bin ich zwangsläufig mit dem den Fingern den SoC berührt. Dabei stellte ich fest, dass dieser unangenehm warm ist. Also suche ich nach einer Kühllösung.

Zunächst bestellte ich mir einen offiziellen Raspberry Pi Heatsink für das Compute Module 5. Dieser wird in einem materialschonenden kleinen Karton zusammen mit Schrauben und Abstandshaltern geliefert.

Das Tütchen mit Schrauben und Abstandshaltern ist an der Unterseite des Kühlers angeklebt.
Ebenso sind die Wärmeleitpads schon auf der Unterseite angebracht.

Leider sitzen die Bohrlöcher für die Schrauben im X1501 direkt unter den beiden NVME, so dass ich beide Speicherstreifen erstmal wieder entfernen muss.

Dann kann ich die vier Schrauben von unten durch die Platinen des Carrierboard und des Compute Module 5 nur so weit schrauben, so dass sie auf der Oberseite ankommen. Danach stecke ich den Heatsink auf die Schrauben und jetzt erst zieh ich die Schrauben vollständig fest.

Der Heatsink deckt das CM5 vollständig ab, nur eine Aussparung lässt Platz für den Anschluss der WLAN-Antenne. Allerdings solltest du diese vor dem Kühlkörper anbringen, es wird dir aufgrund des Platzes nachher nicht gelingen!

Jetzt wieder die beiden Speicherstreifen einbauen und der SoC ist jetzt unter Kühlung.

Tests

Zuerst habe ich die halbstündige fio Suite als Belastungstest noch ohne Heatsinks laufen lassen. Dabei liegen die IOPS Werte meist zwischen 60.000 und 80.000, in der Spitze sogar bei 90.000. Die M.2 riegelt nur zwischenzeitlich mal kurz auf 10.000 und weniger ab.

IOPS Graph ohne Kühlkörper, die NVME geht immer nur kurzzeitig ins Throtteling.
IOPS Graph ohne Kühlkörper, die NVME geht immer nur kurzzeitig ins Throtteling.

Was ich jetzt noch benötige, sind zwei Kühlkörper für den beiden M.2 NVME. Nachdem ich diese erhalten habe, wiederhole ich den Belastungstest.

Ich messe jetzt für eine Weile durchgängig Werte von 90.000 IOPS ohne viel Throtteling. Erst zum Schluss scheint der Kühlkörper sich soweit aufgewärmt zu haben, dass er die Abwärme nicht mehr effizient abführen kann. Dies liegt vermutlich daran, dass das gesamte X1501 direkt mit den Heatsinks auf der Tischplatte steht und so kaum Luftaustausch möglich ist.

Mit Heatsink erhalte ich lange Zeit stabile Werte von 90.000 IOPS ohne nennenswertes Throtteling.
Mit Heatsink erhalte ich lange Zeit stabile Werte von 90.000 IOPS ohne nennenswertes Throtteling.

Fazit

Mit dem Geekworm X1501 lassen sich bequem zwei NVME an das Compute Module 5 anbinden ohne das störende FFC Kabel des PCIe Port des Raspberry Pi 5 benutzen zu müssen.

Was jetzt noch fehlt, ist ein Gehäuse für die Gesamtkonstruktion. Darum kümmere ich dann nächste Woche.

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
raspithek.de - Olli Graf
WordPress Cookie Hinweis von Real Cookie Banner