本文主要为大家简要介绍VMware、Redhat、Citrix、Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation、para-virtualization、pass-through、SR-IOV)。主要为大家穿针引线,信息量比较大,组织排 版有限,看官们将就点看着。

网络I/O不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤。随着硬件虚拟化对网络I/O的支持,虚拟化的网络I/O模型也不断的 进化,虚拟化的I/O性能也不断提升。今天给大家分享VMware、Redhat、Citrix、Microsoft主流虚拟化解决方案采用的4种主流网 络I/O模型,主要包括模型原理、模型优点、模型缺点、模型对虚拟化迁移的支持。

1、Emulation

原理:仿真(emulation)是一个完全通过软件程序来模拟硬件的技术。早期虚拟化都才采用这种方案来虚拟网络设备。常见仿真软件有QEMU、VMware WorkStation、VirtualBox。Emulation网络模型图如下:

  不同虚拟化厂商的虚拟网卡产品都不尽相同

VMware Emulation类型网卡有:E1000(仿真intel 82545M千兆网卡)、Flexible、Vlance(仿真AMC 79C970 PCnet32 LANCE 10M网卡)、VMXNET(VMXNET一共有3个版本,分别是VMXNET、VMXNET2、VMXNET3;暂时没有找到VMware的明确资料对 这三个版本进行分类。个人暂把VMXNET定为emulation、VMXNET2和VMXNET3定义为para-virtualization类型。 VMXNET3也支持部分SR-IOV功能)。

Redhat的KVM和Citrix的XEN这类型网卡都是采用QEMU实现,在KVM和XEN上面可用的emulation网卡有:RTL8139(仿真RealTek Link 8139 100M网卡)、E1000(仿真intel 82545M千兆网卡)。

Microsoft Hyper-V Emulation类型网卡有:Intel/DEC 21140 100M网卡

优点:软件模拟不需要硬件支持,通过CPU计算来模拟,跟宿主机物理网卡隔离,没有平台要求。虚拟机操作系统不需要修改,模拟的都是常见网卡(比如:Intel E1000、RTL8139等),主流操作系统都已经自带这些驱动,因此默认情况下虚拟机不需要再安装驱动。

缺点:CPU资源消耗大,尤其当虚拟机数量多的时候。网卡性能一般,由于是软件模拟,只能模拟常见的、功能比较简单的网卡。

虚拟机迁移支持:剥离了硬件要求,使用这类型可迁移性强。由于XEN和KVM都是使用qemu仿真,所以这类型虚拟机在XEN和KVM之间混合迁移实现难度也不大。

2、para-virtualization

原理:Para-virtualization又称半虚拟化,最早由Citrix的Xen提出使用。在半虚拟化 模型中,物理硬件资源统一由 Hypervisor管理,由Hypervisor提供资源调用接口。虚拟子机通过特定的调用接口与Hypervisor通信,然后完整I/O资源控制操 作。Para-virtualization模型图如下:

Para-virtualization又称半虚拟化,最开始由XEN提出的,XEN本身就是从虚拟化起家的。Para- virtualization模型下,虚拟子机的网卡驱动只能有Hypervisor厂商来开发,Redhat、VMware、Citrix、 Microsoft这几大虚拟厂商都有各自的para-virtualization驱动。比如Redhat的KVM就叫virtio,VMware的有 VMXNET2、VMXNET 3,Citrix的XEN叫xen-pv,Mircrosoft暂时没有找到(欢迎朋友们补充)。

优点:个人认为是一种改进版的emulation模型,但是由于子机和Hypervisor之间通信,性能比emulation要很多。

缺点:需要修改虚拟子机操作系统内核,添加不同Hypervisor厂商的网络驱动。比如 Linux(Redhat和Novell)就在发行版 里面 添加了Mircosoft的para-virtualizaiton网络驱动,同样Microsoft也在自己发行版里面添加对KVM的virtio和 xen-pv驱动支持。

虚拟机迁移支持:虽然不同虚拟化厂商的para-virtualization方案都不相同,由于主流操作系统都同时提供对这些方案的支持;所以这类型虚拟子机可迁移性也比较容易实现。

3、pass-through

原理:Hypervisor将一个PCI设备(可以是网卡、USB、光驱)直接分配给指定虚拟子机单独访问。为 了安全和稳定性考虑,pass- through使用通常结合intel VT-D(AMD也有类似技术)来使用,通过iommu保证虚拟子机之间内存访问不冲突。这种技术在VMware上叫VMDirectPath I/O,其他方案中没有找到相关专门名词。

优点:性能好。单独PCI设备分配给虚拟子机,虚拟子机直接跟物理设备通信。

缺点:设备只能被一个虚拟子机使用,配置也比较复杂,首先需要在hypervisor将指定设备通过PCI id方式分配给指定虚拟子机,然后虚拟子机识别到设备再安装驱动来使用。

迁移性:迁移性方面待研究,有兴趣的朋友可以补充完善。

