Broadcom datasheet DLB

本文深入探讨了设备支持的DLB模式,特别是在trunk组中如何实现更均衡的负载分配。DLB模式通过考虑端口负载和队列大小,以及三种不同模式——资格模式、喷射模式和固定分配模式,来优化流分配。此外,文章还详细介绍了流集数据结构、流分类、流集组织和负载维护等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了在LAG部分描述了trunk怎样解析的之外,设备支持DlB模式。
NOTE :DLB模式仅支持HiGig端口

DLB的目的是在trunk组的成员间提供一个更加均衡的负载分配。在基于hash的静态机理下,输出通过计算hash键和在hash键上执行逻辑操作来决定。因此,流分配受hash键的随机性的影响并且不考虑HiGig trunk成员的状态。在DLB模式下,选择链路集中的哪个路径发送不再仅仅是选定值的hash。在DLB模式下,发送路径由下列模式决定:

1. 通过端口负载和端口队列大小的不活动来设置流的资格模式。
2. 分组喷射模式,其中流集接收每个分组到达的新成员分配。
3. 固定分配模式,由每个流维护的指定端口保持固定。

每个到来的包被识别属于一个特别的流。如果流被决定是新的,基于它的状态被分配给一个聚合成员。在负载均衡的上下文,通过测量与聚合成员相关的负载和队列的大小来决定成员的状态。这样做时,当新流被分配到聚合成员时由于低劣的成员分配或者负载的改变而导致的负载的不均衡可以被察觉并且纠正。为了纠正聚合成员间的不均衡,DLB机制基于他们的质量评估对每个聚合成员进行分类。当执行新流的分配时,这个方法仅允许选择拥有最高质量的成员。

Flow identification

流定义为具有一定特征的微流的集合,例如具有相同流哈希值的MAC_SA、MAC_DA、DIP、SIP等。然后流被映射进流集表。如果到来的流被第一次观察到或者已经有好长时间不活动了那么这个流将被认为是新的。每个聚合组由应该理想的接收相等流量的聚合成员组成。一般而言,进入交换芯片的流量由拥有有限大小和持续时间的微流组成。如果流量在聚合成员间均衡的分配那么命中到聚合组的微流被认为是负载均衡的。流分配在宏流的级别上被管理,宏流是简单的微流的聚合,用一个流集数据结构体来进行状态维护。

流集数据结构体给一个指定的端口绑定一个微流的集合。这个指定的端口决定和给定的流集相关的哪个系统端口的所有微流必须分离。

通过DLB_HGT_GROUP_CONTROL寄存器的PORT_ASSIGNMENT_MODE属性来指定DLB的操作模式。DLB机理可以被配置成流喷射操作模式,流集对于每个到来的数据包接收新成员的分配。

DLB也可以操作到固定分配模式,显示再平衡是否使能或者关闭。当再平衡关闭时,由每个流集维护的指定端口保持不变。到来的流继续被映射到流集。然而,决定流集是否可以被再分配到一个新成员的评估没有执行。实际上,每个流集被静态的分配到一个成员,提供一个网络管理员分割问题源的能力。

除了指定端口和喷射流之外,每个流集也维护一个OBSERVATION_TIMESTAMP,用来标识最后一个包到达流集的时间。观察时间戳用来测量一个流集已经空闲的时间。如果空闲周期(Current_Time - Observation_Timestamp)比一个配置的时间周期大(INACTIVITY_DURATION),这个流集被认为有资格接收一个新的指定端口。

Flow Set Organization

流集绑定,例如成员分配和观察时间戳被维护进流集表中。此表使用Flow Set ID进行索引,对于IPv4或IPv6流量,Flow Set ID只是聚合组目的地和hash包字段的组合。流集表用流集块来组织,其中流集块是提供给单个聚合组的一组连续的流集。对于每个聚合组,存在一个关联指针,它为流集表中的流集块的第一个条目提供内存偏移。提供给给定聚合组的流集的数量或其流集块大小是可配置的,但必须始终是2的幂。

DLB Flow Classification

当数据包到来时,它们基于RTAG-7机制被hash,更多细节请看13部分。

Flow Set Table

