虚拟化-创建一个虚拟机
现如今,随着云计算技术的越来越成熟,我们在腾讯云、阿里云上购买的服务器本质上都是虚拟机,这就需要在一台物理服务器上虚拟化出更多的虚拟机,还要让这些虚拟机能够弹性伸缩,实现跨主机迁移。
而虚拟化技术正是这些能力的基石,而其中的核心技术就是 KVM 虚拟化技术。
虚拟化 虚拟化的本质是一种资源管理的技术,它可以通过各种技术手段把计算机的实体资源(如:CPU、RAM、存储、网络、I/O 等等)进行抽象和转换,让这些资源可以重新分割、排列与组合,实现最大化使用物理资源的目的。
服务器上的虚拟化软件,多使用 qemu ,其中 emu 是 emulator 模拟器的意思。单纯使用 qemu 采用的是完全虚拟化模式。但是完全虚拟化是非常低效的,所以要使用硬件辅助的虚拟化技术 Interl-VT,AMD-V,所以需要CPU 硬件开启这个标志位,一般是在 BIOS 里面设置。
当开启了标注位后,通过 KVM ,GuestOS 的指令不再用 Qemu 转译,直接运行,大大提高了速度。
CPU 虚拟化 为什么需要 CPU 虚拟化 X86 操作系统是设计在直接运行在裸硬件上的,x86 架构提供4个特权级别给内核(操作系统)来访问硬件,Ring 是指 CPU 的运行级别,Ring 0 是最高级别,依次到 Ring3。以 Linux x86 来说
操作系统(内核)需要直接访问硬件和内存,因此它的代码需要直接运行在最高级别 Ring 0 上,这样它就可以使用特权指令去控制中断,修改页表,访问设备。 应用程序的代码运行在 Ring 3 上,如果需要访问硬件,必须通过系统调用,执行系统调用的时候,CPU 的运行级别会从 Ring3 切换到 Ring0 ,并跳转到系统调用对应的内核代码位置执行,完成后从 Ring3 回到 Ring0。这个过程就是用户态到内核态的转换。 那么,虚拟化在这里就遇到了一个难题。由于宿主机的操作系统工作于 Ring0,VM 客户机操作系统就不能再工作在 Ring0 上了,但是 VM 客户机的内核操作系统不知道这一点,以前执行什么指令,现在还是执行什么指令。但是没有执行权限会出错。这时 VMM(虚拟机管理程序)就要开始工作了,虚拟机通过 VMM 实现 Guest CPU 对硬件的访问,根据原理有三种实现技术: