【LC3开源峰会网络技术系列之二】阿里云开发智能网卡的动机、功能框架和软转发程序

简介: 摘要 这篇文章介绍了阿里云开发智能网卡的动机、功能框架和软转发程序以及在软转发过程中发现的问题和优化方法。 主讲人陈静 阿里云高级技术专家 主题Zero-copy Optimization for DPDK vhost-user Receiving 分论坛Network & Orchestration 项目背景 在VPC产品部署中虚拟交换Virtual Switch承担着overlay层和underlay层进行网络协议的加解密encap/decap功能在多租户虚拟机或者容器的主机上也需要进行二三层的路由转发、Qos、限流、安全组等。

摘要: 这篇文章介绍了阿里云开发智能网卡的动机、功能框架和软转发程序,以及在软转发过程中发现的问题和优化方法。

主讲人:陈静 阿里云高级技术专家

主题:Zero-copy Optimization for DPDK vhost-user Receiving

分论坛:Network & Orchestration


18cbb5e488b1e8687e538c10dc1f3c1a806289d4

项目背景

在VPC产品部署中,虚拟交换(Virtual Switch)承担着overlay层和underlay层进行网络协议的加解密(encap/decap)功能;在多租户(虚拟机或者容器)的主机上,也需要进行二三层的路由转发、Qos、限流、安全组等。虚拟交换现在业界有比较被广泛接受的OVS开源项目,在阿里云上,我们也开发了针对自身业务相契合的AVS项目。AVS有和OVS类似的功能,也同样是纯软件的实现方式,在我们使用过程中,发现了一些问题,从而催生了智能网卡项目。

首先,AVS占用主机资源。AVS作为软件,需要占用主机侧的计算资源、内存资源,当吞吐量大时,还会占用大量的LLC cache资源,而本来这些资源更好的利用方式是交给客户,增加资源的利用率。

其次,性能瓶颈。在云上业务部署过程中,应用对网络带宽的要求在不断提高,纯软件的方式已经慢慢跟不上这种需求,因此有必要用对AVS进行加速。

基于这两个原因,我们进行了智能网卡项目。

Virtio or SRIOV?

众所周知采用PCI-E SRIOV技术的VF设备,通过PASS-THROUGH的方式呈现在VM,具有高性能、功能丰富的特点。但是缺点也同样明显,比如热迁移(hot-plug)不方便;不同厂家提供的VF接口不一致;需要额外的驱动等等。virtio作为业界比较通用的一种虚拟设备接口方式可以解决之上的各种问题,但是问题在于目前暂时没有完全支持virtio接口设备的硬件厂商,其是使用软件模拟实现的一种方式,因此性能不是很好。那么,有没有一种又有高性能,同时支持virtio的解决方案呢?

 

087294d85aecebba8d5a887a6b303a68fe12ce0d

 

我们结合virtio和SRIOV的优势,设计了一套基于软转发的方案。

 

智能网卡方案

下图是我们的智能网卡的框架设计,在卡上有一个标准的网卡ASIC和一个片上系统,片上系统自带内存和CPU。AVS运行在片上系统,把快速路径(fast-path)卸载到ASIC中,而自身只负责慢速路径(slow-path)的处理。通过快慢速路径分离的方式,不但减轻了软件AVS的处理负载,也大大提高了吞吐率。

3778c6e7b32debb78a03b5d0ed91aade845d20f5

在智能网卡实现过程中,由于我们的标卡没法做到virtio-net的硬化,所以对host的输出只是一个提供商定义(vendor-specific)的VF接口。同时,在客户侧(VM
),我们期望用户不用做任何的修改,沿用virtio-net接口。在这种需求下,我们开发了一个简单的、基于DPDK的软转发程序。由于AVS在网卡已经完成了所有的策略、逻辑、路由、多队列的所有功能,VF和virtio-net前端有一一对应的关系,而软转发程序只需要完成VF和virtio-net的接口转换和报文传递即可。同时,我们也不能为该软转发程序分配很多资源,否则就和我们最初做智能网卡的初衷背道而驰。因此,软转发的性能成为了我们非常重要考量的指标。在描述我们的优化方法之前,我们先了解一下常规路径。

报文接收路径

在讲到报文接收路径之前,有必要介绍一下DPDK中接收队列的初始化方式。首先,软件需要在内存中分配一段缓冲区作为队列,队列中的数据结构称为描述符(descriptor),这是软件和硬件交互的接口;如果是virtio-net这中para-virtualized模拟设备,前端驱动和后端驱动交互的接口。除此之外,软件还需要一个内存池(memory pool),里面都是固定大小的数据缓冲区,用来承载网卡发送过来的网络报文。

a9e80baa356044bad27868c2ee48d089580209a4

初始化接收队列之后,网卡就可以开始正常工作了。当从网络中接收到报文之后,按照下图所示进行处理,最终送达到对应的虚拟机。

22b08105c4d9f8a4c936b141cb90c2959c3303c1