流集表由32k个条目组成。每个条目由端口成员分配和时间戳组成,时间戳对应于流集的最后接收分组。32k个条目在8个支持的DLB组之间共享。每个DLB组可以灵活的配置流集数,流集数是2的幂(例如512或1024).DLB_HGT_GROUP_CONTROL定义流集表的组织。准确的说,它定义了到每个聚合组的流集的分配。它通过在表中维护一个偏移量来实现这一点,并且每个成员在每个聚合组的基础上提供条目的数量。

每个聚合组必须有一个最佳的候选者,如所确定的,使用用于分配给流集的质量度量,当配置为在适配模式或包喷雾模式下操作时。每个表的条目仅在相应的DLB_HGT_GROUP_CONTROL.ENABLE_OPTIMAL_CANDIDATE_UPDATE L被使能时才会被更新。DLB_HGT_GROUP_STATS表有56个bits并且通过DLB_ID来索引。当一个流被索引进这个表时,它的输出端口基于资格来决定。资格通过不活动持续时间,操作模式和link状态来决定。它不是通过端口负载和端口队列大小来决定的。
1. 基于不活动的资格模式–如果不活动持续时间已经过去,选择最优成员,否则选择当前指定的成员。
2. 固定模式–不管不活动持续时间是否过去总是选择当前指定的成员。
3. 喷射模式–不管不活动持续时间是否过去总是选择最优成员。

如果选择固定模式,则端口成员基于用户在流集表中分配的端口字段中的可编程性。
如果对喷射模式进行选择,那么设备将基于质量度量计算自动更新端口成员。

DLB 选择

BCM56840设备支持多达32个Higig trunk组。然而,只有32个HG trunk组中的8个可以被编程支持动态负载均衡。通过HGT_DLB_CONTROL表控制选择32个trunk组中的哪8个被用于DLB。DLB_HGT_GROUP_CONTROL表有8个条目。每个条目代表一个DLB组ID,并且控制它的流集的大小。另外,它设置一个流被考虑用于新成员的分配的不活动长度周期。例如,当使能不活动资格模式,并且如果一个不活动周期被设置为(Current_Time-Observation_Timestamp), 并且到来的数据包的INACTIVITY_DURATION比(Current_Time-Observation_Timestamp)大,然后这个包被分配给这个组的最优候选者。否则,这个包被转发给指定的成员。INACTIVITY_DURATION基于当前时间减去最后观察时间戳计算得到。例如,处于不活动资格模式的一个组可能有4个成员分别为A,B,C,D。在时刻T,一个流被转发给成员A。在时刻T+1这个相同的流可能也许不可能被转发给成员A。因为现在这个决定是基于不活动时间的。
DLB_HGT_GROUP_MEMBERSHIP表有8个条目,分别对应于DLB组ID。这个表被用来指定哪些端口是一个组ID的成员。例如,组ID1可能有端口1,3,5,7,9,12,组ID2可能有端口2,4,6,8.BCM56840支持每个DLB组有最多32个成员。
Note:因为这个表里的每个条目是一个70bits宽的位图,每个位代表一个端口成员。因此,用户编程端口在组间重叠是有可能的。用户需要注意由于每个组可能有不同的profile设置的情况而导致的非预期的行为,例如不活动持续时间周期。

DLB Load Maintenance

对于一个给定的聚合组,DLB机制主要的目标是在聚合组成员间均衡的分配流量。为了完成这个目标,转发到一个聚合组成员间的字节数被周期性的测量。这个测量被称作端口负载,提供成员失衡的一个瞬时快照。为了支持端口负载的一个长期视图,被抽样的端口负载测量用指数加权移动平均计算被平均。除了端口负载平均,入队到每个聚合成员的单元数,不管cos,也被周期性的测量。这个测量被称作端口队列大小,当聚合成员工作在限速时提供一个成员不均衡的瞬时快照或者当他们工作在限速以下时提供测量。这个测量通过EWMA计算再次被平均。

Quantization Process

用通过DLB_HGT_GLB_QUANTIZE_THRESHOLDS寄存器定义的可编程阀值,平均端口队列大小和平均端口负载度量被转化输出为两个3bit的量化值。从平均端口队列大小和平均端口加载到相应的QUANTIZED_PORT_QSIZE和QUANTIZED_PORT_LOADING的转换为每个度量使用七个阈值。与给定量度相关的七个阈值提供了八个不同的量化量程范围。给定测度所驻留的值的范围决定它可以接收的八个可能的量化值中的哪一个。
Note 每个设备只提供一组阈值(所有聚合组的一组阈值)。
例如: 假设平均端口队列大小具有3092个单元的值,并且端口队列大小量化阈值在表111中定义。
在这个例子中,平均端口队列大小将被量化以产生5 QUANTIZED_PORT_QSIZE value值。

