找回密码
 注册
关于网站域名变更的通知
查看: 546|回复: 4
打印 上一主题 下一主题

自主100G可重构FPGA网卡FiNIC

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-11 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
智能网卡成为国内大厂追逐的热点,如阿里、腾讯、百度,甚至Ucloud均在自研智能网卡,然而,作为智能网卡核心的数据处理器DPU芯片研发周期长、研发成本高、研制需求又随应用不断变化,难以形成确定的specification集合,虽然,国内市场上有许多公司投身DPU研究,如中科驭数、迈普等,鲜有成熟产品。目前,市场需求旺盛,然而技术壁垒积高,在这两难的境地下,可重构的智能网卡应用而生,即基于可编程硬件FPGA芯片的智能网卡,虽为中庸之道,却不失目前较好的解决途径,国内也有许多厂商投身于此,如国内的同悦、锐文等。
- K( y* q  f# h/ X; e$ V% {) \/ w
1 ~! }/ V; _; `) t" s 在此趋势下,我们这个小厂也算不上的小作坊如何立足,选择哪个发力点,成为一直悬而未决的困惑。从多年的做系统的经验,从多年自主可控产线的积累,我们不想用比较成熟的xilinx的一键式解决方案,我们选择了基于自主可控FPGA的可重构智能网卡实现方案,走上了一条不归路。9 C# C3 ^5 e7 R7 o! r

! u' J& w: ~4 S* j6 D4 n 我们设置了几个目标:
9 j) H. q. S0 w" o; @
4 J8 n/ n* W: d4 X$ g 1)性能高,如果是10GE接口,服务器自己可以应付,因此,最小目标是40GE,而且是双40GE,最好结果是100GE;# U4 ~/ {8 E" ^6 F4 _. |; I9 d

) h$ ~2 V" {& O& p$ i; E 2)可编程,想从两个层次设置两个目标,报文内容深度处理层次,C语言可编程,性能不是问题,主要用于异构计算加速,另一个是通用报文处理层次,网络领域定制语言可编程,主要指P4,一定要达到线速,主要用于网络加速;
' E/ C' n- u4 k5 k5 V4 t, h4 u
& c# c( H+ `& F" M1 W9 H5 O' O. u. X 3)好移植,主要是给应用友好的开发接口,甚至是智能网卡支持商用的开发套件,比如DPDK;8 ^! n6 Y1 H7 J; e1 D4 P0 w9 D/ ^

