网络I/O不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤。随着硬件虚拟化对网络I/O的支持,虚拟化的网络I/O模型也不断的进化,虚拟化的I/O性能也不断提升。

  这4个主流网络I/O模型分别是:

  1、Emulation

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

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

  VMwareEmulation类型网卡有:E1000(仿真intel82545M千兆网卡)、Flexible、Vlance(仿真AMC79C970PCnet32LANCE10M网卡)、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(仿真RealTekLink8139100M网卡)、E1000(仿真intel82545M千兆网卡)。

  MicrosoftHyper-VEmulation类型网卡有:Intel/DEC21140100M网卡

  优点:软件模拟不需要硬件支持,通过CPU计算来模拟,跟宿主机物理网卡隔离,没有平台要求。

  虚拟机操作系统不需要修改,模拟的都是常见网卡(比如:IntelE1000、RTL8139等),主流操作系统都已经自带这些驱动,因此默认情况下虚拟机不需要再安装驱动。

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

  虚拟机迁移支持:

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

  2、para-virtualization

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

  Para-virtualization又称半虚拟化,最开始由XEN提出的,XEN本身就是从虚拟化起家的。Para-virtualization模型下,虚拟子机的网卡驱动只能有Hypervisor厂商来开发,Redhat、VMware、Citrix、Microsoft这几大虚拟厂商都有各自的para-virtualization驱动。比如Redhat的KVM就叫virtio,VMware的有VMXNET2、VMXNET3,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使用通常结合intelVT-D(AMD也有类似技术)来使用,通过iommu保证虚拟子机之间内存访问不冲突。这种技术在VMware上叫VMDirectPathI/O,其他方案中没有找到相关专门名词。

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

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

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

  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方式分配给虚拟子机。

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

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

  缺点:待定

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

转载地址:http://virtualization.ctocio.com.cn/177/12476177.shtml

四种主要网络IO虚拟化模型相关推荐

  1. 转:VMware、微软等四种主要的网络IO虚拟化模型

    本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型(emulation.para-virtualization.pass-t ...

  2. 网络模型——四种常见网络IO模型

    文章目录 1.IO读写原理 1.1 内核缓冲区和进程缓存区 1.1.1 用户进程和操作系统 1.1.2 缓冲区的目的 1.2 Java读写IO底层流程 2.四种主要的IO模型 2.1 基本概念 2.1 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输入 ...

  4. 【docker系列】四种基础网络模式及自定义网络

    文章目录 一.docker网络顶层设计 二.CNM三要素 三.默认创建的网络 四.bridge网络模式(默认) 五.none网络模式 六.host网络模式 七.container复用模式 八.自定义b ...

  5. jvm内存模型_四种视角看JVM内存模型

    1.JVM运行视角 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区           1 .程序计数器         程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的行号 ...

  6. Tomcat网络IO NIO模型参数设定

    2019独角兽企业重金招聘Python工程师标准>>> 1 默认IO模型 1.1 配置项的解析 Tomcat 7.0.35 的配置文件是$CATALINA_HOME/conf/ser ...

  7. 网络IO模型详细分析

    截取自[原文链接] 常见的IO模型有阻塞.非阻塞.IO多路复用,异步.以一个生动形象的例子来说明这四个概念.周末我和女友去逛街,中午饿了,我们准备去吃饭.周末人多,吃饭需要排队,我和女友有以下几种方案 ...

  8. python 网络编程 异步io_python网络编程——网络IO模型

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...

  9. ​网络 IO 演变发展过程和模型介绍

    作者:jaydenwen,腾讯 pcg 后台开发工程师 在互联网中提起网络,我们都会避免不了讨论高并发.百万连接.而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特 ...

最新文章

  1. 通过微信公众号获取用户信息(java版)
  2. 微信notify mysql_微信支付的notify.php中如何获取订单号(php版)
  3. 吴恩达 coursera ML 第十五课总结+作业答案
  4. quartz获取开始结束时间_王者荣耀s21什么时候开始是9月24日吗?王者荣耀s20赛季结束时间...
  5. uclinux多线程应用-网络通信[转]
  6. 黑色响应式全屏滚动主页源码
  7. Python 城市列表
  8. C# WPF仿360安全卫士11
  9. CSS中如何设拉伸背景图片铺满屏幕
  10. mysql blob类型图片输出到前端
  11. ## 关于时下新兴的日常图片视频摄像防抖技术的简单介绍与讨论
  12. Android:Content has been consumed
  13. The Joel Test:Joel 用来评价软件开发团队成熟度的12个问题
  14. 新媒体运营教程:教你如何写推广策划案?
  15. 什么是剩余参数 ...arg
  16. REASONING ABOUT ENTAILMENT WITH NEURAL ATTENTION 论文阅读笔记
  17. 【看表情包学Linux】进程创建 | 进程终止 | 分叉函数 fork | 写时拷贝 | 内核数据结构缓冲池 | slab 分派器
  18. multisim 常见报错
  19. WireShark基本使用(1)第一章WireShark简介+练习题
  20. 四、Transforms

热门文章

  1. TM4C123GXL_PWM
  2. 自然语言处理(二)基于CNN的新闻文本分类
  3. windows 平台使用dul 抽取Linux oracle ASM 磁盘数据文件
  4. Python版 孤勇者 | 画图+演奏+音乐可视化
  5. 智能家居带动路由器换代潮 中高端市场大门已敞开
  6. 蓝牙耳机音质真的不好吗?初级发烧友应该选择什么样式蓝牙耳机
  7. 活码二维码(动态二维码)素材库管理教程
  8. 音视频篇 - FFmpeg 的介绍和使用
  9. Java获取2021年所有日期和节假日工作日状态
  10. js获取当前日期前12月后12月日期