Saya membuat pengaturan baru untuk mesin virtual saya dan menguji metode penyimpanan mana yang paling cepat. Lingkungan pengujian saya terdiri dari drive HDD dengan LVM di LUKS. Saya membuat satu LV untuk drive mesin virtual dan menggunakannya kembali untuk kedua tes untuk mempertahankan tempat yang sama pada drive HDD untuk mempertahankan kinerja yang konsisten (kecepatan baca / tulis HDD tergantung pada posisi fisik).
- Host: Arch Linux, kernel 4.12.8
- Tamu: Ubuntu Desktop 17.04
Kinerja diuji dengan perintah:
dd if=/dev/zero of=test bs=16M count=100 conv=sync
Tes pertama: menggunakan LV secara langsung sebagai drive mesin virtual
Perintah:
qemu-system-x86_64 \
-drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,aio=native,cache.direct=on \
-net nic,model=virtio \
-net user \
-vga virtio \
-display gtk,gl=on \
-smp 3 \
-cpu host \
-machine type=pc,accel=kvm \
-m 3G
Hasil (setiap nilai mewakili proses tunggal):
- Membuat file baru: 98,4 MB / s; 112 MB / s
- Menulis ke file yang ada: 62,5 MB / s; 68,7 MB / s; 64,8 MB / s
Tes kedua: membuat ext4 di LV dan meletakkan file gambar mentah di situ
Perintah:
qemu-system-x86_64 \
-drive format=raw,file=./ubuntu_17,if=virtio,aio=native,cache.direct=on \
-net nic,model=virtio \
-net user \
-vga virtio \
-display gtk,gl=on \
-smp 3 \
-cpu host \
-machine type=pc,accel=kvm \
-m 3G
Hasil (setiap nilai mewakili proses tunggal):
- Membuat file baru: 254 MB / s; 242 MB / s
- Menulis ke file yang ada: 187 MB / s; 189 MB / s; 190 MB / s
Tes ketiga: menggunakan LV secara langsung sebagai drive mesin virtual, pengaturan berbeda
Perintah:
qemu-system-x86_64 \
-drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,cache=none \
-net nic,model=virtio \
-net user \
-vga virtio \
-display gtk,gl=on \
-smp 3 \
-cpu host \
-machine type=pc,accel=kvm \
-m 3G
Hasil (setiap nilai mewakili proses tunggal):
- Membuat file baru: 129 MB / s; 125 MB / s
- Menulis ke file yang ada: 103 MB / s; 97 MB / s; 81,9 MB / s
Pertanyaan
Jelas ada perbedaan antara kedua solusi ini tetapi saya harapkan perangkat blok mentah setidaknya secepat file gambar karena seharusnya tidak ada overhead dari sistem file host. Saya kira beberapa caching terjadi di antara untuk file gambar atau opsi untuk perangkat blok mentah tidak optimal. Mengapa LV mentah lebih lambat dalam kasus ini? Apa yang dapat saya lakukan untuk meningkatkan kinerjanya? Atau jika itu harus lebih lambat, lalu mengapa?
EDIT: Saya menambahkan test case ketiga menggunakan pengaturan dari: http://www.linux-kvm.org/page/Tuning_KVM . Ternyata menjadi sedikit lebih cepat tetapi masih lebih lambat dari gambar file. Saya juga mengamati bahwa setiap kali menjalankan untuk file yang ada semakin lambat - namun fragmentasi seharusnya tidak terjadi untuk file yang ditimpa jadi saya tidak yakin mengapa itu terjadi.