TCAM背景

当前商业芯片对OpenFlow的支持最欠缺的表现在:流表大小、流表数量、流表动作三方面。如严格按照OpenFlow标准,则流表只能用TCAM来实现。那我们简单讨论下什么是TCAM?为什么需要用TCAM来实现流表?

概念

  • TCAM是ternary(三重的) content addressable memory的缩写,中文是:三重内容可寻址内存。一般memory是根据地址来访问存储的内容,而TCAM恰好相反,它是根据内容去找到地址。一般的memory中每个bit都只能表示两个值:0或1,而TCAM每个bit可表示三个值:0,1和XX表示don’t care
  • TCAM之所以一个bit能表示三个值,原因是它的一条entry其实在物理上由两条entry组成,一条存放data,另外一条存放相应的mask。由此可以实现0/1/X的表示。有了TCAM,就可支持各种LOOKUP KEY的任何组合查找,任意地MASK掉任何不关心的字段。只有TCAM可以做这样的事情,HASH不行。
  • 如果有多条TCAM ENTRY都能匹配上,TCAM优先选择INDEX最小的那一条。TCAM的查找效率与深度无关,也就是说,无论表项多大,查找速度是一样的,这跟TCAM的硬件实现方式有关。
  • TCAM可内置在芯片里面,也可外挂在芯片之外,芯片通过接口去访问。但是内置TCAM比较占芯片面积,一条TCAM ENTRY至少抵得上5条DRAM/SRAM ENTRY,如果芯片内部放了太大的TCAM会导致芯片成本和功耗直线上升。所以一般芯片都不会内置太大TCAM。
  • 外挂TCAM的成本和功耗一样很大,甚至比ASIC芯片本身还要贵,而且如果一个报文要访问外部TCAM多次的话,受限于TCAM接口速率,会导致无法线速。所以交换机一般也都不会使用外挂TCAM。
  • 普通交换机中的ACL功能必须使用TCAM,所以内置TCAM省不掉,而对于路由,如果也必须使用TCAM的话,路由表项做不大。正因为TCAM的高成本和高功耗,所以现在最新的商业芯片已经开始使用算法来支持路由了,盛科的GreatBelt芯片是最早使用算法来做路由的商业芯片。
  • 如果OpenFlow交换机必须使用TCAM的话,成本和功耗会居高不下,自然会影响OF交换机的推广。盛科在ONS 2013上获得SDN IDOL的V350,就是针对这一点做了创新。 GreatBelt芯片采用了N-FLOW技术,TCAM+HASH相结合HASH采用哪种KEY是可配的HASH FLOW高达64K。
  • TCAM entry size一般有多种,比如某著名厂家的有single, double, quad三种宽度,single只能放一点L2或者L3的常用字段,double可以放大部分L2或者L3或者常用的L2+L3字段,而quad则可以放基本上所有的字段。要完全满足Openflow的灵活需求,至少要quad,他们这个做法仅适用于ACL。
  • 假设TCAM entry宽度全部配置成single可以支持N条的话,那么配制成double就可以支持N/2, 配制成quad就可以支持N/4.这就是为什么有的设备厂商宣称他们支持N条flow,但是实测只有N/2,或者N/4,因为他们都按照最理想情况宣称,但是实际测试的时候,人家都用最坏情况测试。
  • 盛科芯片内置的使用IBM技术的TCAM,功耗可以做到很低。在entry宽度上也跟其它厂家稍微有所不同,它设计了四种宽度,分别是80/160/320/640bits。常用L2 or IPv4字段用80就可以,完整的L2 or IPv4用160,完整的L2+L3 or IPv6用320,完整的L2+IPv6用640,在字段组合上也跟别家不同,更注重灵活性。

