资料
简单整理并了解下和aws相关的虚拟化技术
Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统。可以协调访问服务器上的所有的物理设备和虚拟机,也叫虚拟机监视器。Hypervisor是所有虚拟化技术的核心。当服务器启动并执行Hypervisor时,他会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统,常见的产品有Vmware、KVM、Xen等
Xen是运行在裸机上的虚拟化管理程序(HyperVisor),是半虚拟化(Para-Virtualization)技术的典型代表。Xen的管理VM为Dom0,虚拟机操作系统被称做DomU。管理VM负责管理整个硬件平台上的所有输入输出设备驱动,半虚拟化中的Hypervisor不对I/O设备作模拟,而仅仅对CPU和内存做模拟
KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是一个基于Linux环境的开源虚拟化解决方案,最早由以色列Qumranet公司开发,在2006年10月出现在Linux内核的邮件列表上,并于2007年2月被集成到Linux 2.6.20内核中,成为内核的一部分
KVM并不是一个完整的模拟器,而只是一个提供了虚拟化功能的内核插件,具体的模拟器工作需要借助QEMU来完成。QEMU(Quick Emulator)仿真所有硬件,包括BIOS、IDE控制器、VGA显示卡、USB控制器和网卡等
什么是DPDK?
包处理任务存在内核态与用户态的切换,以及多次的内存拷贝,系统消耗变大,以CPU为核心的系统存在很大的处理瓶颈。为了提升在通用服务器(COTS)的数据包处理效能,Intel推出了服务于IA(Intel Architecture)系统的DPDK技术。DPDK应用程序运行在操作系统的User Space,利用自身提供的数据面库进行收发包处理,绕过了Linux内核态协议栈,以提升报文处理效率。
DPDK将来会成为趋势吗?
DPDK主要解决网络虚拟化之后性能大幅度降低的问题。最初性能的瓶颈在于硬件本身。而如今硬件的性能越来越高,内核软件方面已经非常滞后。
- 内核软件栈太长。以存储I/O为例,用户软件发送一个I/O请求,要经过虚拟文件系统、文件系统、通用块设备层、块设备调度层、驱动层等等。经过一层层的的系统软件,一个I/O才能落盘
- 系统要在内核态与用户态之间不断切换,涉及到上下问切换以及内存拷贝问题,耗费了大量的CPU资源。
- 内核大量的中断模式,起初中断模式的设计是在于硬件处理速度较慢,因此采用中断的模式可以避免忙等,待硬件处理完I/O后中断通知CPU。在目前硬件性能如此之快的情况下,中断模式反而不适合
用户态协议栈绕过内核,可以直接操作裸设备。用户态软件栈使用了polling模式,来避免中断模式所产生的瓶颈
SR-IOV 的全称是 Single Root I/O Virtualization,SR-IOV标准允许在虚拟机之间高效共享PCIe(快速外设组件互连)设备,由于它是在硬件中实现的,所以可以获得能够与本机性能接近的I/O性能。SR-IOV 使用 physical functions (PF) 和 virtual functions (VF) 为 SR-IOV 设备管理全局功能。PF 包含SR-IOV 功能的完整PCIe设备,PF 作为普通的PCIe 设备被发现、管理和配置 。PF 通过分配VF 来配置和管理 SR-IOV 功能。
VF 是轻量级 PCIe 功能(I/O 处理)的 PCIe 设备,每个 VF 都是通过 PF 来生成管理的,VF 的具体数量限制受限于 PCIe 设备自身配置及驱动程序的支持,启用SR-IOV后,主机将在一个物理NIC上创建单个PF和多个VF。 VF的数量取决于配置和驱动程序支持。
x86平台指令集分为4个特权模式:Ring0 、Ring1、Ring2、Ring3、OS工作在Ring0级别,应用软件工作在Ring3级别,驱动程序工作在Ring1和Ring2
Amazon EC2 虚拟化技术演进:从 Xen 到 Nitro
按照时间顺序有如下发展轨迹
早期的Xen虚拟化。Xen 实现了虚拟机的CPU 和内存虚拟化,但是虚拟机的I/O 访问,包括网络和存储等,都是通过虚拟机中的前端模块和 dom0 中的后端模块通信。I/O路径太长,降低了I/O性能。dom0还会和业务虚拟机抢占宿主机资源,很难实现管理虚机和业务虚机之间的平衡,以及避免抖动
引入单根I/O虚拟化(SR-IOV),采用aws增强型网络(enhanced networking)(通过ixgbe驱动程序实现)
引入EBS的硬件虚拟化技术,将远端存储以NMVe形式呈现给虚拟机
发展增强网络实现为ENA(Elastic Network Adapter),使得虚拟机能够绕过内核和用户空间网络处理程序,直接操作网卡硬件。Nitro的首个专用硬件卡(完全的网络负载卸载硬件)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JaeKcH6e-1670333401554)(assets/image-20221206211252182.png)]
发展实例存储,Annapurna Labs研发的Nitro存储卡管理的SSD磁盘
替换Xeni架构,使用基于KVM的Nitro hypervisor 替换了Xen
Nitro - Hypervisor + 网络/存储卡 + 安全芯片
AWS Nitro 系统是模块化组件的集合,使用广泛的计算、存储、内存和网络选项来设计 EC2 实例(Nitro卡)
Nitro安全芯片整合到宿主机主板中,控制对所有非易失性存储的访问,持续监控和保护硬件资源,并在每次系统启动时独立验证固件。
Nitro hypervisor基于KVM位于极简化的定制的Linux 内核中,带有定制的VMM和小用户空间应用。只负责管理内存和CPU分配,将Nitro卡虚拟功能分配给实例,监控和计量硬件等,不再需要提供任何网络功能。
2017年hypervisor仍旧在宿主机上,2018年后hypervisor被集成到了硬件中
资料
github
FireCracker是为AWS Lambda和AWS Fargate提供动力的虚拟机监视器(VMM)。Firecracker的核心是一个新的VMM,它使用Linux内核的KVM基础设施来提供支持现代Linux主机以及Linux和OSv客户机的最小虚拟机(microms)
每个工作节点都有数百或数千个MicroVMs。为每个microm启动一个Firecracker微管理进程,负责创建和管理microm、提供设备仿真和处理出口。与microm的通信是通过TCP/IP套接字进行的。
firecracker作为一款轻量级虚拟机,仅提供了有限功能
Docker容器技术采用共享宿主机内核方式运行,利用内核特性实现对不同用户的命名空间进行隔离(6种方式),使用 CGroups进行硬件资源分配与限制,POSIX Capabilities进行 root 权限分割等。由于操作系统内核漏洞,Docker 组件设计缺陷,以及不当的配置都会导致 Docker 容器发生逃逸,从而获取宿主机权限。docker实现原理决定了容器的其隔离性、封闭性还是远远低于拥有独立 GuestOS 的虚拟机。而分配、管理、运维这些传统虚拟机与容器轻量、灵活、弹性的初衷背道而驰
firecracker能够为类似 AWS Lambda 和 Fargate 这样的服务提供高安全性、灵活性和效率的运行时环境
上一篇:CAS登录认证