设为首页 收藏本站
查看: 1915|回复: 0

[经验分享] kvm半虚拟化驱动

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-29 13:13:39 | 显示全部楼层 |阅读模式
半虚拟化驱动
host:宿主机(物理机),guest:客户机(虚拟机)
1.使用virtio驱动linux中的virtio驱动
linux内核一般都自带virtio模块
内核配置文件与virtio相关配置
[iyunv@desktop0 ~]# grep VIRTIO_ /boot/config-3.10.0-123.el7.x86_64
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
# CONFIG_VIRTIO_MMIO is not set
[iyunv@desktop0 ~]#
查看virtio驱动
[iyunv@foundation0 images]# find/lib/modules/3.10.0-123.el7.x86_64/ -name "virtio*.ko"
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/block/virtio_blk.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/char/hw_random/virtio-rng.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/char/virtio_console.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/net/virtio_net.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/scsi/virtio_scsi.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/virtio/virtio.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/virtio/virtio_balloon.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/virtio/virtio_pci.ko
/lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/virtio/virtio_ring.ko
[iyunv@foundation0 images]#
查看已加载的virtio模块
[iyunv@desktop0 ~]# lsmod |grep virtio
virtio_balloon         13530 0
virtio_blk             18329  2
virtio_net             28059  0
virtio_pci             17725  0
virtio_ring            21011  4virtio_blk,virtio_net,virtio_pci,virtio_balloon
virtio                 14187  4virtio_blk,virtio_net,virtio_pci,virtio_balloon
windows中的virtio驱动没写完
[iyunv@foundation0 /]# yum -y installvirto-win
Loaded plugins: langpacks, product-id,subscription-manager
This system is not registered to Red HatSubscription Management. You can use subscription-manager to register.
rhel-dvd                                                | 4.1 kB     00:00   
rht-ext                                                  | 2.9 kB     00:00   
No package virto-win available.
Error: Nothing to do
[iyunv@foundation0 /]# rpm -q virtio-win
package virtio-win is not installed
[iyunv@foundation0 /]# ls/usr/share/virt-win/
ls: cannot access /usr/share/virt-win/: Nosuch file or directory

2.virtio_balloonballooning:内存的ballooning(气球)技术可以在guest运行时动态地调整它所占用的host内存资源,不需要关机。但需要手动调整。
如下图,正方形里的内存是guest的,ballooning技术形象地在guest占用的内存中引入气球(balloon)概念,气球中的内存可供host使用(不能被guest访问或使用)。
当guest空闲,但host内存不够时,气球膨胀,将guest内存分给host.
当guest繁忙,host空闲时,气球放气变小,将气球里的内存还给guest.
spacer.jpg
查看balloon设备
[iyunv@desktop0 ~]# lspci
00:00.0 Host bridge: Intel Corporation440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Red Hat,Inc. QXL paravirtual graphic card (rev 04)
00:03.0 Ethernet controller: Red Hat, IncVirtio network device
00:04.0 Ethernet controller: Red Hat, IncVirtio network device
00:05.0 Ethernet controller: Red Hat, IncVirtio network device
00:06.0 SCSI storage controller: Red Hat,Inc Virtio block device
00:07.0 SCSI storage controller: Red Hat,Inc Virtio block device
00:08.0Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
[iyunv@desktop0 ~]#
[iyunv@desktop0~]# lsmod |grep virtio
virtio_balloon         13530 0
virtio_blk             18329  2
virtio_net             28059  0
virtio_pci             17725  0
virtio_ring            21011  4 virtio_blk,virtio_net,virtio_pci,virtio_balloon
virtio                 14187  4 virtio_blk,virtio_net,virtio_pci,virtio_balloon
[iyunv@desktop0 ~]#
[iyunv@desktop0~]# lspci -s 00:08.0 -v
00:08.0 Unclassified device [00ff]: RedHat, Inc Virtio memory balloon
         Subsystem:Red Hat, Inc Device 0005
         PhysicalSlot: 8
         Flags:bus master, fast devsel, latency 0, IRQ 11
         I/Oports at c120
         Kernel driver in use: virtio-pci
[iyunv@desktop0~]#
查看内存使用情况
[iyunv@desktop0~]# free -m
             total      used       free     shared   buffers     cached
Mem:     1841        704      1137         16          0        286
-/+ buffers/cache:        416       1424
Swap:            0          0          0
[iyunv@desktop0 ~]#
下面将内存设置为1024M
spacer.jpg
[iyunv@desktop0 ~]# free -m
            total       used       free    shared    buffers    cached
Mem:      817        703        113         16          0        286
-/+ buffers/cache:        416        400
Swap:            0          0          0
[iyunv@desktop0 ~]#

