半虚拟化驱动
KVM必须要求有硬件虚拟化辅助技术(Intel VT-x,AMD-V)的hypervisor
(QEMU提供了全虚拟化环境
缺点:每次I/O操作路径较长,有较多的VMentry,VMExit,需要多次上下文切换,也需要多次数据复制,性能较差。)
半虚拟化驱动virtio:利用物理机驱动批量处理虚拟机的I/O请求,效率高。
linux中virtio驱动
内核已自带
CONFIG.*VIRTIO.*=m #内核编译配置文件与virtio有关的
编译好内核后,查看驱动
# find /lib/modules/2.6.32-279.el6.x86_64/ -name "virtio*.ko"
会显示一些virtio_net.ko virtio_pci.ko virt-ring.ko
查看已加载的
# lsmod|grep virtio
2.安装windows中的virtio驱动
# yum install virto-win
安装后可看到/usr/share/virtio-win/目录下有一个virtio-win.iso文件。
启动win7客户机,
#qemu-system-x86_64 win7.img -smp 2 -m 2048 -cdrom /usr/share/virti-win/virtio-win.iso -vnc :0 -usbdevice tablet
然后进入win7,安装驱动
安装后使用virtio驱动后重新启动
使用virtio_balloon
系统运行时改变内存大小
启动virtio_balloon
编译内核时选项 CONFIG_VIRTIO_BALLOON=m
操作步骤
1)启动客户机
# qemu-system-x86_64 rhel6u3.img -smp2 -m 2048-balloon virtio
2)在客户机中查看内存使用情况
# lspci
查看是否加载驱动
# lspci -s 00:04.0 -v|grep virtio-pci
# free -m
3)在qemu monitor 中查看和改变客户机占用的内存
(qemu) info balloon
balloon:actual=2048
(qemu) balloon 512
(qemu)info balloon
balloon: actual=512
-----
KVM动态调整内存工具:virsh setmem <domain-id or domain-name><Amount of memory in KB>
设备直接分配(VT-d)
VT-d
1)Emulated device :QEMU纯软件模拟设备
2) Virtio device :实现VIRTIO API的半虚拟化驱动的设备
3) PCI device assignment: PCI 设备直接分配
VT-D不需要与Hypervisor(KVM)参与,极大的提高IO性能。
需要硬件支持 VT-D
配置:
1)打开主板VT-D选项
2)编译配置,REDHAT6.3+默认
启动系统后
# dmesg | grep DMAR -i
# dmesg | grep IOMMU -i # 如未打开 那么在内核配置文件中CONFIG_PCI_STUB=m
3)在宿主机中隐藏设备
# modprobe pci_stub
# lsmod | grep stub
ls /sys/bus/pci/drivers/pci-stub/
都有显示回复即可
查看设备的vendorID deviceID
# lspci -Dn -s 08:00:00
-D domain,-n 用数字显示ID,-s
绑定设备到pci_stub驱动
echo -n "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:08:00.0 > /sys/bus/pci/devices/0000:08:00.0/driver/unbind
echo 0000:08:00.0 > /sys/bus/pci/drivers/pci-stub/bind
# lspci -k -s 08:00.0
设备驱动是intel的e1000e,绑定后为pci_stub