首先,报文缓存在智能网卡上,然后进行快速路径或者慢速路径的处理,最终判断是发送到哪一个VF,哪一个接收队列。

接着,网卡会从对应的VF接收队列读取描述符,获得存储报文的地址,然后进行DMA操作,最后,回写描述符到接收队列,描述符中包含了报文长度、类型、错误标志位等信息。

软转发程序通过VF接收队列的描述符发现收到了一个报文,接着会读取VM中的virtio-net的接收队列描述符,获得需要拷贝的虚机中的DMA数据地址,通过memcpy的方式拷贝报文;接着,更新virtio-net的描述符信息,通知前端驱动,整个逻辑完成。

优化后的零拷贝接收

从之上的过程可以发现在报文送到虚拟机的整个路径中,报文被拷贝了两次:一次是硬件DMA到主机内存,另外一次是软转发程序拷贝报文到虚拟机的Guest memory。特别是后一次是非常消耗CPU时间的操作。从我们后来的性能profiling也可以看到内存拷贝占用了很大的比例。那么,能不能减少一次拷贝呢?

综合以上的需求,我们设计了接收端的零拷贝方案。主要是设计了一个队列同步模块,如下所示。

db3691c4d272e4f015131925e4277254bf1cc26f

它主要的作用有以下几个:

1.    在前端virtio-net和SRIOV VF队列的描述建立1:1的映射关系。

2.    监控前端virtio-net 接受队列描述符的改变,同步到VF的接收队列中。这样,在VF的接受队列中就不需要内存池来缓存从网卡上收到的报文,而直接用虚拟机传递的缓存。

3.    进行虚机物理地址(Guest Physical Address, GPA)到主机物理地址(Host Physical Address, HPA)的转换。在virtio-net的VF中,驱动填充的是GPA地址,在没有利用IOMMU的情况下,需要把GPA转换成HPA,这样智能网卡才能进行DMA传送。

 

在有了队列同步模块之后,报文的接收过程如下图所示。

主要改进在于智能网卡直接DMA到虚拟机指定的内存中去,并且硬件还不感知这个变化。软转发程序只是简单的将VF接受队列的描述符信息进行转换,填充到前端virtio-net的接受队列中去。

c350567dcb9b1064af569f102946296569bc4086

零拷贝的优势

经过测试和分析,我们觉得零拷贝有如下的优势:

l、  性能

  • 接收端减少了内存拷贝
  • Footprint减少,避免cache-coherency
  • 总体性能提高了40%

2、时延

  • 减少拷贝带来的时间开销

目录
相关文章
|
9月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
225 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
6月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
6月前
|
人工智能 安全 架构师
2025云栖大会 | 阿里云网络技术Session主题资料和视频回放归档
2025年9月24日-26日,杭州,一年一度的云栖大会如期而至;阿里云飞天洛神云网络作为阿里云计算的连接底座,是飞天云操作系统的核心组件,致力于为上云企业提供高可靠、高性能、高弹性、智能的连接服务。本次云栖,云网络产品线也带来全系列产品升级,以及创新技术重磅解读,围绕增强确定性、提效自动化、深耕智能化和敏捷全球化带来技术、产品和服务升级,以及全新的云网络产品生态合作计划发布。
814 4
|
7月前
|
安全 网络性能优化 网络虚拟化
网络交换机分类与功能解析
接入交换机(ASW)连接终端设备,提供高密度端口与基础安全策略;二层交换机(LSW)基于MAC地址转发数据,构成局域网基础;汇聚交换机(DSW)聚合流量并实施VLAN路由、QoS等高级策略;核心交换机(CSW)作为网络骨干,具备高性能、高可靠性的高速转发能力;中间交换机(ISW)可指汇聚层设备或刀片服务器内交换模块。典型流量路径为:终端→ASW→DSW/ISW→CSW,分层架构提升网络扩展性与管理效率。(238字)
1798 0
|
6月前
|
弹性计算 网络安全 数据中心
阿里云创建专有网络VPC的【IPv4网段】如何选择?有什么区别?
阿里云VPC创建时需选IPv4网段,默认提供10.0.0.0/16、172.16.0.0/16、192.168.0.0/16,三者无功能差异。若仅单VPC且不连本地数据中心,可任选其一,确保不冲突即可。多VPC或混合云场景需规划避免IP重叠。不支持100.64.0.0/10等特殊网段。建议结合IPAM进行地址管理。
|
7月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
200 1
|
7月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
504 0
|
7月前
Vite使用svg-企业级开发(支持本地svg和网络svg渲染)
本教程介绍如何在Vite项目中集成SVG图标插件。首先安装`vite-plugin-svg-icons`,配置插件指向SVG图标目录,并注册全局组件。接着创建SVG图标组件,支持内部图标与外部图片展示。通过简单配置,即可在页面中灵活使用各类SVG图标,提升开发效率。
397 0
|
7月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
319 0
|
10月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析

热门文章

最新文章