Ich habe einen USB-Stick ( PQI U822V-Speedy 32G ), den ich unter Linux schnell und einfach testen möchte. Ich teste Schreibbandbreite.
dd
auf roher Partition
Ich habe eine Partition ab Sektor 2048 erstellt und dann sequenziell 4 GB geschrieben:
dd if=/dev/zero of=/dev/sdb1 bs=1M count=4096
Ich bekomme ~ 22 MB / s.
Ich habe auch versucht, mehrere (4) dd
parallel zu laufen, wie oben, aber mit count=1024
und der seek=
Option, in verschiedene Bereiche des Laufwerks zu schreiben. Gleiche Ergebnisse.
dd
auf Dateisystem
Wenn ich die sdb1
Partition jedoch mit entweder ext4
oder formatiere NTFS
und große Dateien (entweder real oder /dev/zero
) darauf kopiere , wie folgt:
time dd if=/dev/zero of=/media/USBKEY/file.bin bs=1M count=4096 ; time sync
Ich erreiche> 66 MB / s, wie vom Hersteller angegeben. Natürlich habe ich die sync
Dauer kurz nach der Kopie berücksichtigt .
Warum gibt es so einen großen Leistungsunterschied?
filesystems
performance
usb-drive
dd
Totor
quelle
quelle
o/iflag=nocache
? Es gibt auchdirect
undsync
Optionen, die relevant sind - ich benutze immersync
mindestens mit USB, nur damit ich sicher sein kann, dass ich den Thumbdrive nicht zu früh ziehe. Und wenn Siesync
dann sehen, vielleicht, ob Sie die gleiche Geschwindigkeit roh mitnonblock
dd
aber höheren Suchargument, um auf verschiedene Teile der Festplatte zu schreiben.rsync --bwlimit
beim Kopieren von Dateien tatsächlich helfen kann . Es scheint so etwas wie ein Stau zu sein: Wenn Linux versucht, zu viele Daten in den Hals des USB-Geräts zu rammen, wird es tatsächlich langsamer und bleibt langsam, bis ich die Kopie anhalte, während der Puffer geleert wird. (Dies ist mit billigen USB-Sticks).Antworten:
Jetzt, wo ich noch einmal hinschaue, wurde mir klar, dass Sie sagten, dies sei ein USB-Stick (Flash-Laufwerk), keine Festplatte. Der Flash-Speicher kann nur in großen Blöcken gelöscht werden, und einzelne Sektoren können nicht geschrieben werden, ohne sie zuerst (und den gesamten Block, in dem sie sich befinden) zu löschen. Da die Software erwartet, jederzeit auf der Festplatte schreiben zu können, wo immer sie will, verfügt die Festplatte über eine Übersetzungslogik, um das Löschen transparent zu handhaben. Wie dies gemacht wird, hat einen dramatischen Einfluss auf die Schreibleistung. Viele Geräte verwenden einen Algorithmus für den größten Teil der Festplatte, der sequentielle Schreibvorgänge sehr gut verarbeitet, aber zufällige Schreibvorgänge verhindert. Der Bereich nahe dem Start der Festplatte wird normalerweise von der FAT in dem FAT-Dateisystem verwendet, mit dem sie vorformatiert sind, und dieser Bereich wird zufällig zufällig beschrieben, sodass sie in diesem Bereich einen anderen Algorithmus verwenden, der beim sequentiellen Schreiben langsamer ist.
Daher bin ich mir jetzt ziemlich sicher, dass meine anfängliche Vermutung, die ich als Kommentar hinzugefügt habe, richtig war. Was Sie sehen, wenn Sie in das Dateisystem schreiben, ist die Leistung des Restes der Festplatte, und wenn Sie bei Offset Null dd, schreiben Sie in den Fettbereich. Wenn Sie das dd-Ziel einige hundert MB in suchen, sollte es erheblich schneller werden.
quelle
dd
beim Raw-Block-Gerät und im durchgeführten Benchmark war die Verwendung eines Dateisystems der Wegbereiter dafür, nicht wahr?Ihre Messergebnisse können mit der Kernelarchitektur erklärt werden. Durch die Verwendung des Dateisystemzugriffs wird das volle Potenzial des Kernels mit allen Puffern und Optimierungen freigesetzt, die er ausführen kann. Insbesondere die Puffer beschleunigen Ihren Benchmark (b / c der Kernel ist 100% a_A_syncronous). dd auf einer Gerätedatei verwendet nichts davon.
quelle
dd
sequentielle Blöcke gleicher Größe ausgeschrieben werden, welches Dateisystem speichert dann den Schreibvorgang zwischen?Versuchen Sie
hdparm
stattdessen, die Leistung eines Laufwerks mit und ohne Caching zu bewerten:quelle
Dies geschieht aufgrund der Optimierung des Schreibens von Sparse-Dateien im Dateisystem.
Wenn Sie ein
dd if=/dev/zero
Raw-Gerät verwenden, werden die Nullblöcke tatsächlich auf die Festplatte geschrieben.Wenn Sie sie jedoch in eine Datei schreiben, ignoriert das Dateisystem das Schreiben der Daten und speichert nur die Metadaten. Dies führt dazu, dass nur sehr wenige Blöcke auf die Festplatte geschrieben werden. Die Datei kann als großes Loch angesehen werden, das nichts enthält.
Verwenden Sie / dev / urandom als Eingabedatei (
dd if=/dev/urandom
), um die Leistung auf diese Weise zu testen . Dadurch wird das Dateisystem gezwungen, zufällige Daten auf die Festplatte zu schreiben.quelle
/dev/zero
"; 2 / ist auf vielen Maschinen/dev/urandom
viel langsamer als Speichergeräte; 3 / am häufigsten müssen Dateisystemoptimierungen wie spärliche Dateien explizit angefordert werden, siehecp --sparse
und andere ...