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

自主100G可重构FPGA网卡FiNIC

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
智能网卡成为国内大厂追逐的热点,如阿里、腾讯、百度,甚至Ucloud均在自研智能网卡,然而,作为智能网卡核心的数据处理器DPU芯片研发周期长、研发成本高、研制需求又随应用不断变化,难以形成确定的specification集合,虽然,国内市场上有许多公司投身DPU研究,如中科驭数、迈普等,鲜有成熟产品。目前,市场需求旺盛,然而技术壁垒积高,在这两难的境地下,可重构的智能网卡应用而生,即基于可编程硬件FPGA芯片的智能网卡,虽为中庸之道,却不失目前较好的解决途径,国内也有许多厂商投身于此,如国内的同悦、锐文等。; S' D5 ]5 j: n6 T: k+ c

% M7 r# A8 D* H* b 在此趋势下,我们这个小厂也算不上的小作坊如何立足,选择哪个发力点,成为一直悬而未决的困惑。从多年的做系统的经验,从多年自主可控产线的积累,我们不想用比较成熟的xilinx的一键式解决方案,我们选择了基于自主可控FPGA的可重构智能网卡实现方案,走上了一条不归路。% n- u, \" c1 I/ |( U9 _! z0 H
8 w4 n* F- d# l& ~& F9 T
我们设置了几个目标:) X0 U  A- ~3 {0 }! H

7 ?& c7 f+ z/ S& f6 L. P 1)性能高,如果是10GE接口,服务器自己可以应付,因此,最小目标是40GE,而且是双40GE,最好结果是100GE;
. M) R" I+ G4 n5 n' w; _, Q8 G7 `  H& |) K
2)可编程,想从两个层次设置两个目标,报文内容深度处理层次,C语言可编程,性能不是问题,主要用于异构计算加速,另一个是通用报文处理层次,网络领域定制语言可编程,主要指P4,一定要达到线速,主要用于网络加速;
; c. s  b: d" G- R& X5 y) C7 }6 H; d$ c- w) a
3)好移植,主要是给应用友好的开发接口,甚至是智能网卡支持商用的开发套件,比如DPDK;0 q" q2 X4 d4 L( B8 `( \7 \

3 W# w$ i6 E& v4 y1 D1 k   4)开源,不涉及第三方知识产权的原理图、硬件逻辑、驱动等进行开放。% A# j' m, z3 l6 K7 t( t
0 ^+ [/ o, Q: X9 e
针对上述大山,背后还有一群小山,我们开始了漫长的攻关.今天,仅仅简单介绍一下我们自认为多项第一的原型FiNIC。我们一直认为,这不仅仅是网卡,支持100G高速接口,支持P4,支持DPDK,这还是异构计算在线加速器FPGA-inline,是泛在计算平台,远大的目标使自己保持干劲。. ^. Y( h% q& F1 Y( v9 E0 r. `
' x% S4 g0 d! h8 m- z8 w; `. |
FiNIC原型
% x6 s3 Y( c9 d3 X9 g8 [
; V6 x% _1 H* Z! l6 t6 G  1)硬件资源7 T# \  `! m7 o: J) e

, B) C- H" C/ i 前序已经介绍了可重构FPGA网卡的架构,主要集成两个层次的可编程资源,可编程硬件FPGA和通用多核处理器。4 L$ ^  P7 F4 [# V& r' N1 e, x
) K$ r) _% m& U6 B
可编程硬件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连接到连接器。% y" ~( j+ F4 ?2 S, H+ N8 @
" j% q; g9 o$ M0 n- @
从链路带宽上来说,1组PCIE3.0 x8接口无法处理2组40GE接口流量,因此,网卡上需要分流,将部分流量卸载到板载通用多核处理器。另外,2组40GE接口从接口功能上来说,更多是服务器网络接口的冗余备份,而不是链路聚合。对于更高性能,2组PCIE3.0 x8才能应付1组100GE接口流量。
7 \+ S' T6 \/ r' I: e& z" I% z( p
为了减小系统研发难度,通用多核处理器资源采用商用FT2000+模块,通过FPGA网卡上COMe连接器,连接FPGA中的1组PCIE3.0 x8硬核。FT2000+模块一方面提供C语言程序的运行环境,支持报文数据的深度处理,可以卸载部分流量,另一方面,作为网卡控制器代理,支持远程控制器对网卡的管理配置。9 z0 x5 z$ a" w0 [9 j7 ?3 }* |

" _; `( K3 |/ B& o6 Y7 W3 Y& f 可以说,巴掌大的网卡也是一个微型的路由器,不仅有转发处理,还有控制协议处理。为了卸载和加速基本网络处理,减小可编程硬件FPGA逻辑资源占用,在网卡上额外增加网络查表引擎,来实现精确查找和模糊查找功能的卸载。; i7 i& N4 U+ a9 C6 b

- _& W- X  F9 F; ]6 u5 P 2)硬件逻辑
1 j9 p" E' r* P* w# M5 t
, [0 f( G5 ]6 L3 j0 [8 _7 Z& c 可重构FPGA网卡硬件逻辑主要分为四部分,PCIe和DMA引擎Corundum模块,用户自定义模块UD,RMT流水线,40GE/100GE IP核HSEC等。
1 o& g3 v5 c8 X) L7 V/ L" U. q4 U0 K$ G" U. i, P
    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的处理。( a8 C% m2 L4 X# X& o+ z, q8 @% P
0 s. L- h" Z* S' z5 ], i/ l4 |
   RMT流水线在前序章节也进行了介绍,这是我们设计开发的Match-Action多级流水线,在Match模块中,采用CAM实现了模糊匹配查找,在Action模块中实现了基于ALU的报文分组选项处理,在Match和Action之间是关键字的交叉开关,实现ALU的共享。RMT的ALU中加、减、移位等操作,并将操作数的宽度从32bits扩展到48bits。可以基于P4语言编写报文分组处理程序,编译后下载到RMT流水线,在线改变RMT流水线功能,实现功能动态重构。1 I6 F7 P( u. ?' g! x4 q- b5 u
0 z  Q9 h6 m& n6 D% ~
   HSEC是高速40GE/100GE MAC核,实现了40GE、100GE接口线速处理。在这里需要额外注意的有两点:一个是FIFO接口到RMT的AXIS接口的转换,另一个是RMT流水线到2组40GE接口的交换,这里应用了AXIS_Interconnect IP,实现冗余备份端口的切换。) u0 O6 H" @9 b- ?% @
9 [. _0 v1 x) _
FiNIC驱动及DPDK适配  ]9 d. T9 }+ y0 @

