首页 > 其他分享 >在tofino数据平面上实现表的模拟

在tofino数据平面上实现表的模拟

时间:2023-05-21 16:55:07浏览次数:43  
标签:index 交换机 key 寄存器 平面 107 模拟 tofino

在tofino数据平面上实现表的模拟

实验目的

当需要在数据平面实现较为复杂的信息存储和更新时,经常产生在数据平面存放一张表的需求,例如对于多台感兴趣的交换机,希望记录并更新交换机的各项网络状态信息。从数据抽象上来说,以表的形式来记录是直观的,从使用速率来说,将信息存储在数据平面可以避免与控制平面交互所需的较大时延,更适用于时延敏感的任务。

实验环境

sde版本:bf-sde-9.10.0

实验过程与分析

在数据平面存储数据的载体主要包括寄存器(register)、计数器(counter)、用户定义的元数据(user-defined metadata)。由于用元数据难以直观地建立映射关系,而计数器在数据平面只能进行简单的计数操作,所以我们考虑用寄存器来实现表的模拟。

由于寄存器本身,是一个index对应一个value的,并没有直接满足表中一个key对应多个value的特征,所以考虑不同的使用方法。

  • 第一种尝试思路

一个直白的想法是通过对寄存器进行分段读写,在不同段存储不同的信息,例如设置长度64bit的寄存器,15:0位(即低16位)用于存放交换机ID。

但寄存器并不支持分段写入,当写入的位数长度不是32位,例如register_data[15:0] = 16w5;时,则会报错error: can only output entire 32-bit ALU output,若改为32位,例如register_data[31:0] = 32w5;,则会出现以下报错:

error: Wide operations not supported in stateful alu, will only operate on bottom 32 bits
  • 第二种尝试思路

由于寄存器虽然可以分段读取但不支持分段写入,所以无法将多组值存入单组寄存器中。因此,我们考虑用多组寄存器来模拟表。一个直白的想法是,为每个表项都设置一组寄存器,包括key和value,即表中的每一列对应一组寄存器,且相同行的表项对应同一个index。但是这需要在key和index之间建立联系,因为寄存器中存放的是index与value之间的对应关系

例如,下表是我们希望存储在数据平面的表:

switch id (key) info1 info2 info3
105 1 11 111
106 2 22 222
107 3 33 333

如果为每个表项设置一组寄存器,就是如下效果:

index switch id (key)
1 105
2 106
3 107
index info2
1 11
2 22
3 33

其他info的寄存器情况类似info2,这样似乎能够满足我们的需求。但分析之后发现,当一个来自某交换机的新数据包到达时,数据平面需要对key所在的那组寄存器进行遍历搜索,才能得到对应的index。具体地说,以交换机id为107的那行表项为例,当一个来自107交换机的数据包到达时,我们希望更新107交换机的对应info,就需要这行所对应的index,因此需要对key所在的寄存器组进行搜索,以得到107对应的index=3

但是,目前还没有一种可以在数据平面遍历寄存器的方法,当表中行数较多时,这个问题就更加明显。

  • 第三种尝试思路

由于寻找index是有挑战的,所以我们考虑直接将key化为index来使用。例如,我们感兴趣的交换机是相邻交换机,那么可以发现,交换机id与数据包的入端口也是一一对应的,因为每个端口只能有一个直接相连的实体。因此,我们可以直接将数据包的入端口作为index来使用,考虑到交换机中实际使用的是端口的D_P编号,所以需要扩大寄存器组的元素数量以涵盖D_P编号范围:

Register<bit<32>,bit<16>>(200, 0) info1;
Register<bit<32>,bit<16>>(200, 0) info2;
Register<bit<32>,bit<16>>(200, 0) info3;

使用时,直接将D_P编号作为index进行索引,即可更新对应行的表项。这个方案的缺点在于,为了使得index直接发挥key的功能而无需搜索,可能引入较多的未使用空间。

总结

从目前讨论的几个方案来看,在tofino数据平面实现表的模拟,需要能够在数据包中直接获取index的值,这可以通过某些转化来达成,虽然可能引入额外的空间开销。

