In meinem Beitrag zur Installation von Open Media Vault habe ich erwähnt, dass die Übertragungsrate auf ein USB3 Flashdrive (USB-Stick, SSD) am Raspberry Pi 4 viel zu gering war und es so aussah, als würde nur per 100 Mbit/s übertragen werden. Dass es nicht an der Netzwerkverbindung liegt, habe ich beim Test mit einer HDD festgestellt. Nun möchte ich der Ursache genauer nachgehen und das Problem – sofern möglich – lösen.
Ich nutze für die Tests das gleiche OMV-Setup, wie zuvor. In der Zwischenzeit habe ich das Setup lediglich genutzt, um per Stressberry zu zeigen, weshalb man sein Raspberry Pi 4 kühlen sollte. Dies kannst du hier nachzulesen.
Vorbereitung
Zunächst möchte ich sichergehen, dass das Problem nach wie vor besteht. also schließe ich einen USB3-Stick ans Raspberry Pi an, erstelle in OMV eine Freigabe und prüfe die Übertragungsrate.
An Hand der Übertragung ist zu erkennen, dass das Problem weiterhin besteht.
DMA scatter-gather
DMA steht für Direct Memory Access und bezeichnet eine Methode, auf einen Speicher zuzugreifen, ohne die CPU dabei zu belasten und wird erst seit dem Raspberry Pi 4 unterstützt. Wollte man z.B. eine große Datei auf einen USB-Stick schreiben, welcher an einem Raspberry Pi 3 angeschlossen ist und die CPU war gerade ausgelastet, wurde die Datei nicht geschrieben. Dank DMA kann die Datei auch geschrieben werden, wenn die CPU ausgelastet ist.
Ohne DMA gibt es auch kein USB Attached SCSI Protocol.
Dieses Protokoll wurde mit USB3 eingeführt und ist abwärtskompatibel. Durch das Protokoll werden hohe Schreibraten ermöglicht, da die Steuerkommandos der SATA und SCSI-Schnittstellen direkt über die USB-Schnittstelle geleitet werden.
Aber wo liegt nun das Problem?
Es gibt Hardware, welche das UASP nicht völlig implementiert hat. Und genau bei solcher Hardware sind langsame Übertragungsraten zu erkennen, denn UASP ist auf dem Raspberry Pi 4 per Standard aktiviert.
Für diese Hardware muss also ein Alternativ-protokoll aktiviert werden, das sog. Bulk Only Transfer Protocol (BOTP).
Die Lösung?
Per SSH verbinde ich mich auf mein Raspberry Pi 4 und führe folgenden Befehl aus, nachdem ich den USB-Stick abgezogen habe:
sudo dmesg -C
Anschließend schließe ich den USB-Stick wieder an und führe den Befehl ohne Paramter aus:
dmesg
Das Ergebnis sieht so aus:
Ich notiere mir die idVendor und die idProduct
idVendor = 0951
idProduct = 1666
Nun müssen die Werte in die /boot/cmdline.txt eingetragen werden
sudo nano /boot/cmdline.txt
Direkt an den Anfang, also zu Beginn der ersten Zeile, trage ich folgendes ein:
usb-storage.quirks=0951:1666:u
Gespeichert wird mit Strg+O dann Enter und anschließend den Editor verlassen mit Strg+X.
Muss man mehrere Laufwerke angeben, macht man das nach diesem Muster:
usb-storage.quirks=0123:4567:u,2109:0715:u
Jetzt reboote ich das Raspberry Pi und teste nochmal die Übertragungsgeschwindigkeit.
Das war wohl ein Satz mit X!
Ich habe zum Vergleich eine SSD angeschlossen und hier ist die Übertragungsrate wieder völlig in Ordnung. Die oben genannten Schritte musste ich nicht durchführen.
Für mich bleibt das Thema weiterhin ein Rätsel. Vielleicht helfen jemanden ja die beschriebenen Schritte, da diese auch so im offiziellen Raspberry Pi Forum beschrieben werden, aber ich kann es leider nicht als definitive Lösung betiteln.
Ich leide an allen 7 HDD die ich via USB Hub an meinem Pi 4 angeschIossen habe unter schlechter Leistung. Ca. 9 MB/S nach einer Neuinstallation habe ich für ca. 3 Wochen ruhe da habe ich ca. 40MB/S doch dann geht es von vorne los. Ich habe es genau nach deiner Anleitung gemacht, doch es hat nichts gebracht. Hast du noch eine Idee?
Auf dieser Seite https://forums.raspberrypi.com/viewtopic.php?t=245931
hat es in der sudo nano /boot/cmdline.txt noch den text: dwc_otg.lpm_enable=0 ist der wichtig?
also genützt hat auch das nichts.
Hallo Michael,
der von dir genannte Paramter stellt nur das Power Management über USB ab.
Leider kann ich dir nicht sagen, weshalb du auf allen Platten nur 9MB/s hast.
Vielleicht ist dies ein problem der CPU, wenn zu viele Platten parallel in Nutzung sind.