精华内容
下载资源
问答
  • kvm虚拟化之IO虚拟化

    千次阅读 2018-01-27 20:24:42
    (文章来自作者维护的社区微信公众号【虚拟化云计算】) ... QEMU-KVM作为一个VMM提供了全虚拟化环境,guest不经过任何修改就能运行在KVM环境中。...在KVM中,要想提高IO虚拟化的效率,就要使用半...
    (文章来自作者维护的社区微信公众号【虚拟化云计算】)
    (目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问)
        QEMU-KVM作为一个VMM提供了全虚拟化环境,guest不经过任何修改就能运行在KVM环境中。不过KVM在IO虚拟化方面,使用QEMU纯软件的方式来模拟IO设备,效率并不高。在KVM中,要想提高IO虚拟化的效率,就要使用半虚拟化的方式:virtio。
     
    简单介绍全虚拟化和半虚拟化
        在全虚拟化 中,guest操作系统运行在VMM之上,并不知道它已被虚拟化,不需要任何更改就可以工作。相反,在半虚拟化中,guest操作系统不仅知道它运行在 VMM上,还需要做修改来对接VMM的代码。
        在全虚拟化中,VMM必须模拟设备硬件,尽管这种模拟很彻底很干净,但它效率低代码最复杂。在半虚拟化模式中,guest和 VMM共同合作,模拟更加高效。
     
    IO全虚拟化使用QEMU软件模拟
        1.当虚拟机进行I/O操作时,根据《也谈Intel的cpu虚拟化》我们知道,虚拟机通过VM exit将cpu控制权返回给VMM,从而陷入到root模式下的ring0内的VMM,进行”陷入模拟“。
        2.将本次I/O请求的信息存放到IO共享页,QEMU从IO共享页读取信息后由硬件模拟代码来模拟出本次的IO操作,并调用内核中的硬件驱动把IO请求发送到物理硬件,完成之后将结果放回到IO共享页。
        3.KVM模块中的捕获代码读取IO共享页中的结果,把结果返回到guest。
        4.通过VM entry,guest再次获得cpu控制权,根据IO返回的结果进行处理。
    说明:VMM和guest的IO信息共享不光IO共享页一种,还可以使用DMA。QEMU不把IO结果放到IO共享页中,而是通过DMA将结果直接写到guest的内存中去,然后通过KVM模块告诉客户机DMA操作已经完成。
    下面这张图(来自网络Eric博客)是软件模拟IO的流程图:
     
    IO半虚拟化virtio
        guest和host使用使用virtio前后端的技术减少了guest IO时的VM Exit(guest和host的上下文切换)并且使guest和host能并行处理IO来提高throughput和减少latency。但是IO的路径并没有比全虚拟化技术减少。下面是virtio的IO路径:
        guest在IO请求时,首先guest需要切换到host kernel,然后host kernel会切换到hyperisor来处理guest的请求,hypervisor通过系统调用将数据包发送到外部网络后切换回host kernel,然后再切换回guest。这个长IO路径和全虚拟化时相同的,只是减少了VM exit和VM entry。
     
    vhost
        为了解决virio的IO路径太长的问题,vhost产生了。它是位于host kernel的一个模块,用于和guest直接通信,所以数据交换就在guest和host kernel间进行,减少了上下文的切换。vhost相对与virto架构,把virtio驱动后端驱动从用户态放到了内核态中(vhost的内核模块充当virtiO后端驱动)
    下面这张图(来自redhat)描述了在virtio和vhost(vhost-net时vhost架构中的网卡实现)架构下内核的不同工作流程:
     
    下面这张图(来自intel)介绍了vhost工作原理:
     
    vhost-user
        vhost-user和vhost类似,只是使用一个用户态进程vhost-user代替了内核中的vhost模块。vhost-user进程和Guset之间时通过共享内存的方式进行数据操作。vhost-user相对与vhost架构,把virtio驱动后端驱动从内核态又放回到了用户态中(vhost-user进程充当virtiO后端驱动)。
    下面这张图(来自intel)介绍了vhost-user的工作原理:
     
    总结
        io虚拟化经历了从全虚拟化io到半虚拟化virtio。半虚拟化的后端驱动又经历了从VMM中到内核中,从内核中到用户空间中的过程。
     
    ============================================================
    关注微信公众号【虚拟化云计算】,阅读更多虚拟化云计算知识,纯技术干货更新不停。
    展开全文
  • IO虚拟化总结

    2012-06-09 11:00:41
    IO 虚拟化总结一篇文章 I/O虚拟化是一个在企业环境中用来简化管理,降低成本,提高服务器性能的的一种方法。I/O虚拟化环境通过在物理连接上抽象上层的协议形成。
  • 现在IO虚拟化有很多方式,有软件模拟、半虚拟化、设备直接分配、单根IO虚拟化。在《说一说虚拟化绕不开的io半虚拟化》一文中介绍了io的全虚拟化和半虚拟化。下面介绍一下IO的硬件辅助虚拟化。 Device Pas...
       (文章来自作者维护的社区微信公众号【虚拟化云计算】)
    (目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问)
        现在IO虚拟化有很多方式,有软件模拟、半虚拟化、设备直接分配、单根IO虚拟化。在《说一说虚拟化绕不开的io半虚拟化》一文中介绍了io的全虚拟化和半虚拟化。下面介绍一下IO的硬件辅助虚拟化。
     
    Device Passthrough
    1.PCI设备直接分配
        设备直接分配 (Device assignment)也称为 Device Pass-Through。就是将宿主机host中的物理 PCI 设备直接分配给客户机guest使用,虚拟机独占这个PCI设备。在guest进行对应的IO操作时,避免 了VM Exit 陷入VMM 中,极大提高了性能。
        在Intel平台上的Device assignment技术是VT-D(Intel Virtualization Technology for Directed I/O),是在VT-X的基础上对硬件辅助虚拟化的扩展。
    下图(来自intel《vt-directed-io-spec》)是软件模拟io虚拟化和intel的VT-D的对比原理图:
    2. VFIO
    另外一种设备直接分配的实现方式是VFIO。
    VFIO是一套用户态驱动框架,在虚拟化情景下,亦可用来在用户态实现device passthrough。
     
    PCI设备透传实践
    下面的例子是把host主机中个一个网卡透传给虚拟机使用。
    (在intel平台上要开启VT-d,内核要设置intel_iommu=on。)
     
    1.在host上查看网卡信息
    # lspci
    00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 04)
    04:00.0 Ethernet controller: Intel Corporation 82541PI Gigabit Ethernet Controller (rev 05)
    # ls /sys/bus/pci/devices/0000\:04\:00.0/net/
    eth1
    # cat /sys/class/net/eth1/address
    90:e2:ba:9f:7c:5a
     
     
    2.把pci设备从host中分离
    # virsh nodedev-list
    pci_0000_04_00_0
    # virsh nodedev-dettach pci_0000_04_00_0
    Device pci_0000_04_00_0 detached
     
     
    3.把pci设备分配给虚拟机
    虚拟机xml:
    <devices>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <source>
            <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
          </source>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>
        </hostdev>
    </devices>
     
     
    4.进入虚拟机查看pci是否进入
    # lspci
    00:10.0 Ethernet controller: Intel Corporation 82541PI Gigabit Ethernet Controller (rev 05)
    # cat /sys/class/net/eth1/address
    90:e2:ba:9f:7c:5a
     
    可以看出虚拟机中的网卡就是原来host中的网卡。并且此时在host的/sys/class/net/中已经看不到这个网卡了。
     
    5.把pci设备还给host:
    # virsh nodedev-reattach pci_0000_04_00_0
     
     
    ==============================================================
    关注微信公众号【虚拟化云计算】,阅读更多虚拟化云计算知识,纯技术干货更新不停。
     
    展开全文
  • 网络IO虚拟化

    千次阅读 2017-03-28 11:30:51
    传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探究里面,我们最主要介绍网络设备IO和块设备IO,其实他们的原理都很像,但是在虚拟化层又分化开了,这也是为什么网络设备IO虚拟化和块设备IO...

    IO 虚拟化简介

    前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理。作为一个完整的风诺依曼计算机系统,必然有输入计算输出这个步骤。传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探究里面,我们最主要介绍网络设备IO和块设备IO,其实他们的原理都很像,但是在虚拟化层又分化开了,这也是为什么网络设备IO虚拟化和块设备IO虚拟化要分开讲的原因。这一章介绍一下网络设备IO虚拟化,下一章介绍块设备IO虚拟化。

    传统的网络IO流程

    这里的传统并不是真的传统,而是介绍一下在非虚拟化环境下的网络设备IO流程。我们平常所使用的Linux版本,比如Debian或者CentOS等都是标准的Linux TCP/IP协议栈,协议栈底层提供了driver抽象层来适配不同的网卡,在虚拟化中最重要的是设备的虚拟化,但是了解整个网络IO流程后去看待虚拟化就会更加容易理解了。

    标准的TCP/IP结构

    在用户层,我们通过socket与Kernel做交互,包括创建端口,数据的接收发送等操作。
    在Kernel层,TCP/IP协议栈负责将我们的socket数据封装到TCP或者UDP包中,然后进入IP层,加入IP地址端口信息等,进入数据链路层,加入Mac地址等信息后,通过驱动写入到网卡,网卡再把数据发送出去。如下图所示,比较主观的图。


    在Linux的TCP/IP协议栈中,每个数据包是有内核的skb_buff结构描述的,如下图所示,socket发送数据包的时候后,进入内核,内核从skb_buff的池中分配一个skb_buff用来承载数据流量。


    当数据到了链路层,链路层做好相应的链路层头部封装后,调用驱动层适配层的发送接口 dev_queue_xmit,最终调用到 net_start_xmit 接口。


    发送数据和接收数据驱动层都采用DMA模式,驱动加载时候会为网卡映射内存并设置描述状态(寄存器中),也就是内存的起始位,长度,剩余大小等等。发送时候将数据放到映射的内存中,然后设置网卡寄存器产生一个中断,告诉网卡有数据,网卡收到中断后处理对应的内存中的数据,处理完后向CPU产生一个中断告诉CPU数据发送完成,CPU中断处理过程中向上层driver通知数据发送完成,driver再依次向上层返回。在这个过程中对于driver来说,发送是同步的。接收数据的流程和发送数据几乎一致,这里就不细说了。DMA的模式对后面的IO虚拟化来说很重要。


    KVM 网络IO虚拟化

    准确来说,KVM只提供了一些基本的CPU和内存的虚拟化方案,真正的IO实现都由qemu-kvm来完成,只不过我们在介绍KVM的文章里都默认qemu-kvm和KVM为一个体系,就没有分的那么仔细了。实际上网络IO虚拟化都是由qemu-kvm来完成的。

    KVM 全虚拟化IO

    还记得我们第一章节的demo里面,我们的“镜像”调用了 out 指令产生了一个IO操作,然后因为此操作为敏感的设备访问类型的操作,不能在VMX non-root 模式下执行,于是VM exits,模拟器接管了这个IO操作。

    switch (kvm->vcpus->kvm_run->exit_reason) {
            case KVM_EXIT_UNKNOWN:
                printf("KVM_EXIT_UNKNOWN\n");
                break;
            // 虚拟机执行了IO操作,虚拟机模式下的CPU会暂停虚拟机并
            // 把执行权交给emulator
            case KVM_EXIT_IO:
                printf("KVM_EXIT_IO\n");
                printf("out port: %d, data: %d\n", 
                    kvm->vcpus->kvm_run->io.port,  
                    *(int *)((char *)(kvm->vcpus->kvm_run) + kvm->vcpus->kvm_run->io.data_offset)
                    );
                break;
            ...

    虚拟机退出并得知原因为 KVM_EXIT_IO,模拟器得知由于设备产生了IO操作并退出,于是获取这个IO操作并打印出数据。这里其实我们就最小化的模拟了一个虚拟IO的过程,由模拟器接管这个IO。

    在qemu-kvm全虚拟化的IO过程中,其实原理也是一样,KVM捕获IO中断,由qemu-kvm接管这个IO,由于采用了DMA映射,qemu-kvm在启动时候会注册设备的mmio信息,以便能获取到DMA设备的映射内存和控制信息。

    static int pci_e1000_init(PCIDevice *pci_dev)
    {
        e1000_mmio_setup(d); 
        // 为PCI设备设置 mmio 空间
        pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mmio); 
        pci_register_bar(&d->dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &d->io);
        d->nic = qemu_new_nic(&net_e1000_info, &d->conf, object_get_typename(OBJECT(d)), d->dev.qdev.id, d);   
        add_boot_device_path(d->conf.bootindex, &pci_dev->qdev, "/ethernet-phy@0"); 
    }

    对于PCI设备来说,当设备与CPU之间通过映射了一段连续的物理内存后,CPU对PCI设备的访问只需要像访问内存一样访问既可以。IO设备通常有两种模式,一种是port模式,一种是MMIO模式,前者就是我们demo里面的in/out指令,后者就是PCI设备的DMA访问方式,两种方式的操作都能被KVM捕获。

    于是qemu-kvm将此操作代替Guest完成后并执行相应的“回调”,也就是向vCPU产生中断告诉IO完成并返回Guest继续执行。vCPU中断和CPU中断一样,设置相应的寄存器后中断便会触发。

    在全虚拟化环境下,Guest中的IO都由qemu-kvm接管,在Guest中看到的一个网卡设备并不是真正的一块网卡,而是由物理机产生的一个tap设备。知识在驱动注册的时候将一些tap设备所支持的特性加入到了Guest的驱动注册信息里面,所以在Guest中看到有网络设备。


    如上图所示,qemu接管了来自Guest的IO操作,真实的场景肯定是需要将数据再次发送出去的,而不是像demo一样打印出来,在Guest中的数据包二层封装的Mac地址后,qemu层不需要对数据进行拆开再解析,而只需要将数据写入到tap设备,tap设备和bridge之间交互完成后,由bridge直接发送到网卡,bridge(其实NIC绑定到了Bridge)开启了混杂模式,可以将所有请求都接收或者发送出去。

    以下来自这篇文章的引用

    当一个 TAP 设备被创建时,在 Linux 设备文件目录下将会生成一个对应 char 设备,用户程序可以像打开普通文件一样打开这个文件进行读写。当执行 write()操作时,数据进入 TAP 设备,此时对于 Linux 网络层来说,相当于 TAP 设备收到了一包数据,请求内核接受它,如同普通的物理网卡从外界收到一包数据一样,不同的是其实数据来自 Linux 上的一个用户程序。Linux 收到此数据后将根据网络配置进行后续处理,从而完成了用户程序向 Linux 内核网络层注入数据的功能。当用户程序执行 read()请求时,相当于向内核查询 TAP 设备上是否有需要被发送出去的数据,有的话取出到用户程序里,完成 TAP 设备的发送数据功能。针对 TAP 设备的一个形象的比喻是:使用 TAP 设备的应用程序相当于另外一台计算机,TAP 设备是本机的一个网卡,他们之间相互连接。应用程序通过 read()/write()操作,和本机网络核心进行通讯。

    类似这样的操作

    fd = open("/dev/tap", XXX)
    write(fd, buf, 1024);
    read(fd, buf, 1024);

    bridge可能是一个Linux bridge,也可能是一个OVS(Open virtual switch),在涉及到网络虚拟化的时候,通常需要利用到bridge提供的VLAN tag功能。

    以上就是KVM的网络全虚拟化IO流程了,我们也可以看到这个流程的不足,比如说当网络流量很大的时候,会产生过多的VM的切换,同时产生过多的数据copy操作,我们知道copy是很浪费CPU时钟周期的。于是qemu-kvm在发展的过程中,实现了virtio驱动。

    KVM Virtio 驱动

    基于 Virtio 的虚拟化也叫作半虚拟化,因为要求在Guest中加入virtio驱动,也就意味着Guest知道了自己运行于虚拟环境了。


    不同于全虚拟化的方式,Virtio通过在Guest的Driver层引入了两个队列和相应的队列就绪描述符与qemu-kvm层Virtio Backend进行通信,并用文件描述符来替代之前的中断。
    Virtio front-end与Backend之间通过Vring buffer交互,在qemu中,使用事件循环机制来描述buffer的状态,这样当buffer中有数据的时候,qemu-kvm会监听到eventfd的事件就绪,于是就可以读取数据后发送到tap设备,当有数据从tap设备过来的时候,qemu将数据写入到buffer,并设置eventfd,这样front-end监听到事件就绪后从buffer中读取数据。

    可以看到virtio在全虚拟化的基础上做了改动,降低了Guest exit和entry的开销,同时利用eventfd来建立控制替代硬件中断面膜是,一定程度上改善了网络IO的性能。
    不过从整体流程上来看,virtio还是存在过多的内存拷贝,比如qemu-kvm从Vring buffer中拷贝数据后发送到tap设备,这个过程需要经过用户态到内核态的拷贝,加上一系列的系统调用,所以在流程上还可以继续完善,于是出现了内核态的virtio,被称作vhost-net。

    KVM Vhost-net

    我们用一张图来对比一下virtio与vhost-net,图片来自redhat官网。


    vhost-net 绕过了 QEMU 直接在Guest的front-end和backend之间通信,减少了数据的拷贝,特别是减少了用户态到内核态的拷贝。性能得到大大加强,就吞吐量来说,vhost-net基本能够跑满一台物理机的带宽。
    vhost-net需要内核支持,Redhat 6.1 后开始支持,默认状态下是开启的。

    总结

    KVM的网络设备IO虚拟化经过了全虚拟化->virtio->vhost-net的进化,性能越来越接近真实物理网卡,但是在小包处理方面任然存在差距,不过已经不是一个系统的瓶颈了,可以看到KVM在经过了这多年的发展后,性能也是越发的强劲,这也是他领先于其他虚拟化的重要原因之一。
    在本章介绍了IO虚拟化后,下一章介绍块设备的虚拟化,块设备虚拟化同样利用了DMA的特性。

    文章属原创,转载请注明出处 联系作者: Email:zhangbolinux@sina.com QQ:513364476
    转载地址:http://www.cnblogs.com/Bozh/p/5788364.html
    展开全文
  • vmware IO虚拟化调研资料 ppt vsphere 网络及存储架构图
  • kvm虚拟化之硬件辅助IO虚拟化之SR-IOV

    千次阅读 2018-01-27 20:43:18
    (文章来自作者维护的社区微信公众号【虚拟化云计算】...SR-IOV是什么,它和virtio、Device assignment的IO虚拟化的技术有什么区别,本文中将会解答。 SR-IOV简介 SR-IOV(PCI-SIG Single Root I/O Virtualizati...
    (文章来自作者维护的社区微信公众号【虚拟化云计算】)
    (目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问)
    SR-IOV是什么,它和virtio、Device assignment的IO虚拟化的技术有什么区别,本文中将会解答。
     
    SR-IOV简介
    SR-IOV(PCI-SIG Single Root I/O Virtualization and Sharing)是PCI-SIG组织发布的规范。
    设计PCI-SIG SR-IOV 规范的目的是:通过为虚拟机提供独立的内存地址、中断和DMA流而避免VMM的介入。SR-IOV允许一个PCI设备提供多个VFs。VMM将一个或者多个 VF 分配给一个虚机。一个VF同时只能被分配一个虚机。而虚拟机感知不到这个网卡是被VF的还是普通的物理网卡。
     
    SR-IOV引入了两个PCIe的function types
    PFs:包括管理SR-IOV功能在内的所有PCIe function。
    VFs:一部分轻量级的PCIe function,只能进行必要的数据操作和配置。
     
    SR-IOV工作流程中有三个角色
    1.PCIe的SR-IOV机制:提供独立可配置的多个VFs,每一个VFs具有独立的PCIe配置空间。
    2.VMM:则把VFs分配给虚拟机。
    3.VT-x和VT-d:通过硬件辅助技术提供和虚拟机之间的直接DMA数据映射传输,跳过VMM的干预。
     
    SR-IOV原理
    下面一幅图描述了SR-IOV的原理(来自intel《PCI-SIG SR-IOV Prime》):
     
    SR-IOV的优缺点
    SR-IOV相对与软件模拟IO虚拟化的优点:
    1.降低了IO延迟和对CPU的占用,获得了接近原生的IO性能,因为虚拟机直接使用VFs,没有了VMM的陷入处理。
    2.数据更加安全,因为每个VF属于一个IOMMU Group,共享IOMMU Group的设备不能分配给不同的虚拟机,而每个IOMMU Group又有独立的内存。
     
    SR-IOV相对与Device assignment的优点:
    没有了一个PCI设备只能给一个虚拟机的尴尬,SR-IOV下多个虚拟机可通过独占VFs的方式共享一个PCI设备。
     
    SR-IOV的缺点:
    使用了VFs的虚拟机不能在线迁移。
     
    注:在SR-IOV的实践过程中需要注意PCI的ACS等特性。
     
     
    ============================================================
    关注微信公众号【虚拟化云计算】,阅读更多虚拟化云计算知识,纯技术干货更新不停。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    展开全文
  • 服务器虚拟化的实现有三个部分的实现,包括CPU虚拟化,内存虚拟化和IO虚拟化。 一、CPU虚拟化: CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间...
  • IO虚拟化——SR-IOV 原理

    千次阅读 2020-02-11 21:01:18
    第二部分:IO 虚拟化 第三部分:SR-IOV 第四部分:Intel网卡在VMware 环境 实现 SR-IOV 需要的条件和配置方法 第五部分:SR-IOV 在Red Hat Virtualization 的配制方法 第一部分:虚拟化通信延迟: 生产业务中...
  • IO虚拟化及虚拟化模型

    万次阅读 2014-12-11 14:23:44
    1、I/O虚拟化简介   I/O虚拟化(Input/output virtualization,简称IOV)是虚拟化的一种新形式,是来自物理连接或物理运输上层协议的抽象,让物理服务器和虚拟机可以共享I/O资源。  在现实生活中,可用的物理...
  • Virtualization-Cpu/Memory/IO虚拟化详解

    千次阅读 2017-08-25 19:54:59
    Virtualization-Cpu/Memory/IO虚拟化详解 虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立...
  • KVM原理与架构系列之五 IO虚拟化

    千次阅读 2016-03-17 21:59:20
    IO虚拟化 1. 基本原理 KVM虚拟化环境中,有两种IO虚拟化方式(纯软件方式(Qemu模拟)和基于硬件虚拟化特性的方式) ■ 纯软件方式是通过Qemu-kvm来模拟相应IO指令的方式,大致流程为:    1. 当Guest OS...
  • Intel 虚拟化技术的优势,包括可以在同一平台的独立资料分割上,执行多个作业系统和应用程式。有了虚拟化技术,同一部电脑就可以有多个「虛拟」系统的分身功能。Intel 虚拟化技術全面性地增强了 Intel 的各个平台,...
  • 前言:本文针对intel VT-X技术,结合QEMU和KVM代码以及自己写的实例详细分析了一个虚拟设备的IO虚拟化过程。虽然现在KVM虚拟化性能非常好,发展也非常迅速,但是资料相对比较少,理论知识不是很成熟,其中理解上可能...
  • IO虚拟化——virtio 原理

    千次阅读 2020-02-12 20:55:58
    virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信...
  • 虚拟化原理之xen-io虚拟化

    千次阅读 2012-11-29 11:50:35
    第4章 io设备虚拟化 Io设备的虚拟化,不可避免要涉及到设备的概念和隐藏在设备背后的总线。理解了这两个概念,就比较容易理解io设备的虚拟化。 4.1 设备,总线和驱动 设备是计算机系统中一个重要概念。通常的...
  • kvm-qemu 设备IO虚拟化

    千次阅读 2018-09-24 10:59:09
    虚拟设备的IO地址注册 ...在QEMU中,在初始我们的硬件设备的时候需要注册我们的IO空间,在这里有下面两种IO注册方法: (1) PIO(port IO) 端口IO (2) MIO(memory may IO)内存映射IO 为了说明原理,...
  • IO虚拟化 - virtio介绍及代码分析【转】

    千次阅读 多人点赞 2019-04-14 16:04:44
    Virtio是linux平台下一种IO虚拟化框架,virtio 由 Rusty Russell 开发,他当时的目的是支持自己的虚拟化解决方案 lguest。而在KVM中也广泛使用了virtio作为半虚拟化IO框架。本文主要介绍virtio的设计及在kvm中的...
  • 1,先说下IO虚拟化的指标: 性能和通用性,这里硬件虚拟化中主要添加的功能是性能的扩展。因为基于纯软件的方式可以看出性能并不太好,因为中间的指令都是经过模拟,模拟的性能远不及虚拟。 所以intel引入 VT-...
  • 1,首先明确,如果以纯软件的方式去模拟IO,那简直是作死。因为大部分都是用模拟的方式,这样效率不会太高。 ...所以说,MMIO映射的方式,本质上还是内存虚拟化中影子页表的方式。
  • Kvm是一种全虚拟化架构的虚拟机,其IO通常由qemu进行模拟实现,相比半虚拟化方案xen,其IO效率相对较低,为了提高kvm的IO效率,在其中引入virtio模块。Virtio是一种linux的半虚拟化IO框架,对块设备、网络等进行了...
  • IO虚拟化——Intel VT-d原理

    千次阅读 2020-02-13 20:41:29
    Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA...
  • 四种主要网络IO虚拟化模型

    千次阅读 2016-04-26 14:24:28
    随着硬件虚拟化对网络I/O的支持,虚拟化的网络I/O模型也不断的进化,虚拟化的I/O性能也不断提升。  这4个主流网络I/O模型分别是:  1、Emulation  原理:仿真(emulation)是一个完全通过软件程序来模拟...
  • 后端驱动在qemu中实现,为前端驱动提供IO内存并初始化虚拟设备配置信息,与前端驱动交互,通过虚拟队列(环形缓冲区)、IO内存读写、中断等机制完成设备的访问。 2. 后端驱动初始 后端驱动的主要作用是为前端驱动...
  • IO虚拟化和AMD的IOMMU

    千次阅读 2007-08-23 13:23:00
    I/O Virtualization and AMD’s IOMMUAMD64s virtualization extensions provide hardware support for VMM CPU virtualization, but thats only half the picture. I/O virtualization is the other half, and i
  • 当前的主流虚拟化实现技术分为两种: VMM(虚拟化监控器)运行在硬件平台上,控制所有硬件并管理guest os。guest os运行在比VMM更高的级别。例如xen。 VMM运行在宿主操作系统上,宿主操作系统作为第一软件层,VMM作为...
  • KVM中的网络IO设备虚拟化方式

    千次阅读 2016-08-15 15:28:23
    那么对于像磁盘驱动器,网卡等io设备来说,KVM提供两种虚拟化方式:采用全虚拟化纯软件实现的QEMU/KVM方式,采用半虚拟化的virtio方式。 如上图,在一些桌面虚拟化产品里,默认采用的是QEMU/KVM方

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 140,017
精华内容 56,006
关键字:

io虚拟化