逻辑设计基础_芯片设计--TCAM概述相关推荐

  1. 系统架构_软件架构风格概述

    系统架构_软件架构风格概述                                    转载自:http://jpkc.whu.edu.cn/jpkc/dxqyxxxtfgnjg/dzja/ ...

  2. 吴文虎_程序设计基础_清华大学视频教程

    原文地址:http://blog.csdn.net/j1316061080/article/details/7571092 吴文虎--现任清华大学计算机系教授.博士生导师,现任高校计算机基础教育研究会 ...

  3. python语言程序设计慕课_中国大学MOOC(慕课)_Python语言程序设计基础_试题及答案...

    中国大学MOOC(慕课)_Python语言程序设计基础_试题及答案 更多相关问题 智慧职教: 反应级数的绝对值不会超过3,可以是正整数或者负整数,不能是分数. 在铆接过程中,铆孔的质量直接影响铆接质量 ...

  4. python table类中的 可以作为初步观察工具_Python程序设计基础_课程2020最新章节测试网课课后答案...

    Python程序设计基础_课程2020最新章节测试网课课后答案 更多相关问题 科学探究的过程一般要经过______.作出假设.制定方案.实施方案,得出结论等五个步骤. 在生物学研究中,当实验的结果与原 ...

  5. 带你了解FPGA(2)--逻辑设计基础

    逻辑设计基础 1. 基本的门电路 2. 时序逻辑和组合逻辑 3. FPGA器件结构 1. 基本的门电路 最基本的逻辑电路运算是通过与门.或门和非门实现的,他们的符合以及真值表如下所示: 在与.或.非3 ...

  6. 郑州大学python程序设计试题_Python程序设计基础_智慧树章节测试题答案

    Python程序设计基础_智慧树章节测试题答案 更多相关问题 [单选题]在人体生长发育过程中,可将哪一年龄段称为少年期 A. 12-16岁 B. 13~17 岁 C. 11-15岁 D. 10-14岁 ...

  7. 人工神经网络 神经网络区别_人工神经网络概述

    人工神经网络 神经网络区别 Artificial neural networks (ANN) in machine learning (artificial intelligence) are com ...

  8. python程序设计基础第三版_Python程序设计基础_知到免费答案全套答案

    Python程序设计基础_知到免费答案全套答案 答案: 更多相关问题 动滑轮牵引提升工作说法错误的是()A.省功B.省力C.速度快D.不省功 填写隔离开关检修记录时应清晰明了,语言简炼,内容主要包括( ...

  9. java程序设计基础_陈国君版第五版_第七章例题

    java程序设计基础_陈国君版第五版_第七章例题 class Cylinder {private double radius;private int height;private double pi ...

  10. java程序设计基础_陈国君版第五版_第五章习题

    java程序设计基础_陈国君版第五版_第五章习题 import java.util.Scanner; public class Main5_1 {public static void main(Str ...

最新文章

  1. Web页面中png jpg gif webp svg的区别和使用
  2. ashx 跨域_ASP.NET通用HTTP处理程序(ashx的),支持JSONP
  3. 关于手思3.0 代码规范
  4. navicat卡死问题
  5. 【转】译文:.net 程序员易犯的7个通病
  6. 休眠身份,序列和表(序列)生成器
  7. Python连接MySQL及一系列相关操作
  8. 【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数
  9. java简单数据结构_图解Java常用数据结构
  10. 树形结构 —— 树与二叉树
  11. AWT_Swing_单选框(Java)
  12. 转:Nginx 性能优化有这篇就够了!
  13. 机器学习中的numpy的array_Python中机器学习的Numpy指南
  14. CCNA考试题库中英文翻译版及答案17
  15. 基于SSM架构的网上书城系统
  16. axure灯箱效果_将时尚的灯箱效果添加到WordPress画廊
  17. PTA创建视图,包含商品打折前后的价格信息
  18. systemverilog:always_comb、always_latch、always_ff区别
  19. 智慧工地 | 数字孪生楼宇施工管理平台
  20. 基于Python实现的电梯进程及调度管理

热门文章

  1. 希腊神话传说中的诸神
  2. 计算机考研选择211还是重邮,22考研:这些容易但性价比高的院校专业千万别错过!...
  3. Arthas线上代码诊断神器-定位问题
  4. BUUCTF:[ACTF新生赛2020]swp
  5. systemverilog : constraint slove... before 详解
  6. Dell灵越 5559笔记本安装固态硬盘 BIOS设置
  7. 企微群机器人定时提醒
  8. java实现短信发送
  9. 医疗管理系统-图形报表、POI报表
  10. A记录、CNAME、MX记录、NS记录的区别和联系