Virtio adalah driver para-virtualized, yang berarti OS dan driver sadar bahwa itu bukan Perangkat fisik. Pengemudi benar-benar merupakan API antara tamu dan hypervisor sehingga kecepatannya benar-benar terputus dari perangkat fisik atau standar Ethernet apa pun.
Ini adalah hal yang baik karena ini lebih cepat daripada hypervisor yang berpura-pura menjadi perangkat fisik dan menerapkan konsep "kecepatan tautan" yang sewenang-wenang untuk mengalir.
VM hanya membuang frame ke bus dan tugas host adalah menangani perangkat fisik; VM tidak perlu mengetahui atau peduli dengan kecepatan tautan perangkat fisik host.
Salah satu keuntungan dari ini adalah bahwa ketika paket bergerak di antara 2 VM pada host yang sama, mereka dapat mengirim paket secepat CPU host dapat memindahkannya dari satu set memori ke yang lain, menyetel "kecepatan tautan" di sini hanya memasukkan batas kecepatan yang tidak diperlukan.
Ini juga memungkinkan host untuk melakukan kerja sama adaptor dan menyebarkan lalu lintas ke beberapa tautan tanpa setiap VM perlu dikonfigurasi secara eksplisit untuk mendapatkan bandwidth penuh dari penyiapan.
Jika Anda ingin mengetahui seberapa cepat Anda benar-benar dapat mentransfer data dari VM Anda ke lokasi lain, Anda perlu melakukan pengujian throughput aktual dengan alat seperti iperf
.
Untuk memperluas sedikit tentang ini karena saya juga baru saja membahas ini dan juga agak bingung dengan kurangnya detail kecepatan saat menjalankan ethtool
pada VM:
$ ethtool eth0
Settings for eth0:
Link detected: yes
Ketika saya melihat lshw
keluaran:
$ lshw -class network -short
H/W path Device Class Description
==========================================================
/0/100/3 network Virtio network device
/0/100/3/0 eth0 network Ethernet interface
Ini memberi tahu kita bahwa driver perangkat yang digunakan untuk VM ini divirtualisasi, dalam hal ini adalah VM yang berjalan di KVM sehingga VM menggunakan driver virtio_* untuk semua interaksinya dengan "perangkat keras".
$ lsmod | grep virt
virtio_rng 13019 0
virtio_balloon 13864 0
virtio_net 28096 0
virtio_console 28066 1
virtio_scsi 18453 2
virtio_pci 22913 0
virtio_ring 22746 6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi
virtio 14959 6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi
Modul kernel ini tersedia untuk OS tertentu (Linux, BSD, dan Windows). Dengan driver ini terinstal di VM Anda, kernel di VM Anda memiliki akses khusus ke perangkat keras yang mendasarinya melalui kernel yang berjalan di hypervisor Anda.
Ingatlah bahwa dengan hypervisor ada 2 tipe berbeda. ESX/vsphere dianggap tipe-1. Pengingat tentang jenis:
- Tipe-1, hypervisor asli atau bare-metal
- Tipe-2 atau hypervisor yang dihosting
KVM lebih mirip dengan tipe-2, tetapi memiliki beberapa elemen, seperti virtio_*, yang membuatnya berperilaku dan bekerja lebih seperti tipe-1, dengan mengekspos ke virtualisasi kernel Linux yang mendasari hypervisor sedemikian rupa sehingga VM dapat memiliki akses semi-langsung ke sana.
Kecepatan NIC saya?
Mengingat Anda menjalankan hypervisor paravirtualisasi, Anda harus membuka hypervisor yang sebenarnya untuk mengetahui kecepatan teoretis NIC Anda menggunakan ethtool
. Sebagai gantinya hanya bisa mengetahuinya dengan melakukan sesuatu seperti menggunakan iperf
untuk membandingkan NIC yang sedang dimuat, dan secara eksperimental mencari tahu seperti apa kecepatan NIC.
Misalnya, di sini saya memiliki 2 server yang berjalan di 2 hypervisor yang berbeda. Menggunakan iperf
di kedua server:
$ sudo yum install iperf
Kemudian jalankan satu server sebagai iperf
server di host1 VM:
host1$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
Kemudian pada klien VM host2:
host2$ iperf -c 192.168.100.25
------------------------------------------------------------
Client connecting to 192.168.100.25, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.101 port 55854 connected with 192.168.100.25 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 10.0 GBytes 8.60 Gbits/sec
Pada output host1 Anda akan melihat ini:
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.100.25 port 5001 connected with 192.168.100.101 port 55854
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 10.0 GBytes 8.60 Gbits/sec
Di sini kita dapat melihat bahwa NIC mampu mencapai 8,60Gbits/dtk.