zoukankan      html  css  js  c++  java
  • 三层交换机之MMU

    概述

    MMU介于Ingress和Egress之间,被所有端口共享。MMU同时支持内部和外部缓存。

    一个入口报文,可以缓存到内部缓存、外部缓存或者both,取决于报文转发到哪个端口(Egress Port)。每个Egress Port要么指定内部缓存,要么指定外部缓存,not both。对于组播报文这种转发到多个Egress Ports的情况,则可能报文会根据Egress Port同时缓存到内部和外部缓存中。

    MMU包含以下功能组件:(buffer blocks用来缓存报文,queue blocks用来缓存控制结构和转发数据)

    • Admission Control:根据入端口和优先级、出端口、队列和缓存占用情况,决定转发还是丢弃报文
    • Internal Buffer:2MB片内SRAM,EMA(External Memory Access) buffer pool也在其中
    • External Buffer:外部DRAM(外接DDR)
    • EMA Queues:访问External Buffer的队列,即Ingress和外部DRAM之间的缓冲区
    • Replication Engine Work Queues:组播、镜像包和copy_to_cpu报文的队列
    • Egress Port Queues:每个Egress Port一组队列,包括Internal Buffer Queues和External Buffer Queues,总共有256K条egress queues

    Life of a Packet Inside the MMU

    MMU内部报文转发流程如下图,主要分为控制路径和数据路径:

    • 控制路径上报文头(packet header)缓存在Replication Engine Queues和Egress Queues中;
    • 数据路径上报文负载(packet payload)缓存到Internal Buffers、EMA和External Buffers。

    在入端口报文准许进入Ingress Queue之前,均会进行Ingress和Egress资源限制的检查(Admission Control),检查失败报文将被丢弃。假设所有资源均可用,对单个报文而言,存在上图五种报文转发路径。

    除了正常的L2/L3 multicast报文转发之外,MMU按照组播转发流程处理COPY_TO_CPU,mirror,broadcast报文。Replication Engine负责将这些报文复制到各Egress Queues。根据IPMC表转发的组播报文在进入Egress Ports之前复制。Replication Engine每个时钟周期可以复制最多4个报文,如果组播报文需要复制超过4份,那么就可能发生拥塞。类似于Egress Queues,Replication Engine也可以配置thresholds和limits,用来处理拥塞。

    Buffer Management

    Buffer Management指为每个Egress Queue,Ingress Priority Group和Ingress Port分配MMU缓存的机制。主要有两个目的,其一为每个Ingress Port公平地分配缓存资源,其二处理报文拥塞,主要是突发报文的吸能。

    Resource Types

    • 2MB internal buffer, 192Bytes cell size,一个报文最少使用一个cell且不能与其他报文共享cell。
    • External memory access pool在2MB internal buffer中,EMA pool大小在初始化时指定且不能动态调整。
    • 8K Replication Engine(RE) work queue entries,用来进行multicast,mirror, or copy_to_cpu报文的复制。
    • External buffer,768Bytes cell size。
    • 256K egress queue entrise(EQEs),EQEs类似于packet pointers。256K EQE限制了internel & external buffer最大缓存报文数。每个报文需要一个packet pointer,无论报文的长度是多少,即64字节报文和9216字节报文都只占用一个packet pointer。

    Accounting Sites

    Ingress & Egress Admission Control需要清楚地知道cells和packet pointers资源的使用情况,才能决定是否准许报文进入队列。交换芯片通过维护一个基于端口的Ingress & Egress的包计数来实现,Admission Control准许报文进入队列时,计数增加,报文转发出端口时,计数减少。

    在Ingress方向,每个入端口报文均按照端口和per-port per-priority-group两个维度计数。对于单播、组播和广播报文均如此。组播、广播和copy_to_cpu报文的复制在入Egress Queues之前完成,随后才能Scheduling流程,无论复制多少份,在Ingress Port包计数中,只计数一个包。

     在Egress方向,每个出端口报文均按照分类和队列两个维度计数。对于单播报文,每个报文增加一个egress queue counter。对于组播、广播和copy_to_cpu这种复制报文,Egress方向每个复制的报文均计数,因为每个复制的报文均占据了EQEs资源。

    Memory Allocation

    缓存分配分为动态分配和静态分配两种方式。动态分配依据alpha值来动态分配shared资源。

    以THDO_QCONFIG_CELL为例

    1)Q_MIN_CELL限制了每个EQ最少使用资源数。

    2)Q_LIMIT_ENABLE_CELL为0,则该EQ队列使用cell超过Q_MIN_CELL时,可以使用共享资源,Q_LIMIT_ENABLE_CELL为1,则丢弃报文。

    3)Q_LIMIT_DYNAMIC_CELL为0,则为静态分配,可以使用的共享资源数受Q_SHARED_LIMIT_CELL限制;如果为1,则为动态分配,根据Q_SHARED_ALPHA_CELL值从共享资源池中取相应比例的资源。如果某一队列没有流量,那么alpha值大或者小,不会影响其他队列。

    4)动态模式下,PORT_MAX_SHARED_CELL寄存器配置各端口共享缓存资源池的资源数。

    tips: QENTRY和CELL是一样的,只不过是计量单位有区别。可以读取QSTATUS_CELL即可。

    Ingress Admission Control

    目的:

    1) Ingress port starvation avoidance

    2) Ingress fairness

    3) Lossless frame delivery

     

    交换芯片会对以下资源进行Ingress Admission Control检查:

    1) Internal buffer ingress pool (cell)

    2) External buffer ingress pool (cell) 寄存器前缀EXT

    3) EMA ingress pool (cell) 寄存器前缀EMA

    4) RE work enqueue entry pool (RQE) 寄存器前缀REQ

    5) Egress queue entry pool (EQE) 寄存器前缀QEN

    每种资源单独统计入端口报文数,并根据各自阈值进行检查。

     

    当入端口报文占用缓存资源达到PG_SHARED_LIMIT时,触发PAUSE帧或者PFC流控帧,通知入端口方向停止发送报文;当占用缓存资源达到PG_RESET_VALUE和PG_RESET_FLOOR的较大值时,通知发送方继续发送报文。

    缓存可以按照PG(Priority Group)Ingress PortPool三个层级设置阈值。并分为三类:

    1) Guaranteed

    2) Shared

    3) Headroom

    PG和报文优先级的映射是通过PORT_PRI_GRP0/1寄存器配置。

    Egress Admission Control

    目的:

    Egress Queue拥塞的时候,公平地分配缓存资源。

    Egress admission check涉及以下四种资源:

    1) Egress buffer

    2) EMA pool

    3) Egress queue entries

    4) Replication engine work queue entries

    按照queue/queue set/buffer pool三个层级设置阈值,并分为两类:

    1) Guaranteed

    2) Shared

    Traffic Management

    两种常用的流量监管的方式是——PAUSE流控和Egress Port限速。

  • 相关阅读:
    从零开始山寨Caffe·拾:IO系统(三)
    从零开始山寨Caffe·玖:BlobFlow
    从零开始山寨Caffe·捌:IO系统(二)
    从零开始山寨Caffe·柒:KV数据库
    从零开始山寨Caffe·陆:IO系统(一)
    从零开始山寨Caffe·伍:Protocol Buffer简易指南
    js实现hash
    编程词汇
    开发技术文档汇总
    前端开发者进阶之函数反柯里化unCurrying
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/14301494.html
Copyright © 2011-2022 走看看