準仮想化ドライバ
完全仮想化 (HVM) 方式のゲスト OS では、ハードウェアはエミュレートされるため、特に I/O 周りの処理に関するオーバーヘッドが大きく、その点では準仮想化方式の方が優位に立っていた。(昔は)
しかしながら、HVM では CPU のハードウェア支援も受けられ、また、ゲスト OS の書き換えを行う必要がない。
じゃあ PV ドライバを HVM で使えば…! というのがことの発端。
PV ドライバはゲストのパフォーマンスを強化し、I/O 待ち時間を短縮するとともに、スループットをベアメタルレベル近くまで高めることができる。I/O 負荷の高いワークロードでは PV ドライバの使用が推奨されている。
KVM ホストでの PV ドライバ
KVM における PV ドライバは virtio パッケージに含まれ、比較的新しいカーネルであれば基本的に自動的にロードされる。
確認方法は以下。
$ lsmod
Module Size Used by
ip6t_rpfilter 12595 1
ipt_REJECT 12541 2
nf_reject_ipv4 13373 1 ipt_REJECT
ip6t_REJECT 12625 2
nf_reject_ipv6 13717 1 ip6t_REJECT
xt_conntrack 12760 11
ip_set 40680 0
nfnetlink 14490 1 ip_set
ebtable_nat 12807 1
ebtable_broute 12731 1
bridge 146976 1 ebtable_broute
stp 12976 1 bridge
llc 14552 2 stp,bridge
ip6table_nat 12864 1
nf_conntrack_ipv6 18935 7
nf_defrag_ipv6 35104 1 nf_conntrack_ipv6
nf_nat_ipv6 14131 1 ip6table_nat
ip6table_mangle 12700 1
ip6table_security 12710 1
ip6table_raw 12683 1
iptable_nat 12875 1
nf_conntrack_ipv4 15053 6
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26787 2 nf_nat_ipv4,nf_nat_ipv6
nf_conntrack 133053 6 nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6
iptable_mangle 12695 1
iptable_security 12705 1
iptable_raw 12678 1
ebtable_filter 12827 1
ebtables 35009 3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_filter 12815 1
ip6_tables 26912 5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,ip6table_raw
iptable_filter 12810 1
iosf_mbi 14990 0
crc32_pclmul 13133 0
ghash_clmulni_intel 13273 0
aesni_intel 189415 0
lrw 13286 1 aesni_intel
gf128mul 15139 1 lrw
glue_helper 13990 1 aesni_intel
ablk_helper 13597 1 aesni_intel
ppdev 17671 0
cryptd 20511 3 ghash_clmulni_intel,aesni_intel,ablk_helper
i2c_piix4 22401 0
joydev 17389 0
pcspkr 12718 0
i2c_core 63151 1 i2c_piix4
virtio_balloon 18015 0
parport_pc 28205 0
parport 46395 2 ppdev,parport_pc
ip_tables 27126 5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs 1003971 2
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
ata_generic 12923 0
pata_acpi 13053 0
virtio_net 28063 0
virtio_blk 18166 3
virtio_console 28075 1
ata_piix 35052 0
libata 242992 3 pata_acpi,ata_generic,ata_piix
crct10dif_pclmul 14307 0
crct10dif_common 12595 1 crct10dif_pclmul
crc32c_intel 22094 1
serio_raw 13434 0
virtio_pci 22934 0
floppy 69432 0
virtio_ring 22746 5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_console
virtio 14959 5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_console
dm_mirror 22289 0
dm_region_hash 20813 1 dm_mirror
dm_log 18411 2 dm_region_hash,dm_mirror
dm_mod 123941 8 dm_log,dm_mirror
virtio がロードされていることがわかる。block device、network device、PCI、コンソールなど、様々なシーンで利用される。