0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RSS的逻辑实现

Spinal FPGA 来源:Spinal FPGA 作者:Spinal FPGA 2022-11-06 13:22 次阅读

在网卡领域,多队列技术已经是一项很常用的技术,而网络报文的负载分流,常见的就是RSS。本文就索性仔细分析下RSS的逻辑实现,同时以SpinalHDL给出RSS中最为关键的Toeplitz Hash的实现。

》RSS(receive side scaling) RSS(receive side scaling)是由微软提出的一种负载分流方法,通过计算网络数据报文中的网络层&传输层二/三/四元组HASH值,取HASH值的最低有效位(LSB)用于索引间接寻址表RETA(Redirection Table),间接寻址表RETA中的保存索引值用于分配数据报文到不同的CPU接收处理。现阶段RSS基本已有硬件实现,通过这项技术能够将网络流量分载到多个CPU上,降低操作系统单个CPU的占用率。RSS的整体实现如下图所示:

1f2f1ccc-5d81-11ed-a3b6-dac502259ad0.png

  RSS Hash计算所采用的Hash算法为Toeplitz Hash。Toeplitz Hash算法定义如下:

function ComputeRssHash(Input[],RSK)
    ret=0;
    for each bit b in Input[] do
        if b==1 then
            ret^=(left-most 32 bit of RSK)
        shift RSK left 1 bit position
    end for

Toeplitz Hash需要一个RSK。在DPDK的实现里,key往往大小为40Byte。结合上述算法,320 bit的RSK对于Toeplitz Hash实现可满足$320-32+1=289$ bit大小的Input输入。在DPDK中,存有一张默认的RSK,定义如下:

uint8_t default_rss_key[] = {
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
};

  当然,如果Input位宽大于289 bit,个人有观察到DPDK代码中也提供了一张RSK 大表:

static const uint8_t big_rss_key[] = {
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
};

  对比可以看到这里的大表是上面40Byte表的复制

》对称RSS

  采用上面的RSK存在一个问题就是同一个连接的不同方向使用这个默认值计算出来的hash值是不一样的。具体讲就是{src: 1.1.1.1, dst: 2.2.2.2, srcport: 123, dstport: 456}和{src: 2.2.2.2, dst: 1.1.1.1, srcport: 456, dstport: 123} 计算出来的hash值是不一样的,hash值不一样就会导致两个方向的报文被分发到不同的接收队列,由不同的CPU进行处理。
  在网络应用中,如果同一个连接的双向报文在开启RSS之后被分发到同一个CPU上处理,这种RSS就称为对称RSS。对于需要为连接保存一些信息的网络应用来说,对称RSS对性能提升有很大帮助。如果同一个连接的双向报文被分发到不同的CPU,那么两个CPU之间共享这个连接的信息就会涉及到锁,而锁显然是会影响性能的。
  在DPDK中,提供了一组用于实现对称RSS的RSK:

static const uint8_t toeplitz_symmetric_key[] = {
0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A,
0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A,
0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A,
0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A,
0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A,
};

  关于对称RSK是如何推导的,感兴趣的小伙伴可以去搜索这篇论文:《Scalable TCP Session monitoring with Symmetric Receive-side Scaling》,这里不做理论上的推导。

》Toeplitz Hash算法实现

  在上面所提到的Toeplitz Hash算法,其无非一个for循环按位进行异或处理。对于熟悉HLS的同学来讲或许觉得这个实现是很简单的。然而HLS并非我的选择。在for循环里面的if对于逻辑设计而言并非一个友好的实现。上面的算法可以略作修改:

function ComputeRssHash(Input[],RSK)
    ret=0;
    for each bit b in Input[] do
        ret^=(left-most 32 bit of RSK)&{32{b}}
        shift RSK left 1 bit position
    end for

  这个等价改动很简单,学过数字电路的同学都明白。在最早的文章《= Yes or No》中曾详细解析过在SpinalHDL中=的用法,那么这里就用得上了。上面的算法在SpinalHDL中也可以很容易的实现:

1f4f729c-5d81-11ed-a3b6-dac502259ad0.png

在SpinalHDL中可以很轻松地实现类似软件风格的可综合电路。这就是SpinalHDL这门语言的简洁优雅之处。 》Toeplitz Hash算法实现进阶   上面的算法实现可以说是简单的算法翻译。Toeplitz Hash算法本质上是一个FG(2)矩阵乘:

1f7de3ac-5d81-11ed-a3b6-dac502259ad0.png

  那么该电路可以实现为如下的方式:

1f9649ec-5d81-11ed-a3b6-dac502259ad0.png

  这两种方式是等价的,其综合出来的电路也是一致的,至于倾向使用哪种方式,小伙伴们可以自行选择了。 》RSS hash的逻辑设计   对于Toeplitz Hash算法实现,虽然逻辑级数并不高,但如果RSK完全由软件进行配置,那么消耗的资源还是相对较多的。针对大多数场景,一般只使用对称RSK或者非对称RSK,且一般应用中选择DPDK中指定的RSK,那么在逻辑实现里将RSK给固定下来综合所使用的逻辑资源就很少了。而针对需要选择变换对称RSK或者非对称RSK的情况,可以选择在逻辑中制作一个开关用于指定选择对称还是非对称RSK。以上面所提到的DPDK中的两个KEY为例,逻辑实现如下图所示:

