Ich habe ein bisschen Benchmarking mit Schreibvorgängen in einem Loopback-Gerät durchgeführt. Hier ist die Schlussfolgerung:
- Wenn Sie nach jedem Schreibvorgang synchronisieren, ist die Leistung eines Loopback-Geräts erheblich schlechter (fast doppelt so langsam).
- Wenn Sie dem Festplatten-Cache erlauben, dass ein E / A-Scheduler seine Arbeit erledigt, gibt es kaum einen Unterschied zwischen der Verwendung eines Loopback-Geräts und dem direkten Festplattenzugriff.
Benchmark-Ergebnisse
Zuerst habe ich einen Benchmark auf einem Loopback-Gerät in tmpfs von 8 GB und einem Loopback-Gerät in diesem Loopback-Gerät ( mit Synchronisierung nach jedem Schreibvorgang ) ausgeführt:
ext4 in tmpfs:
Measured speed: 557, 567, 563, 558, 560, 559, 556, 556, 554, 557
Average speed : 558.7 MB/s (min 554 max 560)
ext4 in extf in tmpfs:
Measured speed: 296, 298, 295, 295, 299, 297, 294, 295, 296, 296
Average speed : 296.1 MB/s (min 294 max 299)
Es ist klar, dass es einige Leistungsunterschiede gibt, wenn Loopback-Geräte mit Sync-on-Write verwendet werden.
Dann wiederholte ich den gleichen Test auf meiner Festplatte.
ext4 (Festplatte, 1000 MB, 3-mal):
Measured speed: 24.1, 23.6, 23.0
Average speed : 23.5 MB/s (min 23.0 max 24.1)
ext4 in ext4 (Festplatte, 945 MB):
Measured speed: 12.9, 13.0, 12.7
Average speed : 12.8 MB/s (min 12.7 max 13.0)
Gleicher Benchmark auf der Festplatte, jetzt ohne Synchronisierung nach jedem Schreibvorgang ( time (dd if=/dev/zero bs=1M count=1000 of=file; sync)
gemessen als <size>
/ <time in seconds>
).
ext4 (Festplatte, 1000 MB):
Measured speed: 84.3, 86.1, 83.9, 86.1, 87.7
Average speed : 85.6 MB/s (min 84.3 max 87.7)
ext4 in ext4 (Festplatte, 945 MB):
Measured speed: 89.9, 97.2, 82.9, 84.0, 82.7
Average speed : 87.3 MB/s (min 82.7 max 97.2)
(Überraschenderweise sieht der Loopback-Benchmark besser aus als der Raw-Disk-Benchmark, vermutlich aufgrund der geringeren Größe des Loopback-Geräts, sodass weniger Zeit für die eigentliche Synchronisierung mit der Festplatte aufgewendet wird.)
Benchmark-Setup
Zuerst habe ich in meinem / tmp (tmpfs) ein Loopback-Dateisystem von 8G erstellt:
truncate /tmp/file -s 8G
mkfs.ext4 /tmp/file
sudo mount /tmp/file /mnt/
sudo chown $USER /mnt/
Dann habe ich eine Basislinie erstellt, indem ich die gemountete Loopback-Datei mit Daten gefüllt habe:
$ dd if=/dev/zero bs=1M of=/mnt/bigfile oflag=sync
dd: error writing '/mnt/bigfile': No space left on device
7492+0 records in
7491+0 records out
7855763456 bytes (7.9 GB) copied, 14.0959 s, 557 MB/s
Danach habe ich im vorherigen Loopback-Gerät ein weiteres Loopback-Gerät erstellt:
mkdir /tmp/mountpoint
mkfs.ext4 /mnt/bigfile
sudo mount /mnt/bigfile /tmp/mountpoint
sudo chown $USER /tmp/mountpoint
Und lief den Benchmark zehn Mal erneut:
$ dd if=/dev/zero bs=1M of=/tmp/mountpoint/file oflag=sync
...
7171379200 bytes (7.2 GB) copied, 27.0111 s, 265 MB/s
und dann habe ich die Testdatei abgemeldet und entfernt:
sudo umount /tmp/mountpoint
sudo umount /mnt
(Ähnlich für den Test auf der Festplatte, außer dass ich auch hinzugefügt habe count=1000
, um zu verhindern, dass der Test meine gesamte Festplatte füllt)
(und für den Test, bei dem keine Synchronisierung durchgeführt wurde, habe ich den dd
und den sync
Vorgang zeitgesteuert ausgeführt ).