' |2 f) r% u2 v* W 好用的网卡不仅仅是实现网络功能卸载、应用加速等等,更重要的是向应用提供透明的接口,即用户程序少量修改即可运行,甚至是不修改。这就要求要瞄准市场上最为广泛的应用中间层,特别是发挥零拷贝、用户态协议栈等优势,我们认为DPDK是目前比较全面的数据平面开发套件,因此,在内核态驱动的基础上,主要实现对DPDK的适配和支持。
; u" n5 z7 Y) i0 C# y/ U
8 e# b0 H. J  m. c; v2 H6 _6 U    DPDK尽其所能的将有助于包处理加速的软件特性与优化方法于一身,最大限度的提升包处理能力。如Huge Page、TLB、缓存对齐、多通道内存访问、NUMA、预取、CACHE、多核并行、线程绑定、无锁队列、零中断、零拷贝、IA最新或特定指令等等。
" S2 J  ^7 C$ S0 l% ]% @8 {$ {& B
- ^; m$ ?  A! P" I% h 根据DPDK开发环境架构及分层结构模型,我们的驱动功能主要还是原始驱动的主要逻辑,基本不用做大修改,只是按照DPDK开发环境的架构设计进行重组适配即可。其移植过程也与标准内核网卡驱动开发流程类似。/ h, |  b* n  o! Z. ]: G% i3 _( ?

