虚拟化:知识点搜集(一)kvm/qemu/virtio...


转载参考:https://baike.baidu.com/item/Virtio/2997269?fr=aladdin
1.半虚拟化hypervisor之上的抽象层
2.目的是支持自己的虚拟化解决方案
3.是对半虚拟化hypervisor中的一组通用模拟设备的抽象,该设置还允许hypervisor导出一组通用的模拟设备
4.来宾操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟。
5.后端驱动程序不需要是通用的,因为他们只实现前端所需的行为


6.前端驱动程序(在来宾操作系统中实现)和后端驱动程序(在hypervisor中实现)
转载参考:https://zhuanlan.zhihu.com/p/542727806
7.定义了两个层来支持来宾操作系统到hypervisor的通信,
8.在顶级的是虚拟队列接口,他在概念上将前端驱动程序附加到后端驱动程序
9.驱动程序可以使用0个或多个队列,具体数量取决于需求
10.virtio网络驱动程序使用两个虚拟队列
    一个用于接收,另一个用于发送。
    而virtio块驱动程序仅使用一个虚拟队列
11.虚拟队列实际上被实现为跨越来宾操作系统和hypervisor的衔接点
12.虚拟机网络连接的顺序
    vm->virtio-net->host请求数据->virtio->vm
13.整个过程尽量让主机硬件完成更多工作,让virtio处理和接收数据
14.这样相比于纯软件模拟设备,将大量的工作offload到宿主机可以让vm执行的效率更快
15.virtio设备和驱动程序,必须满足标准要求
16.feature bits,statuses,configuration,general operations等
17.无论运行在什么环境下,只要使用virtio,其核心框架必须是一样的
18.虚拟化和模拟

19.模拟,通过软件模拟实现填补硬件缺失,这样宿主的cpu需要运行额外的代码
20.虚拟化的核心思想是:每个虚拟机都可以访问主机硬件的那一部分,
    软件将主机的物理硬件进行拆分,共虚拟机使用
21.由于虚拟化会分割主机的资源,所以虚拟机自然会受到宿主机硬件的限制,virtio是对io的虚拟化
22.即提供宿主机和虚拟机之间用于io设备的通信框架

23.前端驱动,后端设备,virtQueue & vRing

    guest - userspace
    -------------------------------------------------
    guest - kernal
        front-end virtio devices ::: virtio-net driver  virtio-scsi driver
                virtQueues
                 vRings
        back-end virtio devices ::: virtio-net devices virtio-scsi devices
    qemu
                        Notifications(VMexit,vcpu, IRQS
host-userspace
================================================================
                            KVM
host -kernal            

为什么会出现qemu和kvm的组合?
    以下大部分转载参考:https://blog.csdn.net/kwame211/article/details/81298127
23.kvm:kernal virtual machine 是linux的内核驱动模块
    他能让Linux主机成为一个hypervisor(虚拟机监控器)
    在支持VMX(virtual machine extension)功能的x86处理器中
    linux在原有的用户模式和内核模式中新增了客户模式
    并且客户模式也拥有自己的内核模式和用户模式
    虚拟机就是运行在客户模式中。
    kvm的职责就是打开并初始化vmx功能
    以下参考连接:https://blog.csdn.net/weixin_43266367/article/details/88397930
    kvm是linux内核的虚拟化架构,它需要硬件的cpu支持
    比如需要硬件辅助虚拟化的intel-VT,amd-V技术
    相关的内核模块包括kvm-intel.ko等
    kvm本身不实现模拟,仅暴露一个接口/dev/kvm
    用户态的应用程序可以通过访问这个接口的ioctl函数来实现vcpu的创建,和内存的地址空间分配

24.QEMU: quick emulator本身并不包含或依赖KVM,
    是一套由Fabrice Bellard 编写的模拟计算机软件系统
    qemu是一个纯软件的实现,可以在没有kvm的情况下独立运行
    但是性能比较低
    qemu有整套的虚拟机实现,包括处理器虚拟化,内存虚拟化以及I/O设备的虚拟化
    qemu是个用户空间的进程,而kvm是内核态的模块
    qemu需要特定的接口才能调用到KVM模块的功能
    由kvm模块负责将虚拟机处于   处理器的特殊模式运行
    qemu使用了kvm模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能
25.KVM+QEMU组合:
    kvm只模拟CPU和内存,因此一个客户机操作系统可以在宿主机上跑起来,但是无法看到他,
    QEMU把网卡和显示器留下来,组合在一起形成一个完整的虚拟化平台。但qemu不是唯一的选择
    参考连接:https://blog.csdn.net/weixin_43266367/article/details/88397930
    有了kvm之后,guest-os的指令不在需要经过qemu翻译就可以直接运行,大大提升了运行速度

26.qemu-kvm:
    1.提供对cpu,内存(kvm负责),io设备(qemu负责)的虚拟
    2.对各种虚拟设备的创建调用进行管理(qemu负责)


        
    
 

你可能感兴趣的:(虚拟化,虚拟化,kvm,virtio)