4、SR-IOV

背景:pass-through模型让虚拟子机直接使用物理设备,这样使得虚拟子机的网络性能达到最优。SR- IOV主要用来解决pass- through只能被一台虚拟子机访问的问题。SR-IOV标准由PCI-SIG,这个标准实现需要CPU、芯片组和PCI设备(主要是网卡等I/O资 源)协同在硬件层面实现,SR-IOV被很多人认为是解决了虚拟化最后一公里的问题。模型图如下:

原理:SR-IOV需要网卡硬件支持,支持SR-IOV功能的网卡可以在Hypervior里面注册成多个网卡(每个网卡都独立的中断ID、收发队列、QOS管理机制)。每个设备可以通过pass-through方式分配给虚拟子机。

产品:常见就是基于intel 82599和82598芯片组的10Gb网卡。VMware、Redhat、Citrix和Microsoft都已经或者正在Hypervisor里面添 加这个功能的支持。不同厂商虚拟化方案都不尽相同,有兴趣可以 在google里面搜索到更多资料。

优点:优点不用说,X86虚拟化最新的IO虚拟化模型;虚拟机不但性能好,而且结合硬件功能,为虚拟机IO管理提出了一个新方案。

缺点:待定

迁移性:SR-IOV同时需要硬件和软件两个层面支持,虚拟子机在相同网卡主机之间迁移时理论上不会有问题。具体还要看虚拟化厂商实现。

原文链接

四种主要网络IO虚拟化模型的更多相关文章

  1. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  2. 四种读写方案IO流 (JAVA)

    File类用于访问文件或目录的属性 流:指一连串流动的字符,是以先进先出的方式发送信息的通道.程序和数据源之间是通过流联系起来的. 第一套:字节流读取写入方案 FileInputStream :字节流 ...

  3. Socket-IO 系列(一)Linux 网络 IO 模型

    Socket-IO 系列(一)Linux 网络 IO 模型 一.基本概念 在正式开始讲 Linux IO 模型前,先介绍 5 个基本概念. 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器, ...

  4. python网络编程——网络IO模型

    1 网络IO模型介绍 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:    (1)同步阻塞IO(Blocking IO):即传统的IO模型.    (2)同步非阻塞IO(Non-bl ...

  5. 网络IO之阻塞、非阻塞、同步、异步总结

    网络IO之阻塞.非阻塞.同步.异步总结 1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一 ...

  6. Java I/O演进与Linux网络I/O模型

    参考文章: 简书-浅谈Linux五种IO:http://www.jianshu.com/p/486b0965c296 一.linux基础概念 1.1 内存空间 linux系统中的使用的是虚拟存储器,即 ...

  7. 网络IO之阻塞、非阻塞、同步、异步总结【转】

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

  8. 网络IO

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

  9. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

随机推荐

  1. css新笔记

    这里的黑科技其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性. border-radius 很多开发者估计都没有正确认识这个border-radius,因为基本上很多人都是这么用的: ...

  2. CSS ::before 和 ::after 伪元素另类用法

    原文地址:http://justcoding.iteye.com/blog/2032627 CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是 ...

  3. TTradmin v1.1 - 免端口映射穿透任何内网、基于radmin核心的即时远程协助

        TTradmin 是一款免端口映射可直接穿透任何内网,基于radmin核心的即时远程协助软件.在使用的时候只需要保证“协助端”和“被协助端”使用同一个验证码即可实现安全便捷的远程控制,不需要进 ...

  4. python-正则表达式基础

    转载作者:AstralWind 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可 ...

  5. I2S/PCM/IOM-2、I2C/SPI/UART/GPIO/slimbus

    概述 I2S,PCM,IOM-2都是数字音频接口,传数据的. I2C,SPI,UART,GPIO是控制接口,传控制信令的. I2S I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频 ...

  6. 【leetcode❤python】 155. Min Stack

    #-*- coding: UTF-8 -*- class MinStack(object):    def __init__(self):        """      ...

  7. StringBuffer(线程安全)StringBuilder(非线程安全)

    StringBuffer属于线程安全,相对为重量级 StringBuilder属于非线程安全,相对为轻量级 线程安全的概念: 网络编程中许多线程可能会同时运行一段代码.当每次运行结果和单独线程运行的结 ...

  8. Windows下的Memcache安装

    Windows下的Memcache安装: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 'c:\memca ...

  9. URi和Url格式

    1.主要的区别 url一定是有scheme. uri不一定有scheme,可以是相对和绝对的.(相对是依赖环境的) 2.uri的结构(3种划分) 1)[scheme:]scheme-specific- ...

  10. 基于ubuntu 14搭建nginx+php+mysql环境

    基于最新的Ubuntu 14.04(2014年9月)搭建nginx.php.mysql环境, 以下全部命令行操作: 1 由于需要大量的权限操作,方便起见临时提升权限,使用root账号 sudo su ...