KVM初始化/创建虚拟机和vCPU

本文档详细介绍了KVM在x86平台上的虚拟化实现,包括VT-X技术,以及kvm模块如何初始化,创建虚拟机和vCPU的过程。核心文件如x86/kvm/vmc.c、x86/kvm/x86.c和virt/kvm/kvm_main.c扮演了关键角色。每个虚拟机对应一个进程,每个vCPU则对应一个线程。

x86/kvm/vmc.c  // x86平台和CPU相关的虚拟化 VT-X

x86/kvm/x86.c  // x86平台kvm虚拟化

virt/kvm/kvm_main.c // 虚拟化模块(可类比xx-core)

简单几个重要数据结构。// 一个虚拟机,对应一个进程,一个虚拟vcpu,对应一个线程

kvm_host.h

struct kvm
{
    struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
    struct list_head vm_list; // 用于挂到全局vm_list列表
    struct kvm_arch arch; // 平台相关
}
// 和虚拟机一一对应。

x86
struct vcpu_vmx
{
    struct kvm_vcpu vcpu;
}
// 单个虚拟机的单个虚拟CPU。

struct vmcs {
	u32 revision_id;
	u32 abort;
	char data[0];
}; // 每个物理CPU一个 vmxarea

 kvm模块初始化

kvm_init()
{
    kvm_arch_init(); // 平台初始化
    kvm_irqfd_init(); // 创建kvm-irqfd-cleanup workqueue
    kvm_arch_hardware_setup();
    //检查每一个处理器的兼容性;
    //注册监听CPU up/down;
    //注册监听系统重启;
    //分配存放kvm_vcpu cache;
    //分配存放异步错误(pf)cache;
    //注册/dev/kvm;
    //注册syscore_ops;
    //注册类别为kvm_dev_type_vfio kvm_device_ops;
}

   

  创建虚拟机

QEMU-KVM 是一种基于 QEMU 的全虚拟化解决方案,它利用 KVM(Kernel-based Virtual Machine)内核模块提供硬件加速功能,使得虚拟机性能接近原生环境。通过 `qemu-system-*` 命令结合 KVM 模块,可以快速创建并运行虚拟机。 以下是使用 `qemu-kvm` 创建虚拟机的基本步骤: ### 1. 安装依赖工具 首先需要安装必要的软件包,包括 QEMU KVM: ```bash sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager -y ``` 检查是否支持硬件虚拟化: ```bash egrep -c '(vmx|svm)' /proc/cpuinfo # 如果返回值大于0,则说明支持KVM ``` 加载 KVM 内核模块: ```bash sudo modprobe kvm_intel # 对于Intel CPU sudo modprobe kvm_amd # 对于AMD CPU ``` 验证 KVM 是否正常工作: ```bash lsmod | grep kvm ``` --- ### 2. 准备磁盘镜像文件 #### 使用 qcow2 格式创建硬盘镜像: ```bash qemu-img create -f qcow2 ubuntu.qcow2 20G ``` 这将生成一个名为 `ubuntu.qcow2`、大小为 20GB 的虚拟磁盘文件。 #### 下载操作系统 ISO 文件作为引导源: 例如 Ubuntu 系统的 ISO 镜像可以从官网下载到本地路径 `/path/to/ubuntu.iso`。 --- ### 3. 启动虚拟机 以下是一个简单的启动命令示例: ```bash qemu-system-x86_64 \ -enable-kvm # 开启KVM硬件加速 -m 2048 # 分配内存大小 (单位MB) -cpu host # 虚拟CPU配置为主机相同的架构 -smp 2 # 设置vCPU核心数为2 -hda ubuntu.qcow2 # 加载之前创建的磁盘镜像 -cdrom /path/to/ubuntu.iso # 光驱加载ISO用于安装系统 -boot d # 从光驱启动(d表示cd-rom优先级最高) -vga virtio # 图形模式,默认启用VirtIO-GPU驱动 -netdev user,id=net0,hostfwd=tcp::2222-:22 -device virtio-net-pci,netdev=net0 # 添加网络设备,并端口转发主机2222->虚拟机SSH服务 -display sdl # 显示器选项(如sdl或gtk),如果无需图形界面可以用"-nographic" ``` > **注意**: 如果不需要图形界面,可以在最后添加 `-nographic` 参数以纯文本方式进行交互操作。 等待虚拟机完成初始化过程后即可开始使用新构建好的实例! --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值