• 【虚拟化】KVM


    目录

    KVM是什么呢

    kvm的组件:

    kvm功能特性:

    内存管理:

    硬件支持:

    存储:

    实时迁移:

    支持的GuestOS:

    kvm局限性:

    kvm管理工具:


    本文是梳理之前的KVM学习笔记,如果有说的不合适的地方,欢迎评论区提出~

    KVM是什么呢

    KVM是内核级别虚拟化,支持广泛的操作系统。

    在KVM架构中,每个虚拟机都是一个linux进程,每个虚拟的CPU都显示为一个常规的linux进程。但是KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向他提供模拟的IO,并将它的视频显示映射到宿主的显示屏上,这一部分由qemu负责。

    kernal based virtual machine 基于内核的虚拟机,是linux内核的一个模块,当kvm被装载至内核时,整个内核升级为hypervisior,因此linux内核的功能kvm几乎都可以使用。为了给每个虚拟机虚拟出多个CPU,KVM会虚拟出多个进程(2个CPU有两个进程)来实现虚拟的CPU,这一过程是受KVM的辅在内核中完成的

    kvm的组件:

    两类:

    /dev/kvm:工作于hypervisior,在用户(guest)空间可通过ioctl()请求来实现系统调用,来完成vm的创建,启动等功能,他是一个字符设备;/dev/kvm的功能:创建vm,为vm分配内存,读写vcpu的寄存器,向vcpu注入中断,运行vcpu等;vcpu是由host的线程模拟实现的

    qemu进程:工作于用户空间,主要用于实现模拟PC机的IO设备。

    kvm功能特性:

    内存管理

    • 支持使用huge page

    大页表作用:

    每个进程拿到的内存空间,进程的线性地址空间由内核离散映射到物理内存上,某个进程需要在CPU运行时,进程告诉CPU的是线性地址,(CPU将内核分配给进程的taskstruct装载映射表,然后找到线性地址对应的物理内存,)MMU来计算并完成线性地址到物理地址的转换。MMU中存放的是页表,对应关系

    如果频繁访问某一个数据,需要在MMU之前加一个缓存,在MMU转换之前先看缓存是否可以命中,当数据量很大的时候,缓存可能失效,因此系统调优有这样一个策略,调大页框大小,一个页框1M,这样相比之前的4K来说,这样存放的条目就变少了,MMU转换时,找的比较容易。

    • 支持使用因特尔扩展页表inter ept或amd rvi(快速虚拟化索引)技术来完成内存地址映射,直接从虚拟机的线性地址空间映射为物理机内核中地址空间,无需中间经过虚拟的内存地址空间转换,CPU利用率低,吞吐量高。
    • 支持KSM(kernal same-page merge),来降低内存占用
      • KSM:内核同页合并;KSM会扫描每个虚机的内存,如果虚机拥有相同的内存页面,KSM会将这些页面合并到一个共享的内面,所有虚机都可以访问,仅仅存储一个副本,如果要更改这个共享页面,你会得到自己的专用副本。

    硬件支持:

    取决于linux内核,因为kvm是基于内核的虚拟化

    存储:

    支持本地存储、网络附加存储(比如映像文件放在NAS上)、存储区域网络、分布式存储、

    实时迁移:

    当A机的硬件设备遭入侵或其他影响时,运行在hypervisior A 上的虚拟机能够实时迁移到hypervisior B上面。此过程依赖于共享存储

    支持的GuestOS:

    linux,windows,openssd,freebsd等很多操作系统;

    kvm局限性:

    • 过载使用:一般不建议所有虚拟机核心数加起来超过物理机核心数,假如物理机核心32个,一个虚拟机2核,那么不要超过16个虚拟机
    • 时间记录难以同步:因此装好虚拟机后最好手动同步一下时间

    linux有两套时钟,一个是硬件时钟,一个是根据CPU使用频率来做精确计时,比如1s内震荡2G次,就认为这是1S过去了。由于做了虚拟化,一个CPU可能给多个虚拟机使用,因此1S内走过的时间可能并不是CPU真正走过的时间,所以虚拟机的时钟可能于宿主机不同

    比如安装vmware时有vmware tools来同步虚拟机时间和硬件时间

    • 实时迁移:有一定要求,目标KVM要兼容源KVM;两台主机共享存储必须挂在同一个位置,否则配置文件无法共享;CPU有相同类型的特性,比如同intel,同amd;两台物理主机时间同步,且有一致的网络配置。
    • 性能局限性:

    性能占原来的多少

    完全虚拟化(模拟)

    半虚拟化

    透传

    CPU

    93%

    97%

    不支持透传

    磁盘IO

    40%

    85%

    95%

    网络IO

    60%

    75%

    95%

    显卡

    50%

    不支持,centos7可以了

    不支持透传

    时间计时

    5%偏差

    精确(有一个特殊模块支持时间同步)

    不支持透传

    kvm属于完全虚拟化

    kvm管理工具:

    qemu:

            qemu-kvm qemu-img

    libvirt:支持远程管理操作

    libvirt

    安装工具

    管理工具

    GUI

    virt-manager

    virt-viewer

    CLI

    virt-install

    virsh

  • 相关阅读:
    PyG-GCN-Cora(在Cora数据集上应用GCN做节点分类)
    烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
    深度学习:手写反向传播算法(BackPropagation)与代码实现
    SQL中LIKE和REGEXP简单对比
    2022杭电多校八 1005-Ironforge(二分+区间暴力)
    225. 用队列实现栈 JavaScript实现
    Web前端系列技术之Web APIs基础(从基础开始)④
    前端TypeScript学习day05-索引签名、映射与类型声明文件
    十四、队列函数
    Elasticsearch进阶篇(三):ik分词器的使用与项目应用
  • 原文地址:https://blog.csdn.net/qq_39965059/article/details/126855785