KVM ( 4 ) ~ 準仮想化ドライバ ~

June 19, 2018

準仮想化ドライバ

完全仮想化 (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、コンソールなど、様々なシーンで利用される。


 © 2023, Dealing with Ambiguity