/ \. `' h0 d; P& i; J   4)开源,不涉及第三方知识产权的原理图、硬件逻辑、驱动等进行开放。9 P8 t: Z" f' ~

' r% o5 I, _4 `- ^! k# x* d 针对上述大山,背后还有一群小山,我们开始了漫长的攻关.今天,仅仅简单介绍一下我们自认为多项第一的原型FiNIC。我们一直认为,这不仅仅是网卡,支持100G高速接口,支持P4,支持DPDK,这还是异构计算在线加速器FPGA-inline,是泛在计算平台,远大的目标使自己保持干劲。
! M6 |1 G, @# @8 h' p, T9 j/ J' d$ ]" O
FiNIC原型+ m, `  A4 J8 @0 c8 m

/ f1 ]3 Z7 E( w1 {# O  1)硬件资源
4 z4 k$ y8 U! F; v6 u- B2 \& o1 e, D6 V* n$ M3 G' e
前序已经介绍了可重构FPGA网卡的架构,主要集成两个层次的可编程资源,可编程硬件FPGA和通用多核处理器。
! C) h  a0 `8 h) I& W0 i- c: d- m+ H* M3 f5 a
可编程硬件FPGA是直接在PCB上集成,国产可编程FPGA共提供了80路高速SerDes,两组4路SerDes连接QSFP,提供2个40GE接口,两组10路SerDes连接QSFP28,提供100GE接口,从物理形态上,满足了双40GE接口的目标。由于目前100GE接口通常采用QSFP28,因此,将FPGA输出的10路SerDes通过gearbox转换后连接到QSFP28。国产FPGA共提供了3个PCIE3.0硬核,其中,1组PCIE3.0硬核x8连接到网卡金手指,另有1组PCIE3.0硬核x8连接到连接器。& G  i# A( [2 W3 g% ]0 q' G
# J/ ^2 n0 i5 z8 \0 E# m2 q. x
从链路带宽上来说,1组PCIE3.0 x8接口无法处理2组40GE接口流量,因此,网卡上需要分流,将部分流量卸载到板载通用多核处理器。另外,2组40GE接口从接口功能上来说,更多是服务器网络接口的冗余备份,而不是链路聚合。对于更高性能,2组PCIE3.0 x8才能应付1组100GE接口流量。4 b  g4 w6 W( ~, ~/ f+ p

( ~# m0 z' G# w* \" r9 P( @ 为了减小系统研发难度,通用多核处理器资源采用商用FT2000+模块,通过FPGA网卡上COMe连接器,连接FPGA中的1组PCIE3.0 x8硬核。FT2000+模块一方面提供C语言程序的运行环境,支持报文数据的深度处理,可以卸载部分流量,另一方面,作为网卡控制器代理,支持远程控制器对网卡的管理配置。1 J2 X$ Q- W/ l

9 G  ?% i( R- T8 E- y1 n2 C& c. y 可以说,巴掌大的网卡也是一个微型的路由器,不仅有转发处理,还有控制协议处理。为了卸载和加速基本网络处理,减小可编程硬件FPGA逻辑资源占用,在网卡上额外增加网络查表引擎,来实现精确查找和模糊查找功能的卸载。
3 }0 V% w' r6 J( B- Q& [- j, O* h: r2 ?
2)硬件逻辑
, [$ s/ O( m" q& x9 r9 q2 x( M; B8 }' m3 t' ?
可重构FPGA网卡硬件逻辑主要分为四部分,PCIe和DMA引擎Corundum模块,用户自定义模块UD,RMT流水线,40GE/100GE IP核HSEC等。
% ~% G3 g9 @* s+ C6 g. W+ [
) ~- l5 q& H( I9 Q# o! c) I) O    Corundum模块是开源的DMA引擎,支持Xilinx的Ultrascale和Virtex-7系列可编程FPGA,支持多队列操作,支持时间戳处理等,因此,我们选择了Corundum架构。Corundum模块层次非常清晰,自顶向下分别是Core,InteRFace,Port和Sink/Source等层次化模块。Core模块中,对多路Interface模块的Data和Ctrl两条通路分别进行聚合和分派;Interface模块中,对多个Port模块的Data和Ctrl两条通路分别进行聚合和分派;Port模块中分为Tx、Tx_Cpl、Rx和Rx_Cpl等四大功能块,其中source子模块负责Tx的处理,sink子模块负责Rx的处理。
- j3 J# L$ U9 ^7 [* f: Q% |9 l8 n3 x8 k4 f% g
   RMT流水线在前序章节也进行了介绍,这是我们设计开发的Match-Action多级流水线,在Match模块中,采用CAM实现了模糊匹配查找,在Action模块中实现了基于ALU的报文分组选项处理,在Match和Action之间是关键字的交叉开关,实现ALU的共享。RMT的ALU中加、减、移位等操作,并将操作数的宽度从32bits扩展到48bits。可以基于P4语言编写报文分组处理程序,编译后下载到RMT流水线,在线改变RMT流水线功能,实现功能动态重构。
" O  F- R6 q* K* S( n9 s* O
! n9 v* S% f( T9 ]" N. i   HSEC是高速40GE/100GE MAC核,实现了40GE、100GE接口线速处理。在这里需要额外注意的有两点:一个是FIFO接口到RMT的AXIS接口的转换,另一个是RMT流水线到2组40GE接口的交换,这里应用了AXIS_Interconnect IP,实现冗余备份端口的切换。
5 @) }% R! }) d
7 [9 f" D0 F0 p( n FiNIC驱动及DPDK适配
3 }4 J2 ~+ X9 y0 k- k
; s5 k) R: b9 S+ T 好用的网卡不仅仅是实现网络功能卸载、应用加速等等,更重要的是向应用提供透明的接口,即用户程序少量修改即可运行,甚至是不修改。这就要求要瞄准市场上最为广泛的应用中间层,特别是发挥零拷贝、用户态协议栈等优势,我们认为DPDK是目前比较全面的数据平面开发套件,因此,在内核态驱动的基础上,主要实现对DPDK的适配和支持。" G; }# z, ~3 \0 @