Establishing Member Quality

当识别聚合成员的质量时,使用端口队列大小和端口负载度量。这是通过将量化的平均端口加载和量化的平均端口队列大小连接起来以产生单个质量指数来实现的。该质量索引用作非线性质量映射函数的输入。质量映射函数将组合度量、量化平均端口加载和量化平均端口队列大小转换为单个成员质量度量。所得到的成员质量既考虑了负载,又考虑了与聚合成员相关的积压程度。实际上,质量映射函数是由512个总条目组成的映射表,其中每个聚合组最多可以分配64个条目。这个表被称为DLB_HGT_PORT_QUALITY_MAPPING表,将质量索引值映射到单个成员质量度量。每个表项可以由用户编程,从而允许每个聚合组具有唯一的映射函数。为每个聚合组提供一个PORT_QUALITY_MAPPING_PROFILE_PTR,它为用于特定端口的64个连续映射表条目集定义基本地址。质量索引与PORT_QUALITY_MAPPING_PROFILE_PTR结合在一起,提供DLB_HGT_PORT_QUALITY_MAPPING表中的确切地址,以生成给定端口的成员质量度量。

DLB Statistics Update

该DLB_HGT_GROUP_STATS表维护每一组的流量重新分配数量的计数。

DLB(Dynamic Load Balancer)是一种动态负载均衡技术,通常用于高性能计算环境下的资源分配优化。虽然当前提供的引用并未直接提及 DLB 的具体配置或使用方法[^1],但可以根据相关领域知识以及常见实践来提供详细的指导。 ### 什么是 DLBDLB 是一种软件工具或硬件模块,旨在通过实时监控工作负载并重新分布任务到可用节点上,从而提高集群性能和效率。它广泛应用于 HPC(高性能计算)、云计算和其他分布式系统环境中。 --- ### DLB 实例的典型使用场景 在实际应用中,DLB 可能被集成到 MPI(Message Passing Interface)或其他通信库中,以便自动调整进程间的负载平衡。以下是其主要功能: - **动态重映射**:当检测到某些处理器过载时,可以将部分任务迁移到较为空闲的处理器。 - **透明性支持**:对于应用程序开发者而言,无需修改现有代码即可享受负载均衡带来的好处。 - **高效扩展性**:适用于从小型多核服务器到大规模超级计算机的各种架构。 尽管上述特性未明确标注出处,它们代表了该领域的通用认知[^3]。 --- ### 配置与部署指南 #### 安装准备阶段 假设目标平台已经安装好必要的依赖项(如 GCC 编译器、Make 工具链),接下来按照如下方式操作: 1. 下载官方发布的源码包或者克隆 Git 存储库; 2. 解压文件夹后进入项目根目录执行构建命令序列: ```bash ./configure --prefix=/path/to/install make && sudo make install ``` 如果遇到权限不足错误,则考虑切换至管理员账户重复最后一步;另外,“--prefix”参数指定最终安放位置,默认情况下会放置于 `/usr/local` 路径下[^4]。 #### 初始化服务端口监听机制 完成基础设置之后,需进一步定义哪些网络接口可供外部访问连接请求。编辑配置文档(通常是 JSON/YAML 格式),添加类似下面的内容片段作为示范: ```json { "listen": { "address": "0.0.0.0", "port": 8765, "protocol": "tcp" } } ``` 此处 `"address"` 字段设为通配符形式意味着允许来自任意 IP 地址的数据流入;而 `"port"` 数值可根据实际情况灵活更改[^2]。 #### 启动守护线程运行模式 为了确保即使母体程序崩溃也能迅速恢复服务能力,在后台持续运作成为必要选项之一。借助 nohup 命令实现这一目的非常简便快捷: ```bash nohup dlb_server -c /etc/dlb/config.json > logs/output.log 2>&1 & ``` 其中 `-c` 参数指向先前定制好的设定档路径名,同时标准输出流/错误消息均会被记录下来便于后续排查问题之用。 --- ### 注意事项 - 性能调优过程中可能涉及多个可调节因子,建议参照产品手册逐步试验最佳组合方案。 - 如果计划跨不同操作系统移植解决方案,请务必验证兼容性和稳定性状况。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值