赞
踩
目录
纯软件/半虚拟化/直接分配三种I/O虚拟化方案的对比
这种方式比较好理解,简单来说,就是通过纯软件的形式来模拟虚拟机的 I/O 请求。以 qemu-kvm 来举例,内核中的 kvm 模块负责截获 I/O 请求,然后通过事件通知告知给用户空间的设备模型 qemu,qemu 负责完成本次 I/O 请求的模拟。
优点:
不需要对操作系统做修改,也不需要改驱动程序,因此这种方式对于多种虚拟化技术的「可移植性」和「兼容性」比较好。
缺点:
纯软件形式模拟,自然性能不高,另外,虚拟机发出的 I/O 请求需要虚拟机和 VMM 之间的多次交互,产生大量的上下文切换,造成巨大的开销。
针对 I/O 全虚拟化纯软件模拟性能不高这一点,I/O 半虚拟化前进了一步。它提供了一种机制,使得 Guest 端与 Host 端可以建立连接,直接通信,摒弃了截获模拟这种方式,从而获得较高的性能。值得关注的有两点:1)采用 I/O 环机制,使得 Guest 端和 Host 端可以共享内存,减少了虚拟机与 VMM 之间的交互;2)采用事件和回调的机制来实现 Guest 与 Host VMM 之间的通信。这样,在进行中断处理时,就可以直接采用事件和回调机制,无需进行上下文切换,减少了开销。
要实现这种方式, Guest 端和 Host 端需要采用类似于 C/S 的通信方式建立连接,这也就意味着要修改 Guest 和 Host 端操作系统内核相应的代码,使之满足这样的要求。为了描述方便,我们统称 Guest 端为前端,Host 端为后端。
前后端通常采用的实现方式是驱动的方式,即前后端分别构建通信的驱动模块,前端实现在内核的驱动程序中,后端实现在 qemu 中,然后前后端之间采用共享内存的方式传递数据。关于这方面一个比较好的开源实现是 virtio,后面会有专门的文章来讲述之。
优点:
性能较 I/O 全虚拟化有了较大的提升
缺点:
要修改操作系统内核以及驱动程序,因此会存在移植性和适用性方面的问题,导致其使用受限。
上面两种虚拟化方式,还是从软件层面上来实现,性能自然不会太高。最好的提高性能的方式还是从硬件上来解决。如果让虚拟机独占一个物理设备,像宿主机一样使用物理设备,那无疑性能是最好的。I/O 直通技术就是提出来完成这样一件事的。它通过硬件的辅助可以让虚拟机直接访问物理设备,而不需要通过 VMM 或被 VMM 所截获。
由于多个虚拟机直接访问物理设备,会涉及到内存的访问,而内存是共享的,那怎么来隔离各个虚拟机对内存的访问呢,这里就要用到一门技术——IOMMU,简单说,IOMMU 就是用来隔离虚拟机对内存资源访问的。
I/O 直通技术需要硬件支持才能完成,这方面首选是 Intel 的 VT-d 技术,它通过对芯片级的改造来达到这样的要求,这种方式固然对性能有着质的提升,不需要修改操作系统,移植性也好。
但该方式也是有一定限制的,这种方式仅限于物理资源丰富的机器,因为这种方式仅仅能满足一个设备分配给一个虚拟机,一旦一个设备被虚拟机占用了,其他虚拟机时无法使用该设备的。
为了解决这个问题,使一个物理设备能被更多的虚拟机所共享。学术界和工业界都对此作了大量的改进,PCI-SIG 发布了 SR-IOV (Single Root I/O Virtualizmion) 规范,其中详细阐述了硬件供应商在多个虚拟机中如何共享单个 I/O 设备硬件。
SR-IOV标准定义了设备原生共享所需的「软硬件支持」。硬件支持包括芯片组对 SR-IOV 设备的识别,为保证对设备的安全、隔离访问还需要北桥芯片的 VT-d 支持,为保证虚拟机有独立的内存空间,CPU 要支持 IOMMU。软件方面,VMM 将驱动管理权限交给 Guest,Guest 操作系统必须支持SR-IOV 功能。
SR-IOV 单独引入了两种软件实体功能:
每个 SR-IOV 设备都可有一个物理功能 PF,并且每个 PF 最多可有 64,000 个与其关联的虚拟功能 VF。
一般,Guest 通过物理功能 PF 驱动发现设备的 SR-IOV 功能后将包括发送、接收队列在内的物理资源依据VF数目划分成多个子集,然后 PF 驱动将这些资源子集抽象成 VF 设备,这样,VF 设备就可以通过某种通信机制分配给虚拟机了。
尽管 I/O 直通技术消除了虚拟机 I/O 中 VMM 干预引起的额外开销,但在 I/O 操作中 I/O 设备会产生大量的中断,出于安全等因素考虑,虚拟机无法直接处理中断,因此中断请求需要由 VMM 安全、隔离地路由至合适的虚拟机。所以,其实实际使用中,都是软硬件虚拟化方式结合使用的。
virtio实现I/O半虚拟化的原理
Virtio模拟I/O设备 其中前端驱动(frondend,如virtio-blk、 virtio-net等)是在客户机中存在的驱动程序模 块,而后端处理程序(backend)是在QEMU中实 现的。在这前后端驱动之间,还定义了两层来 支持客户机与QEMU之间的通信。
其中, “ virtio ”这一层是虚拟队列接口,它在概念 上将前端驱动程序附加到后端处理程序。 一个前端驱动程序可以使用0个或多个队列, 具体数量取决于需求。虚拟队列实际上被实现 为跨越客户机操作系统和hypervisor的衔接点, 但它可以通过任意方式实现,前提是客户机操 作系统和virtio后端程序都遵循一定的标准, 以相互匹配的方式实现它。
virtio-ring实现了环形缓冲区(ring buffer),用于保存前端驱动和后端处理程序执 行的信息,并且它可以一次性保存前端驱动的 多次I/O请求,并且交由后端去批量处理,最后 实际调用宿主机中设备驱动实现物理上的I/O操 作,这样做就可以根据约定实现批量处理而不 是客户机中每次I/O请求都需要处理一次,从而 提高客户机与hypervisor信息交换的效率.
virtio为半虚拟化提供了一系列通用设备仿真的接口,它可以抽象为两部分: 1. Front-end drivers:通过 半虚拟化 在客户机操作系统中修改 Guest OS代码实现driver 2. Back-end Drivers:Hyptervisor提供设备仿真的后端驱动,实现前端接口.
气球技术的作用和原理
作用: 通常来说,要改变客户机占用的宿主机内存, 要先关闭客户机,修改启动时的配置,然后重启客 户机才实现,而ballooning技术可以在客户机运行 时动态地调整它所占用的宿主机内存资源,而不是 关闭客户机。它是客户机的balloon driver通过virtio 虚 拟 队 列 接 口 和 宿 主 机 协 同 工 作 来 完 成 的 。 balloonDriver的作用在于它既可以膨胀自己使用内 存大小也可以缩减内存使用量.
V2V在线迁移的特点、作用及KVM中的运行步骤
V2V即虚拟机到虚拟机的迁移
V2V在线迁移的作用: V2V 在线迁移大大的减少了虚拟机的迁移的停机时间。
V2V在线迁移的特点:V2V迁移是在虚拟机之间移动操作系统和数据,考虑宿 主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理 机上的VMM迁移到另一个物理机的VMM,这两个VMM的类 型可以相同,也可以不同。如VMware迁移到KVM,KVM迁 移到KVM。可以通过多种方式将虚拟机从一个VM Host系统 移动到另一个VM Host系统。
KVM中的运行步骤:
(1)系统验证目标服务器的存储器和网络设置是否正确,并预保留目标服 务器虚拟机的资源。 (2)当虚拟机还在源服务器上运转时,第一个循环内将全部内存镜像复制 到目标服务器上。在这个过程中,KVM 依然会监视内存的任何变化。
(3)以后的循环中,检查上一个循环中内存是否发生了变化。 假如发生了 变化,那么VMM 会将发生变化的内存页即dirty pages重新复制到目标服务 器中,并覆盖掉先前的内存页。在这个阶段,VMM依然会继续监视内存的变 化情况。
(4)VMM持续内存复制循环,陆续需要复制的脏页逐渐减少,直到达到一 定条件时(如源、目标服务器内存差异达到一定标准),内存复制操作结束, 同时停止源服务器。
(5)在源、目标服务器都停机的情况下,将最后一个循环的脏页和原服务 器设备的工作状态传输复制到目标服务器
(6)最后,将存储从源服务器上解锁,并锁定到目标服务器上。启动目标 服务器,恢复与存储网络资源的连接,接替原服务器继续运行。
KVM虚拟化的安全技术架构
(1)QEMU与Libvirt间的通信安全
(2)QEMU模块的安全性
(3)QEMU与KVM模块间的通信安全
(4)KVM模块安全
(5)虚拟机完整性检查
(6)虚拟机数据保护
(7)虚拟机网络安全
QEMU monitor的基本使用
QEMU监控器(monitor)是QEMU与实现用户交互的一 种控制台,一般用于为QEMU模拟器提供较为复杂的功能, 包括为客户机添加和移动一些媒体镜像,暂停和继续客户 机的运行,快照的建立和删除,从磁盘文件中保存和恢复 客户机状态,客户机动态迁移,查询客户机当前各种状态 参数等。
2 设备类命令
change命令改变一个设备的配置,如“change vnc localhost:2”改变VNC的配置, “change vnc password”更改VNC连接的密码, “change ide1-cd0 /path/a.iso”改变客户机中光驱加载的光盘。
usb_add和usb_del命令添加和移除一个USB设备,如“usb_add host:002.004”表示添加宿主机的 002号USB总线中的004设备到客户机中, “usb_del 0.2”表示删除客户机中某个USB设备。
d e v i c e _ a d d 和 d e v i c e _ d e l 命 令 动 态 添 加 或 移 除 设 备 , 如 “ d e v i c e _ a d d p c i - assign,host=02:00.0,id=mydev”将宿主机中的BDF编号为0.2:00.0的PCI设备分配给客户机,而 “device_del mydev”移除刚才添加的设备。
mouse_move命令移动鼠标光标到指定坐标,例如“mouse_move 500 500”将鼠标光标移动到坐标 为(500,500)的位置。
mouse_button命令模拟点击鼠标的左中右键,1为左键, 2为中间键,4为右键。
sendkey keys命令向客户机发送keys按键(或组合键),就如同非虚拟环境中那样的按键效果。如果 同时发送的是多个按键的组合,则按键之间用“-”来连接。如“sendkey ctrl-alt-f2”命令向客户机发 送“ctrl-alt-f2”键,将会切换客户机的显示输出到tty2终端; “snedkey ctrl-alt-delete”命令则会发送 “ctrl-alt-delete”键,在文本模式中该组合键会重启系统。
3 客户机类命令
savevm、loadvm和delvm命令创建、加载和删除客户机的快照, 如“savevm mytag”表示根据当前客户机状态创建标志为“mytag”的快照, “loadvm mytag”表示加载客户机标志为“mytag”快照时的状态,而“del mytag”表示删除“mytag”标志的客户机快照。
migrate和migrate_cancel命令动态迁移和取消动态迁移,如 “migrate tcp:des_ip:6666”表示动态迁移当前客户机到IP地址为“des_ip” 的宿主机的TCP6666端口上去,而“migrate_cancel”则表示取消当前进 行中的动态迁移过程。
commit命令提交修改部分的变化到磁盘镜像中(在使用了“- snapshot”启动参数),或提交变化部分到使用后端镜像文件。
system_powerdown、system_reset和system_wakeup命令,其中 system_powerdown命令向客户机发送关闭电源的事件通知,一般会让 客户机执行关机操作;system_reset命令让客户机系统重置,相当于直 接拔掉电源,然后插上电源,按开机键开机;system_wakeup将客户机 从暂停中唤醒.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。