标签:index,交换机,key,寄存器,平面,107,模拟,tofino
From: https://www.cnblogs.com/CCchaos/p/17418790.html

相关文章

  • 请在微信客户端打开链接:火狐浏览器模拟微信浏览器内核教程 ,用chrome模拟微信浏览器访
    背景:微信浏览器能访问,出现,请在微信客户端打开链接。useragentswitcherforfirefox:https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/FF越来越不行了,下载都下载不下来~useragentswitcher1.0.34中文版forchrome:http://www.pc6.com/soft/FireFox_133175.h......
  • PHP模拟登录并获取数据
    cURL是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信息。本文以模拟登录开源中国(oschina)为例,和大家分享cURL的使用。PHP的curl()在抓取网页的效率方面是比较......
  • 机器人手眼标定Ax=xB(eye to hand和eye in hand)及平面九点法标定
    一、背景Calibration是机器人开发者永远的痛。虽然说方法说起来几十年前就有,但每一个要用摄像头的人都还是要经过一番痛苦的踩坑,没有轻轻松松拿来就效果好的包。机器人视觉应用中,手眼标定是一个非常基础且关键的问题。简单来说手眼标定的目的就是获取机器人坐标系和相机坐标系的关......
  • 程序设计进阶模拟试题
    题目描述请编写函数tun。西数的功能是。统计各年龄段的人数。1个年秘通过调用淹机函数获得,并放在主面救的ke数组中,要求函数赶1至虫9乡年龄段的人敷放在d01户中,把0至9岁年龄段的人数放1d门1中,把2.至沙岁年龄段社人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]......
  • 模拟运行600万年 数据0损坏!Solidigm把QLC闪存玩到了极致
    不可否认的是,SLC、MLC、TLC、QLC、PLC、HLC……闪存技术一路走下来,整体的可靠性、寿命指标是逐步走低的,这也是NAND闪存架构天然属性所决定的。当然,这不代表QLC、PLC闪存的就难堪大用,关键是看如何设计与优化,从闪存、硬盘的硬件优化,再到主控、算法、负载的软件优化,都至关重要,也直接......
  • VTK 平面裁剪
    有些时候需要显示零件内部情况,所有会对零件显示进行平面裁剪,这里用到了vtkPlane和vtkClipPolyData。vtkPlane是定义一个平面,vtkClipPolyData使用vtkPlane定义的平面进行裁剪。下面列出主要的代码,其他Qt框架代码参考前面文章。QSurfaceFormat::setDefaultFormat(QVTKOpenGLNati......
  • R语言布朗运动模拟股市、物种进化树状图、二项分布可视化
    本文模拟了在连续和离散时间布朗演化一些简单的方法。布朗运动的数学模型(也称为随机游动)也可以用来描述许多现象以及微小颗粒的随机运动,如股市的波动和在化石中的物理特性的演变。布朗运动是随机模式,即改变了从一次到下一个是随机从正态分布绘制均值为0.0,方差为σ2×ΔT。换句话......
  • 模拟电子知识之一
      1、电流源LM134/234/3342、仪表放大器 ina114AD620 AD6243、隔离放大器ISO120/121 AD225 ISO1244、可编程增益放大器  AD603  VCA2612 5、采样保持  AD783   MAX51656、V/F转换   VFC121  AD650  LM2907/29177、数字电位器 ......
  • 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数
    原文链接:http://tecdat.cn/?p=22862 最近我们被客户要求撰写关于风险价值VaR的研究报告,包括一些图形和统计输出。风险价值(VaR)是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度 ( 点击文末“阅读原文”获取完整代码数据******** )。什么是风......
  • 测试案例设计、故障模拟...非功能测试如何落地? 1
    随着数字化进程的高速发展,业务量随之增长,新架构下的IT系统的质量测试变得更加重要。针对新IT架构的设计逻辑,中电金信打造了源启数字构建平台,提供统一测试管理,构建了全面的质控体系,覆盖软件测试全生命周期。中电金信质量安全事业部非功能质量保障专家王瑀在Gien有料直播中向我们分享......