: C' Y. e5 S9 i4 A  _0 E6 R 首先在DPDK的设备驱动列表中增加设备型号,通过PCI设备注册的方式告诉DPDK,可以为该设备型号提供驱动能力;其次,实现驱动的探测函数功能与设备释放函数功能,并在控测函数中完成硬件资源地址的映射;然后,创建DPDK的以太网设备对象,并对该对象进行实例化操作,主要包括对设备的配置功能(如队列数、每队列描述符个数、硬件卸载属性)、收发队列的初始(接收队列还需要填充描述符信息)、对端口的使能、Link及UP/DOWN操作;最后,实现设备的批量接收与发送函数功能,支持对每端口每队列进行分组接收和对每端口每队列进行分组发送。9 N  m) K, g' J: e
+ e& `0 S0 o; f, q
驱动移植开发实现上述基本功能即可使用,剩下部分就是DPDK的功能。
9 h; z3 k3 c' f* s# L" A$ K% B, ]( K# F& |* M
FiNIC网卡测试
7 r) }7 Y" T* L# d; E8 C1 d# I5 F2 M8 ]) u9 j/ m
  1)测试环境5 I+ Z5 f8 P: V- ?

; |6 L* o0 _7 p( o! S    FiNIC是一个系统级板卡,为了方便调试,我们直接在台式机上部署调试。目前,系统占用资源比较少,仅为27%,为异构计算加速器等用户自定义模块UD扩展预留了足够的空间。
9 E$ i3 B4 A  R! s) J1 L" o, {  ]5 S; e( O
  2)处理流程
/ v5 b1 \& C) S, P! ~0 Y
7 Q* l! S& ?6 U" H8 `8 M% N5 q
1 \0 B( s6 c; r  T# q% F! D: g9 k0 h  d3 b2 p0 v
从DPDK的系统初始化流程开始,一般地,跟系统相关,如DPDK环境初始化、CPU检查、中断检查等这些标准内容都跟具体驱动无关,可以直接跳过。在环境初始中的PCI设备初始化过程开始验证。PCI设备的初始也与系统初始过程类似,DPDK编译环境中会记载着能为哪些设备类型(厂商ID与设备ID)提供驱动能力,再通过实际的探测扫描找到具体的设备类型,通过信息比对发现,有设备和驱动列表中匹配了,则调用该驱动的设备探测函数,开始对设备时行一些基本的初始化操作。PCI设备探测函数执行完成后,会紧接着调用其设备配置、队列配置、端口配置等一系列功能函数,将整个设备的硬件初始工作环境配置好。最后通过开始操作,使能端口,使其具备数据的收发功能。
6 d- N- f1 ?( t+ x* `" C; S& A, d( i- G% U* A& ]- z
   DPDK的环境初始化完成后,就可以根据业务的要求来进行数据收发操作,以DPDK中examples目录中的l2fwd程序为例,后续在每个核上启动一个相应的处理线程,在线程中先调用驱动的批量接收函数获取硬件接收到的报文,然后根据交换规则稍做处理后,直接再将接收到的报文分发到其指定的输出端口。6 Y  u2 t8 {" x* F( x6 ~* l* X

1 B" ?* D" [! t. C; X, n+ g* f6 i  3)演示验证, n+ L- O: V8 v2 n: K) p6 [

& l1 M4 t2 Q7 ~+ G- G4 T) j   FiNIC实例化了4个逻辑端口,对端口接收到的报文直接转发到另一个端口。如0接收转发至1,1接收转发至0;2接收转发至3,3接收转发至2。5 P- ]: `" d' }" V1 w7 Z: u2 n, R
$ f1 t9 G1 U6 z! E- u% d
踩过的雷  X6 j. ?8 ~9 }; G. B) d
7 @' }2 @( p+ B$ [/ \3 ]' ?7 r& P6 J
1)debug工具:debug自己一直存在clk找不到,port缺失等问题,工具的问题,综合后仔细检查一遍即可。. X3 d7 R5 Y  t3 Z2 l6 `  c
% m; C5 @8 v$ Z& `# R
2)Corundum调试:Corundum风格太好啦,我都已经看不懂啦,一个显著地风格就是一个寄存器,分段赋值分给多个端口,比如reg [255:0] axis_tdata,这是4个interface的数据组合在一起。另一个就是时序,务必对异步时钟设置set_clock_groups。
( j' X6 }* F0 W9 N3 h1 \6 N0 s* T) O1 P; _
3)AXIS_Interconnect调试:按理来说应该是很简单的模块,不仅实现分派和聚合,还是先位宽转换,还实现端口交换,功能非常强大,但是面临的问题是丢包,结果发现FIFO Normal模式信号与AXIS信号时序有较大差异,牺牲资源,改成了Packet模式。

/ N3 A6 D) A9 N6 s, R- c; K; q

该用户从未签到

2#
发表于 2021-11-11 10:58 | 只看该作者
市场需求旺盛,然而技术壁垒积高,在这两难的境地下,可重构的智能网卡应用而生,即基于可编程硬件FPGA芯片的智能网卡,虽为中庸之道,却不失目前较好的解决途径,国内也有许多厂商投身于此,如国内的同悦、锐文等
+ r8 V; c2 X. r- h/ f+ {9 U
  • 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接口的目标。
    ! `/ \  ]& T" P+ ?0 R$ w

    该用户从未签到

    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扩展预留了足够的空间. L  Z9 d! C7 b/ a! m7 a
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-3 02:55 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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