今天,《软硬件融合技术内幕 进阶篇》告一段落了,我们来做一个小结:
由于虚拟机需要连接物理网络,宿主机的hypervisor为虚拟机创建了一个虚拟网卡,而在运行虚拟机的宿主机上也就需要运行一个虚拟交换机 (vswitch)与这个虚拟网卡进行连接。
随着网络速率从1Gbps,10Gbps到25Gbps的演进,出现了以下的网络虚拟化技术:
Emulate (仿真)方式:虚拟化网卡是一个完全的软件仿真设备,GuestOS调用网卡驱动程序的时候,会产生VM_Exit,在宿主机上Hypervisor上进行网卡的收发;
VirtIO方式:在GuestOS上安装一个特殊的Virtio驱动,其行为是通过VirtIO环形队列,向宿主机HostOS上的VirtIO后端驱动进行数据收发,HostOS再将数据送到QEMU用户态下,QEMU调用TAP口驱动将数据发送到vSwitch;
vHost方式:由于QEMU中实现VirtIO需要多两次内核态和用户态之间的切换,vHost针对这一现象进行改进,将VirtIO后端挪到了内核中实现。当VM操作系统调用VirtIO前端驱动时可以一直在内核中进行处理,而无需额外的用户态和内核态之间的切换;
但是,随着NFV等技术的出现,以及宿主机网络向100G演进,vHost方式的网络处理开销也变得难以接受,工程师们开始利用SR-IOV等方式降低网络处理开销,同时,物理网卡也开始具备了vSwitch的卸载功能,内部集成了vSwitch,能够实现宿主机上的虚拟机互通,以及虚拟机接入网络overlay。
然而,由于物理网卡处理overlay的能力一般为固化的电路逻辑实现,对于云计算技术的演进难以适应,同时,工程师们还期望存储和Hypervisor等其他虚拟化能力也可以有专门的硬件部件实现,因此,出现了SmartNIC这一新事物。
SmartNIC的最低要求是可以对宿主机和虚拟机提供SRIOV的PF和VF,PF和VF能够提供virtio-net和virtio-blk功能。为实现这些功能,业界出现了ASIC/NP,多核ASIC以及FPGA等不同的实现路线。
ASIC/NP最初用于交换机/路由器/DWDM/RAN等设备的数据平面实现,具备极强的网络数据包处理能力,也具备一定可编程能力,可以在微码的操纵下,对数据包进行定制化的处理和修改。其缺陷是无法良好处理存储等协议的数据包,因此,ASIC/NP的技术路线首先被抛弃。
多核SOC (System On Chip) 内部集成了多个处理器核,具备极强的并行转发能力,同时还集成了以太网控制器、数据包分析器及加密算法加速器等硬件加速单元,能够帮助CPU分担一些重复性质的工作,在路由器、防火墙、IP RAN等设备中担当数据平面核心功能,基于多核SOC的SmartNIC也一度百花齐放。但由于SOC内部的硬件加速单元的关键快速路径实现,实质上是固化在电路中的,与ASIC别无二致,对云计算时代功能的快速迭代在适应方面有较大问题,SOC的技术路线也逐渐暴露出问题。
FPGA则是另辟蹊径的路线。FPGA本身具备极强的可编程能力,可以编程为任意的处理逻辑,在运行转发平面简单重复的逻辑时,FPGA有得天独厚的优势。但作为控制平面的情况下,由于控制平面处理逻辑极为复杂,有非常多的程序分支,FPGA内部的门电路/触发器资源有限,难以实现这个级别的逻辑,因此,FPGA作为SmartNIC的技术路线,也具有难以克服的缺陷。
工程师们基于SOC和FPGA各有长短的特点,得出了让此二者互相取长补短的方案:让FPGA作为快速路径,以高并发方式,处理简单逻辑能够处理的大部分数据,而逻辑较为复杂,快速路径无法处理的内容,送到SOC实现的慢速路径和控制平面处理,从而使得SmartNIC能够真正进入商用领域。NVidia的Bluefield DPU,以及Intel的IPU都是这一技术路线的代表。
然而,各大公有云厂商认为,购买其他商业巨头的SmartNIC难以满足自身高度定制化的需求,因此,AWS为代表的公有云厂商也开发了自己的SmartNIC体系,如AWS的Nitro,腾讯云的银杉等。
当然,无论从成本考虑,还是从技术风险控制考虑,在云计算集群中,都不可能一次性在所有宿主机上都安装SmartNIC,也就是无论公有云还是私有云,都面临着向SmartNIC的过渡。这样,虚拟机从普通宿主机迁移到带有SmartNIC的宿主机,就是一个必须面对的问题。在腾讯云的最佳实践中,通过VirtIO驱动屏蔽二者的差异,实现了虚拟机热迁移的同时,停止服务时间几乎让用户无感知。
在云计算集群中,有时会出现部分资源空闲的情况。即使资源调度算法再优化,也有可能出现部分主机CPU空闲,部分主机内存空闲的问题。为尽量利用所有资源,实现降本增效,基于CXL总线的远端内存映射技术也开始成为未来大型云平台的尝试方向。这也将触发云计算硬件演进的新一场革命。
在下一个专题中,我们将自顶向下拆解计算机硬件,直到电路实现的细节级别。
敬请期待。