3.virtio_net使用virtio_net半虚拟化驱动,可以提高网络吞吐量和降低网络延迟,使guest拥有和host一样的原生网卡网络性能。
在guest中查看virtio网卡使用情况
[iyunv@desktop0 ~]# grep VIRTIO_ /boot/config-3.10.0-123.el7.x86_64
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
# CONFIG_VIRTIO_MMIO is not set
[iyunv@desktop0 ~]#
[iyunv@desktop0 ~]# lspci
00:00.0 Host bridge: Intel Corporation440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Red Hat,Inc. QXL paravirtual graphic card (rev 04)
00:03.0Ethernet controller: Red Hat, Inc Virtio network device
00:04.0Ethernet controller: Red Hat, Inc Virtio network device
00:05.0Ethernet controller: Red Hat, Inc Virtio network device
[iyunv@desktop0~]# lspci -vv -s 00:03.0
00:03.0 Ethernet controller: Red Hat, IncVirtio network device
         Subsystem:Red Hat, Inc Device 0001
         PhysicalSlot: 3
         Control:I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+FastB2B- DisINTx+
         Status:Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-<MAbort- >SERR- <PERR- INTx-
         Latency:0
         Interrupt:pin A routed to IRQ 10
         Region0: I/O ports at c0c0
         Region1: Memory at fc0d2000 (32-bit, non-prefetchable) [size=4K]
         ExpansionROM at fc000000 [disabled] [size=256K]
         Capabilities:[
[iyunv@desktop0 ~]# lsmod |grep virtio
virtio_balloon         13530 0
virtio_blk             18329  2
virtio_net             28059  0
[iyunv@desktop0~]#
[iyunv@desktop0~]# ethtool -i eth0
driver:virtio_net
version: 1.0.0
firmware-version:
bus-info: 0000:00:03.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
[iyunv@desktop0~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 172.25.0.10  netmask 255.255.255.0  broadcast 172.25.0.255
[iyunv@desktop0~]# ping 172.25.0.250 -c 1
PING 172.25.0.250 (172.25.0.250) 56(84)bytes of data.
64bytes from 172.25.0.250: icmp_seq=1 ttl=64 time=0.304 ms
--- 172.25.0.250 ping statistics ---
1 packets transmitted, 1 received, 0%packet loss, time 0ms
rtt min/avg/max/mdev =0.304/0.304/0.304/0.000 ms
[iyunv@desktop0 ~]#
host闭关TSO与GSO,可使半虚拟化网络驱动的性能更加优化,其中eno16777736是建立bridge供guest使用的网络接口
[iyunv@foundation0images]# ethtool  -k eno16777736
Features for eno16777736:
rx-checksumming: off
tx-checksumming: on
         tx-checksum-ipv4:off [fixed]
         tx-checksum-ip-generic:on
         tx-checksum-ipv6:off [fixed]
         tx-checksum-fcoe-crc:off [fixed]
         tx-checksum-sctp:off [fixed]
scatter-gather: on
         tx-scatter-gather:on
         tx-scatter-gather-fraglist:off [fixed]
tcp-segmentation-offload:on
         tx-tcp-segmentation:on
         tx-tcp-ecn-segmentation:off [fixed]
         tx-tcp6-segmentation:off [fixed]
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload:on
[iyunv@foundation0images]# ethtool -K eno16777736 gso off
[iyunv@foundation0images]# ethtool -K eno16777736 tso off
[iyunv@foundation0images]# ethtool -k eno16777736
Features for eno16777736:
rx-checksumming: off
tx-checksumming: on
         tx-checksum-ipv4:off [fixed]
         tx-checksum-ip-generic:on
         tx-checksum-ipv6:off [fixed]
         tx-checksum-fcoe-crc:off [fixed]
         tx-checksum-sctp:off [fixed]
scatter-gather: on
         tx-scatter-gather:on
         tx-scatter-gather-fraglist:off [fixed]
tcp-segmentation-offload:off
         tx-tcp-segmentation:off
         tx-tcp-ecn-segmentation:off [fixed]
         tx-tcp6-segmentation:off [fixed]
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload:off
vhost-net后端驱动
后端驱动一般是由qemu提供的,如果对于网络IO请求的后端处理能够在内核空间来完成,效率就会更高,提高网络吞吐与减少延迟,在较新的内核中有一个叫“vhost-net”的驱动模块,作为一个内核级别的后端处理程序,将virtio-net的后端处理任务放到内核空间中执行,以提高效率。
如果guest处理数据的速度比host发送的速度慢,则不使用vhost-net,让传输速度稍微慢一点反而会提高整体的性能。容易造成缓冲区溢出。
下面查看vhost-net的使用情况
[iyunv@foundation0images]# grep VHOST /boot/config-3.10.0-123.el7.x86_64
CONFIG_VHOST_NET=m
# CONFIG_VHOST_SCSI is not set
CONFIG_VHOST_RING=m
[iyunv@foundation0images]# lsmod |grep vhost
vhost_net              33961  8
macvtap                18302  1 vhost_net
tun                    27183  17 vhost_net
host中的内核将vhost-net编译为模块
[iyunv@foundation0images]# rmmod vhost-net
rmmod: ERROR: Module vhost_net is in use
[iyunv@foundation0 images]#
在使用libvirt时,如使用vhost-net后端驱动XML的配置如下
                <interfacetype="bridge">
                        <sourcebridge="br0"/>
                        <macaddress="52:54:00:00:02:0A"/>
                        <modeltype="virtio"/>
                        <drivername="qemu"/>
                </interface>
4.virtio_blk

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-132273-1-1.html 上篇帖子: KVM虚拟机克隆 下篇帖子: KVM常用运维指令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表