Saya telah melakukan sedikit pembandingan dengan operasi penulisan di perangkat loopback. Inilah kesimpulannya:
- Jika Anda menyinkronkan setiap selesai menulis, maka perangkat loopback berperforma lebih buruk (hampir dua kali lebih lambat).
- Jika Anda mengizinkan cache disk scheduler IO untuk melakukan pekerjaan mereka, maka hampir tidak ada perbedaan antara menggunakan perangkat loopback dan akses disk langsung.
Hasil benchmark
Pertama, saya menjalankan patokan pada perangkat loopback dalam tmpfs 8GB, dan perangkat loopback dalam perangkat loopback itu ( dengan sinkronisasi setelah setiap operasi penulisan ):
ext4 dalam tmpfs:
Measured speed: 557, 567, 563, 558, 560, 559, 556, 556, 554, 557
Average speed : 558.7 MB/s (min 554 max 560)
ext4 dalam extf di tmpfs:
Measured speed: 296, 298, 295, 295, 299, 297, 294, 295, 296, 296
Average speed : 296.1 MB/s (min 294 max 299)
Jelas, ada beberapa perbedaan dalam kinerja saat menggunakan perangkat loopback dengan sync-on-write.
Kemudian saya mengulangi tes yang sama pada HDD saya.
ext4 (HDD, 1000 MB, 3 kali):
Measured speed: 24.1, 23.6, 23.0
Average speed : 23.5 MB/s (min 23.0 max 24.1)
ext4 dalam ext4 (HDD, 945MB):
Measured speed: 12.9, 13.0, 12.7
Average speed : 12.8 MB/s (min 12.7 max 13.0)
Benchmark yang sama pada HDD, sekarang tanpa sinkronisasi setelah setiap penulisan ( time (dd if=/dev/zero bs=1M count=1000 of=file; sync)
, diukur sebagai <size>
/ <time in seconds>
).
ext4 (HDD, 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 dalam ext4 (HDD, 945MB):
Measured speed: 89.9, 97.2, 82.9, 84.0, 82.7
Average speed : 87.3 MB/s (min 82.7 max 97.2)
(Secara mengejutkan, tolok ukur loopback terlihat lebih baik daripada tolok ukur disk mentah, mungkin karena ukuran yang lebih kecil dari perangkat loopback, sehingga lebih sedikit waktu yang dihabiskan untuk sinkronisasi-ke-disk yang sebenarnya)
Penyiapan patokan
Pertama, saya membuat sistem file loopback 8G di / tmp (tmpfs) saya:
truncate /tmp/file -s 8G
mkfs.ext4 /tmp/file
sudo mount /tmp/file /mnt/
sudo chown $USER /mnt/
Lalu saya membuat baseline dengan mengisi file loopback yang terpasang dengan data:
$ 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
Setelah melakukan itu, saya membuat perangkat loopback lain di perangkat loopback sebelumnya:
mkdir /tmp/mountpoint
mkfs.ext4 /mnt/bigfile
sudo mount /mnt/bigfile /tmp/mountpoint
sudo chown $USER /tmp/mountpoint
Dan jalankan patokan lagi, sepuluh kali:
$ dd if=/dev/zero bs=1M of=/tmp/mountpoint/file oflag=sync
...
7171379200 bytes (7.2 GB) copied, 27.0111 s, 265 MB/s
dan kemudian saya unmount file tes dan menghapusnya:
sudo umount /tmp/mountpoint
sudo umount /mnt
(sama untuk tes pada HDD, kecuali saya juga menambahkan count=1000
untuk mencegah tes dari mengisi seluruh disk saya)
(dan untuk tes tidak menulis-on-sinkronisasi, saya menjalankan pengaturan waktu dd
dan sync
operasi)