设为首页收藏本站language 语言切换
查看: 2224|回复: 1
收起左侧

[分享] 在AMD平台上实现KVM虚拟化技术 (25)

[复制链接]
发表于 2012-10-30 15:30:30 | 显示全部楼层 |阅读模式
虚拟的功能设备
实现虚拟的功能设备是支持虚拟机 IO 的第二种方法。虚拟的功能设备就是说虚拟机使用的 IO 设备不一定要遵守已有的设备标准如SCSI 协议,Intel 以太网卡的规范等等linux, 只要实现上能完成操作系统想要的功能即可,如支持磁盘数据块的传送,TCP/IP 网络包的传送,实现 IO 完成的通知等。 这种方式由于不遵守已有的设备格式和规范,无法使用客操作系统上已有的物理设备驱动,在 VMM 上虚拟化设备的同时,在客操作系统上也需要专有的驱动程序配合。
不同的 VMM 实现往往有自己独立的虚拟设备的实现机制,目前 KVM 采用的是称为 virtIO 的技术。 VirtIO 是 IBM 的Rusty Russell 提出的实现虚拟设备的规范,其核心思想是通过定义一个公共的 ABI, 让客户机操作系统以简易的方式向 VMM 告知其数据缓冲区,并以这些缓冲区为基础承载不同类型虚拟设备的数据交换。 在virtIO 的思想中,虽然逻辑数据是客主双方交换的,但缓冲区总是由客操作系统方面提供的。 以 Linux 客操作系统为例,VirtIO 的实现可简要描述如下linux:  
a.KVM 以仿真的PCI 设备的方式向客操作系统呈现每一个 VirtIO 设备。 所有类型的 VirtIO 设备都使用同一个 Device ID。 VirtIO 设备的类型由 PCI 设备的 subsystem Vendor Id 及 subsystem Device Id 来区分。目前已经实现的 VirtIO 设备包括 virtio_net, virtio_blk, virtio_baloon, virtio_console 及 virtio_hw_random。 在 Linux 上 virtio_pci 驱动的设备 probe 函数 virtio_pci_probe 最终会调用具体的 VirtIO 设备的 probe 函数( 如 virtnet_probe) 来识别其设备,建立相关的数据结构linux
b. 数据结构 structvirtio_device 用来代表被识别的每一个 virtIO 设备, 和该结构关联的是一组操作接口,包括 get, set,get_status, set_status,get_features,finalize_features,reset, find_vqs 及 del_vqs。 这些接口的作用就是通过对 virtIO 设备的配置空间的读写,来和设备进行交互,或对设备进行控制。 其中find_vqs 就是用来发现该 virtIO 设备的后端提高了那些 virtioqueuelinux
c. 在 virtIO 的框架中,用来在客户机操作系统和 VMM 之间实现数据传输的抽象机制就称为 virtioqueue。 Virtioqueue 就是一组操作接口, 包括 add_buf, get_buf, disable_cb, enable_cb, notify 以及 callback。 其中 callback是由具体类型的 virtIO 驱动实现的,其他几个操作的实现則由特定 Linux 版本的 virtioqueue 采用的具体实现方式确定。
详细:http://www.51rhca.com/archives/576

 楼主| 发表于 2012-10-31 17:28:17 | 显示全部楼层
谢谢
沙发 2012-10-31 17:28:17 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-28 19:58 , Processed in 0.129828 second(s), 26 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

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