KU链接:Linux虚拟化基础建设

编译│KU链接 вт989点сс 酷游链接│,所谓的KVM (Kernel-based Virtual Machine) 是Linux 核心中的系统虚拟机器基础建设,它是个Linux 核心模组,能让Linux 系统成为一个Type-2 Hypervisor 。 KVM 透过硬体虚拟化支援(Intel VT, AMD-V) 来提供CPU 和记忆体虚拟化功能。藉由硬体虚拟化技术,客体作业系统(Guest OS) 不必经由软体模拟或转换指令,即可高效率且安全地直接执行在硬体上。使用者空间的管理程式只要负责模拟周边装置、呼叫KVM API ,即可建立并高效率地执行虚拟机器。

虚拟机

KVM是个Linux 核心模组/子系统,可将Linux 转为type-2 hypervisor,结合硬体的虚拟化支援,使得host machine 上可以执行多个独立的虚拟环境,称为guest 或者virtual machine。由于KVM 直接提供CPU 和记忆体的虚拟化,guest os 的CPU 指令不需要额外经过软体的decode,而是直接交给硬体进行处理,因此可以有效的提高运行速度。而结合软体(例如KVM 搭配QEMU)模拟CPU 和记忆体以外的装置之后,guest OS 便可以被完整的支援在host OS 上载入并良好的运行。

KVM 提供的功能有:

  • 支援CPU 和memory Overcommit
  • Overcommit 代表可以要求超过实际可以handle 的memory,实际上在使用到才会为其分配physical memory
  • 支援半虚拟化I/O (virtio)
  • 支援热插拔(cpu, block device, network device 等)
  • 支援对称多处理(Symmetric Multi-Processing,缩写为SMP)
  • 支持实时迁移
  • 支援PCI device 直接分配和单根I/O 虚拟化(SR-IOV)
  • SR-IOV - single-root IO virtualization
  • 支持KSM(内核同页合并)
  • 支援 NUMA

kvm 主机

sysprog21/kvm-host展示一个使用Linux 的kernel-based virtual machine,达成可载入Linux 核心的系统级虚拟机器(system virtual machine)的极小化实作,适合作为入门Linux KVM 相关API 的材料。以下解析程式码的行为:

vm_t结构体

保存VM 的状态,如下:

typedef struct {
    int kvm_fd, vm_fd, vcpu_fd;
    void *mem;
    serial_dev_t serial;
    struct bus mmio_bus;
    struct bus io_bus;
    struct pci pci;
    struct diskimg diskimg;
    struct virtio_blk_dev virtio_blk_dev;
    void *priv;
} vm_t;

其中priv在arm64 会指向下面的结构体:

typedef struct {
    uint64_t entry;
    size_t initrdsz;
    int gic_fd;

    /* This device is a bridge between mmio_bus and io_bus*/
    struct dev iodev;
} vm_arch_priv_t;

最后设定虚拟的CPU (亦即VCPU):

KVM_GET_SUPPORTED_CPUID: 取得一个struct kvm_cpuid2的结构单元,准备用来建立cpuid information
对于function为KVM_CPUID_SIGNATURE的entry 进行设定
KVM CPUID 位
最后使用KVM_SET_CPUID2将entry 设定回KVM 之中

struct kvm_cpuid_entry {
	__u32 function;
	__u32 eax;
	__u32 ebx;
	__u32 ecx;
	__u32 edx;
	__u32 padding;
};

struct kvm_cpuid2 {
	__u32 nent;
	__u32 padding;
	struct kvm_cpuid_entry2 entries[0];
};

编译│KU链接 вт989点сс 酷游链接│

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值