4 Y' M" n, n) {% w) f    DPDK尽其所能的将有助于包处理加速的软件特性与优化方法于一身,最大限度的提升包处理能力。如Huge Page、TLB、缓存对齐、多通道内存访问、NUMA、预取、CACHE、多核并行、线程绑定、无锁队列、零中断、零拷贝、IA最新或特定指令等等。0 {7 Q5 q+ t4 z! s  m
) `( j. `0 ?$ A+ {* y4 d( J. e
根据DPDK开发环境架构及分层结构模型,我们的驱动功能主要还是原始驱动的主要逻辑,基本不用做大修改,只是按照DPDK开发环境的架构设计进行重组适配即可。其移植过程也与标准内核网卡驱动开发流程类似。" S  X9 v% B9 \8 z  u4 H
5 z/ `$ f: J' U
首先在DPDK的设备驱动列表中增加设备型号,通过PCI设备注册的方式告诉DPDK,可以为该设备型号提供驱动能力;其次,实现驱动的探测函数功能与设备释放函数功能,并在控测函数中完成硬件资源地址的映射;然后,创建DPDK的以太网设备对象,并对该对象进行实例化操作,主要包括对设备的配置功能(如队列数、每队列描述符个数、硬件卸载属性)、收发队列的初始(接收队列还需要填充描述符信息)、对端口的使能、Link及UP/DOWN操作;最后,实现设备的批量接收与发送函数功能,支持对每端口每队列进行分组接收和对每端口每队列进行分组发送。: {4 t( |) E8 l% q# }

) t0 p3 O% {/ g2 E. K 驱动移植开发实现上述基本功能即可使用,剩下部分就是DPDK的功能。
/ b7 P" |2 S/ F9 U) R
8 V4 ~9 y, o9 p1 Q' A  L) YFiNIC网卡测试
7 N( m  b  T5 k
! Q8 a2 p2 ^6 a0 t2 E3 E  1)测试环境
+ R2 h) O% N* H& O6 V1 I
$ T- r* @: P# I4 w    FiNIC是一个系统级板卡,为了方便调试,我们直接在台式机上部署调试。目前,系统占用资源比较少,仅为27%,为异构计算加速器等用户自定义模块UD扩展预留了足够的空间。2 e- A+ f& S2 v) K: u
. U" O- N5 @! ]4 R# _
  2)处理流程; [; P; ~) t5 ~0 v; N- U
5 ~" _" y' y; f/ T7 K8 Q
& n5 |- I) _! x; A- ~5 Q* m' E
& s# _4 E/ P% U. r# o* }
从DPDK的系统初始化流程开始,一般地,跟系统相关,如DPDK环境初始化、CPU检查、中断检查等这些标准内容都跟具体驱动无关,可以直接跳过。在环境初始中的PCI设备初始化过程开始验证。PCI设备的初始也与系统初始过程类似,DPDK编译环境中会记载着能为哪些设备类型(厂商ID与设备ID)提供驱动能力,再通过实际的探测扫描找到具体的设备类型,通过信息比对发现,有设备和驱动列表中匹配了,则调用该驱动的设备探测函数,开始对设备时行一些基本的初始化操作。PCI设备探测函数执行完成后,会紧接着调用其设备配置、队列配置、端口配置等一系列功能函数,将整个设备的硬件初始工作环境配置好。最后通过开始操作,使能端口,使其具备数据的收发功能。
$ f. v2 K8 v7 k2 @* ?: C, ^7 c+ C9 A
   DPDK的环境初始化完成后,就可以根据业务的要求来进行数据收发操作,以DPDK中examples目录中的l2fwd程序为例,后续在每个核上启动一个相应的处理线程,在线程中先调用驱动的批量接收函数获取硬件接收到的报文,然后根据交换规则稍做处理后,直接再将接收到的报文分发到其指定的输出端口。
  v. v' N6 A" B$ Z4 c) {2 r' K" c" s8 U6 A" `
  3)演示验证
0 {& k1 S2 a1 b4 N1 Z4 {8 m* \& _" f
   FiNIC实例化了4个逻辑端口,对端口接收到的报文直接转发到另一个端口。如0接收转发至1,1接收转发至0;2接收转发至3,3接收转发至2。4 \9 C1 ]0 _, E' W

4 P+ Y* P, x+ m- ^ 踩过的雷$ q1 K0 f/ C. `+ L$ U0 U0 d
  m5 b1 m9 I- A
1)debug工具:debug自己一直存在clk找不到,port缺失等问题,工具的问题,综合后仔细检查一遍即可。% H/ ?' u: C  d5 R

8 ?2 q, p+ @" C! I+ R1 Y  E, }% u 2)Corundum调试:Corundum风格太好啦,我都已经看不懂啦,一个显著地风格就是一个寄存器,分段赋值分给多个端口,比如reg [255:0] axis_tdata,这是4个interface的数据组合在一起。另一个就是时序,务必对异步时钟设置set_clock_groups。* y, M* C( ^" i1 w9 l7 _$ Y
4 _* E7 k: Z: @3 h
3)AXIS_Interconnect调试:按理来说应该是很简单的模块,不仅实现分派和聚合,还是先位宽转换,还实现端口交换,功能非常强大,但是面临的问题是丢包,结果发现FIFO Normal模式信号与AXIS信号时序有较大差异,牺牲资源,改成了Packet模式。
" R/ H) }( U( l

该用户从未签到

2#
发表于 2021-11-11 10:58 | 只看该作者
市场需求旺盛,然而技术壁垒积高,在这两难的境地下,可重构的智能网卡应用而生,即基于可编程硬件FPGA芯片的智能网卡,虽为中庸之道,却不失目前较好的解决途径,国内也有许多厂商投身于此,如国内的同悦、锐文等
5 B9 m" t$ ]' ]8 ?
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2021-11-11 11:12 | 只看该作者
    可编程硬件FPGA是直接在PCB上集成,国产可编程FPGA共提供了80路高速SerDes,两组4路SerDes连接QSFP,提供2个40GE接口,两组10路SerDes连接QSFP28,提供100GE接口,从物理形态上,满足了双40GE接口的目标。
    & H0 j8 D6 ^3 ?

    该用户从未签到

    4#
    发表于 2021-11-11 12:10 | 只看该作者
    3)AXIS_Interconnect调试:按理来说应该是很简单的模块,不仅实现分派和聚合,还是先位宽转换,还实现端口交换,功能非常强大,但是面临的问题是丢包,结果发现FIFO Normal模式信号与AXIS信号时序有较大差异,牺牲资源,改成了Packet模式。% S3 U  m% j$ m, x5 g% ~; a! f

    该用户从未签到

    5#
    发表于 2021-11-11 13:11 | 只看该作者
    FiNIC是一个系统级板卡,为了方便调试,我们直接在台式机上部署调试。目前,系统占用资源比较少,仅为27%,为异构计算加速器等用户自定义模块UD扩展预留了足够的空间
    7 g8 l* F4 [2 d8 H/ |) }* f
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-30 01:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表