01
简介
网络功能虚拟化(NFV)是一种将传统上在专有硬件上运行的网络服务虚拟化的方式。这些服务通常被打包为部署在标准服务器上的虚拟机(VM),称为虚拟化网络功能(VNF)。由于性能是VNF的关键要求,因此往往使用设备直通的方式将整个网络设备专门分配给在虚拟机内运行的客户操作系统,以实现接近原生设备的性能和隔离的安全性。
在云原生时代,微服务和容器在生产环境中得到了广泛的应用。在容器中,只有操作系统被虚拟化,而不是像虚拟机那样虚拟化底层硬件。与虚拟机相比,容器提供了更大的灵活性、更精细的粒度和更少的开销。因此,将网络功能放在容器中运行的云原生网络功能(CNF),成为了VNF的继任者。
当下,容器正在成为在边缘部署服务的一种典型方式。然而,容器的启动延迟会极大地限制短任务的效率,而越来越多的边缘工作负载被归类为需要快速响应的短任务[1]。对于这些工作负载,减少容器启动时间变得越来越重要。尽管业界已经探索了大量减少容器启动延迟的方法[2],但仍有一些设备层面的开销对启动时间的影响需要解决。
本文介绍了如何使用英特尔可扩展I/O虚拟化(Intel Scalable IOV)的平台和网络设备来减少云原生网络功能在直通模式下的启动时间。通过搭建测试环境,测试结果证明Intel Scalable IOV可以显著缩短启动时间。
这篇文章适用于通信服务提供商或任何希望改进其云原生网络功能的用户。尽管本文的目标是展示在云原生网络功能环境中减少启动时间,但这里使用的技术可以作为任何容器或网络部署中减少启动时间的参考。
作者: 曹亚辉 吴菁菁 等
02
概论
本章简要介绍了用于NFV的SR-IOV解决方案,以及它是如何将延迟引入网络功能启动时间的。然后,从每个组件的角度详细描述了如何启用Intel Scalable IOV。此外,还详细分析了Intel Scalable IOV如何减少网络功能启动时间。最后,给出了测试搭建步骤,结果表明在容器运行环境中,网络功能的启动时间明显缩短。
虽然本文解释了如何通过Intel Scalable IOV减少CNF启动时间,但本文中演示的系统设置和技术运用,可以作为任何试图改善直通设备容器启动时间的用户的参考指南。
2.1 应对的挑战
SR-IOV广泛用于NFV,是一种允许一个PCIe设备呈现多个独立的物理PCIe设备的规范。SR-IOV通过引入物理功能(PFs)和虚拟功能(VFs)的概念来工作。PF是功能齐全的PCIe功能,可以完全控制整个PCIe设备,而VF对PCIe设备的控制有限。在NFV中,PF通常被分配给NFV基础设施,用于控制平面管理,而VF则被分配给VNF,作为虚拟机内的PCI直通设备,提供接近原生设备的性能和硬件隔离。
通常情况下,设备启动包括通用设备初始化阶段和厂商特定初始化阶段。对于SR-IOV VF中的厂商特定初始化,大部分启动延迟是由PF和VF之间的通信引起的。已经有一些针对PF-VF通信的优化。对于通用PCIe设备初始化SR-IOV VF,设备必须严格遵循PCIe规范定义的初始化程序。这导致了CNF在SRIOV VF直通时,有明显的启动延迟。
在本文中,我们提出了自己的解决方案,通过消除SR-IOV中严格的初始化时序(如设备重置)来减少CNF在直通设备上的启动时间。由于驱动程序探测的设备是一个虚拟设备(VDEV),它是由Intel Scalable IOV中的软件模拟的。它不再需要遵循PCIe规范要求的时序流程,并允许从软件的角度进行更灵活的初始化优化。
2.2 技术描述
Intel Scalable IOV是一种可扩展且灵活的硬件辅助I/O虚拟化方法,建立在现有PCI Express功能的基础上,使其能够轻松得到符合PCI Express Endpoint设计和软件生态系统的支持[3]。Intel Scalable IOV定义了一种方法,可以将大量多路复用设备接口以精细的粒度分配给隔离的域。该体系结构将设备共享的粒度定义为可分配设备接口(ADI)。设备功能上的所有ADI使用与设备的PCIe功能对应的相同PCIe Requester ID(总线/设备/功能编号)。进程地址空间标识符(PASID)用于区分针对不同ADI执行的upstream memory transaction,并传达给对应的地址空间。
在CNF中为网络设备启用Intel Scalable IOV,需要以下硬件和软件组件:
• 第 4 代英特尔至强可扩展处理器
• 系统软件和协议栈
• 英特尔800系列网卡和设备驱动程序
• DPDK用户空间库和网络驱动程序
在Intel Scalable IOV框架中,应用程序和VDEV之间的访问被定义为“data path”或“control path”(图1):
1. VDEV上的data path操作直接映射到底层ADI硬件以提高性能。在这种情况下,DPDK Intel Adaptive Virtual Function(IAVF)轮询模式驱动程序(PMD)分配的内存可以由英特尔 800系列网卡直接读取/写入。data path通常是从英特尔800系列网卡发送的带有PASID前缀的PCIe upstream memory transaction,通过支持可扩展模式的IOMMU,直接进入用户空间DPDK进程内存。
2. control path 操作由虚拟设备构造模块(VDCM)模拟,以获得更大的灵活性。在VDCM的辅助下,ADI被组成为VDEV并分配给用户空间。每当用户空间应用程序访问control path内的某些VDEV区域(例如PCIe CSR/BAR)时,根据当前实现,通过VFIO驱动程序框架和VFIO枚举设备(VFIO MDEV)进行路由,访问就会被VDCM捕捉。
由于Intel Scalable IOV利用硬件扩展data path,并为control path组成设备,因此它为高密度实例需求提供了出色的可扩展性,同时为control path保持了极大的灵活性。