1fc03e28-5d81-11ed-a3b6-dac502259ad0.png

  值得注意的是,只例化一个ToeplitzHashCal而根据symmetric的值选择输入的rsk则消耗的资源相对较多。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10446

    浏览量

    206567
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • RSS
    RSS
    +关注

    关注

    1

    文章

    32

    浏览量

    12177

原文标题:RSS on NIC

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用XML:扩展RSS的能力

    使用 XML: 扩展 RSS 的能力级别: 中级Benoit Marchal (bmarchal@pineapplesoft.com), 顾问, Pineapplesoft2006 年 9 月 18
    发表于 11-13 22:30

    使用RSS和Atom实现新闻联合

    使用 RSS 和 Atom 实现新闻联合在内容联合中使用 RSS 2.0 和 Atom 1.0 的快捷参考 级别: 中级Ying Ying Lin
    发表于 11-13 22:35

    UWB定位技术之定位算法:RSS、AOA、TOA、TDOA

    无线定位方法是指分析接收到的无线电波信号的特征参数,然后根据特定算法计算被测对象的位置(二维/三维坐标:经度、纬度、高度)。UWB定位技术常用的无线定位方法有如下几种:信号强度分析法(RSS)、到达
    发表于 06-28 14:36

    仔细分析下RSS逻辑实现

    在网卡领域,多队列技术已经是一项很常用的技术,而网络报文的负载分流,常见的就是RSS。本文就索性仔细分析下RSS逻辑实现,同时以SpinalHDL给出
    发表于 11-09 14:57

    夏新 E850 手机RSS PPC版

    夏新 E850 手机RSS PPC版.rar
    发表于 01-25 15:55 0次下载

    如何使用XML/RSS 来提供下一代的网页服务和操作

    如何使用XML/RSS 来提供下一代的网页服务和操作 选择一些适合的协议和技术便很容易使你的机器成为一个博客。在XML 和RSS 语言的配合下,企业化的IT 应用软
    发表于 03-23 10:35 20次下载

    什么是RSS

    什么是RSS RSS是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容) 在门户网站大行其
    发表于 01-28 17:24 833次阅读

    RSS在OAI-PMH协议中的应用

    RSS是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),通常被用于新闻和其他按顺 序排列的网站。 RSS就是一种用来分发和汇集网页内容的XML格式。 Rss Feed 信源,就
    发表于 06-30 10:42 18次下载
    <b class='flag-5'>RSS</b>在OAI-PMH协议中的应用

    从算法设计到硬件逻辑实现

    从算法设计到硬件逻辑实现 有需要的朋友下来看看
    发表于 12-29 16:47 6次下载

    从算法设计到硬线逻辑实现

    从算法设计到硬线逻辑实现,有需要的下来看看。
    发表于 05-10 11:24 31次下载

    基于室内定位RSS分布一致性研究

    信号强度( Rec eived Signal Strength,RSS)的室内定位算法已经被广泛应用于室内定位中,成为室内定位算法研究的一个重要分支。实际应用中,基于RSS的室内定位算法可以分为两类:基于RSS测距的室内定位和基
    发表于 11-03 15:56 6次下载
    基于室内定位<b class='flag-5'>RSS</b>分布一致性研究

    CMOS级逻辑电路实现综述

    由前面的基础可知,CMOS只能实现基本逻辑的非,比如或逻辑,与逻辑,如果不加反相器,CMOS只能实现或非,与非
    的头像 发表于 09-07 14:43 5495次阅读
    CMOS级<b class='flag-5'>逻辑</b>电路<b class='flag-5'>实现</b>综述

    关于RSS的分析和介绍

    很多人认为自动驾驶不安全,可是却说不出原因。从逻辑上说,要想批判自动驾驶的RSS模型,必须找到一个RSS确定的责任与“常识性”的人类判断不一致的事故场景。但即便研究了国家高速公路交通安全管理局的600万起撞车事故之后,也只得出了
    的头像 发表于 09-06 16:43 3631次阅读

    加拿大ISED发布第5版 RSS-192标准

    2023年7月5日,加拿大创新、科学和经济发展部 (ISED) 发布了无线电标准规范 RSS-192 Issue5《在3450-3900 MHz 频段运行的灵活使用宽带设备》。此次标准更新,ISED
    的头像 发表于 08-11 17:53 310次阅读
    加拿大ISED发布第5版 <b class='flag-5'>RSS</b>-192标准

    重磅资讯 | 加拿大ISED更新RSS-247标准!

    加拿大创新、科学和经济发展部(ISED)更新RSS-247的版本至issue 3,将LE-LAN设备可用的频率扩展到5850-5895MHz。新规已于2023年8月3日正式生效。
    的头像 发表于 08-18 17:54 732次阅读
    重磅资讯 | 加拿大ISED更新<b class='flag-5'>RSS</b>-247标准!