PTX 系列数据包传输路由器上的虚拟输出队列
本节介绍 PTX 系列数据包传输路由器上的虚拟输出队列 (VOQ) 体系结构,包括以下主题:
PTX 系列数据包传输路由器上的虚拟输出队列简介
本主题介绍 PTX 系列数据包传输路由器上的虚拟输出队列 (VOQ) 体系结构,以及该体系结构如何与 PTX 系列路由器上的可配置服务等级 (CoS) 组件配合使用。
Junos OS 和 PTX 系列硬件 CoS 功能使用入口上的虚拟输出队列来缓冲和排队每个出口输出队列的流量。PTX 系列路由器支持每个输出端口(物理接口)多达八个出口输出队列。
通过路由器转发流量的传统方法是在入口接口上的输入队列中缓冲入口流量,将流量通过交换矩阵转发到出口接口上的输出队列,然后在输出队列上再次缓冲流量,然后再将流量传输到下一跃点。在入口端口上对数据包进行排队的传统方法是将发往不同出口端口的流量存储在同一输入队列(缓冲区)中。
在拥塞期间,路由器可能会在出口端口丢弃数据包,因此路由器可能会花费资源将流量通过交换机结构传输到出口端口,结果却丢弃该流量,而不是转发该流量。由于输入队列存储发往不同出口端口的流量,因此一个出口端口上的拥塞可能会影响另一个出口端口上的流量,这种情况称为线头阻塞 (HOLB)。
虚拟输出队列 (VOQ) 架构采用不同的方法:
PTX 系列路由器不是为输入和输出队列使用单独的物理缓冲区,而是使用每个数据包转发引擎入口管道上的物理缓冲区来存储每个出口端口的流量。出口端口上的每个输出队列在路由器上所有数据包转发引擎的每个入口管道上都有缓冲区存储空间。入口管道存储空间到输出队列的映射是 1 对 1,因此每个输出队列在每个入口管道上接收缓冲区空间。
每个输出队列都有一个专用 VOQ,由每个数据包转发引擎上专用于该输出队列的输入缓冲区组成(一对一映射),而不是一个包含发往多个不同输出队列的流量的输入队列(一对多映射)。此体系结构可防止任何两个端口之间的通信影响另一个端口。
在出口端口有资源转发流量之前,VOQ 不会将流量从入口端口通过交换矩阵传输到出口端口,而不是将流量存储在物理输出队列中,直到可以转发。VOQ 是输入队列(缓冲区)的集合,用于接收和存储发往一个出口端口上一个输出队列的流量。每个出口端口上的每个输出队列都有自己的专用 VOQ,该 VOQ 由向该输出队列发送流量的所有输入队列组成。
VOQ 是输入队列(缓冲区)的集合,用于接收和存储发往一个出口端口上一个输出队列的流量。每个出口端口上的每个输出队列都有自己的专用 VOQ,该 VOQ 由向该输出队列发送流量的所有输入队列组成。
VOQ 架构
VOQ 表示特定输出队列的入口缓冲。PTX 系列路由器中的每个数据包转发引擎都使用特定的输出队列。存储在数据包转发引擎上的流量包括发往一个端口上某个特定输出队列的流量,并且是该输出队列的 VOQ。
VOQ 分布在路由器中的所有数据包转发引擎上,这些引擎正在主动将流量发送到该输出队列。每个输出队列是跨路由器中的所有数据包转发引擎分配给该输出队列的总缓冲区的总和。因此,输出队列本身是虚拟的,而不是物理的,尽管输出队列由物理输入队列组成。
往返时间缓冲
虽然在拥塞期间没有输出队列缓冲(无长期存储),但出口线卡上有一个较小的物理输出队列缓冲区,用于适应流量从入口到出口遍历交换矩阵的往返时间。往返时间包括入口端口请求出口端口资源、从出口端口接收资源授权以及跨交换矩阵传输数据所花费的时间。
这意味着,如果在路由器入口处未丢弃数据包,并且路由器将数据包通过交换矩阵转发到出口端口,则数据包将不会丢弃,而是会转发到下一跃点。所有丢包都发生在入口管道中。
VOQ 优势
VOQ 架构具有两大优势:
消除排头阻塞
VOQ 架构消除了线头阻塞 (HOLB) 问题。在非 VOQ 交换机上,当出口端口的拥塞影响未拥塞的其他出口端口时,就会发生 HOLB。当拥塞端口和非拥塞端口在入口接口上共享相同的输入队列时,会发生 HOLB。
VOQ 架构通过为每个接口上的每个输出队列创建不同的专用虚拟队列来避免 HOLB。
由于不同的出口队列不共享相同的输入队列,因此一个端口上拥塞的出口队列不会影响另一个端口上的出口队列。出于同样的原因,一个端口上拥塞的出口队列不会影响同一端口上的另一个出口队列 — 每个输出队列都有自己的专用虚拟输出队列,由入口接口输入队列组成。
在入口接口执行队列缓冲可确保路由器仅在出口队列已准备好接收该流量时才通过交换矩阵将流量发送到该出口队列。如果出口队列尚未准备好接收流量,流量将保留在入口接口的缓冲状态。
提高交换矩阵效率和利用率
传统的输出队列架构存在一些 VOQ 架构解决的固有效率低下问题。
数据包缓冲 — 传统的队列架构在长期 DRAM 存储中缓冲每个数据包两次,一次在入口接口,一次在出口接口。VOQ 架构在长期 DRAM 存储中的入口接口仅缓冲每个数据包一次。交换矩阵的速度足够快,可以对出口 CoS 策略透明,因此路由器可以以不需要深度出口缓冲区的速率转发流量,而不会影响配置的出口 CoS 策略(调度),而不是在出口接口再次缓冲数据包。
资源消耗 — 传统排队架构将数据包从入口接口输入队列(缓冲区)穿过交换矩阵发送到出口接口输出队列(缓冲区)。在出口接口,即使路由器已花费资源通过交换矩阵传输数据包并将其存储在出口队列中,数据包也可能会被丢弃。在出口接口准备好传输流量之前,VOQ 架构不会通过交换矩阵将数据包发送到出口接口。这提高了系统利用率,因为传输和存储稍后丢弃的数据包不会浪费任何资源。
VOQ 是否会改变我配置 CoS 的方式?
配置 CoS 功能的方式没有变化。 图 1 显示了 Junoś OS 和 PTX 系列硬件 CoS 组件和 VOQ 选择,说明了它们相互作用的顺序。
VOQ 选择过程由使用行为聚合 (BA) 分类器或多域分类器的 ASIC 执行,具体取决于您的配置,以便为出口端口选择八个可能的虚拟输出队列之一。虚拟输出根据您的 CoS 配置对出口端口的入口缓冲区数据进行排队。
虽然 CoS 功能不会改变,但与 VOQ 存在一些操作差异:
随机早期检测 (RED) 发生在入口数据包转发引擎上。对于仅支持出口输出队列的路由器,出口处会出现 RED 和相关拥塞丢弃的情况。在入口处执行 RED 可节省宝贵的资源并提高路由器性能。
尽管 RED 出现在带有 VOQ 的入口处,但配置丢弃配置文件的方式没有变化。
结构调度通过请求和授权控制消息进行控制。数据包在入口虚拟输出队列中缓冲,直到出口数据包转发引擎向入口数据包转发引擎发送授权消息,指示它已准备好接收它们。有关交换矩阵调度的详细信息,请参阅 PTX 系列路由器上的交换矩阵调度和虚拟输出队列。
了解 VOQ 在 PTX 系列路由器上的工作原理
本主题介绍 VOQ 进程在 PTX 系列路由器上的工作原理。
了解 VOQ 过程的组成部分
图 2 显示了 VOQ 过程中涉及的 PTX 系列路由器的硬件组件。
这些组件执行以下功能:
Physical Interface Card (PIC)— 提供与各种网络介质类型的物理连接,从网络接收传入数据包并将传出数据包传输到网络。
Flexible PIC Concentrator (FPC)— 将其中安装的 PIC 连接到其他数据包传输路由器组件。每个机箱最多可以有八个 FPC。
Packet Forwarding Engine—提供第 2 层和第 3 层数据包交换和解封装、转发和路由查找功能,并管理数据包缓冲和通知排队。数据包转发引擎从安装在 FPC 上的 PIC 接收传入数据包,并通过交换机平面将其转发到相应的目标端口。
Output queues—(未显示)PTX 系列路由器支持每个输出端口(物理接口)多达八个输出队列。这些输出队列由 CoS 调度程序配置控制,该配置确定如何处理输出队列中的流量以传输到交换机结构上。此外,这些出口输出队列控制何时将数据包从入口上的虚拟输出队列发送到出口输出队列。
了解 VOQ 过程
PTX 系列路由器支持每个输出端口(物理接口)多达八个输出队列。这些输出队列由 CoS 调度程序配置控制,该配置确定如何处理输出队列中的流量以传输到交换矩阵。此外,这些出口输出队列控制何时将数据包从入口上的虚拟输出队列发送到出口输出队列。
对于每个出口输出队列,VOQ 架构在每个入口数据包转发引擎上提供 虚拟 队列。这些队列称为虚拟队列,因为仅当线卡实际将数据包排队时, 队列才 实际存在于入口数据包转发引擎上。
图 3 显示了三个入口数据包转发引擎 — PFE0、PFE1 和 PFE2。每个入口数据包转发引擎为单个出口端口 0 提供最多八个虚拟输出队列(PFE.e0.q0n 到 PFE.e0.q7n)。出口数据包转发引擎 PFEn 以循环方式将带宽分配给每个入口 VOQ。
例如,出口 PFE N 的 VOQ e0.q0 有 10 Gbps 的带宽可供其使用。PFE 0 提供的负载为 10 Gbps 至 e0.qo,PFE1 和 PFE2 的负载为 1Gbps 至 e0.q0。结果是 PFE1 和 PFE2 将获得 100% 的流量通过,而 PFE0 只能获得 80% 的流量通过。
图 4 说明了出口输出队列与入口虚拟输出队列之间的关联示例。在出口端,PFE-X 有一个 100 Gbps 端口,该端口配置了四种不同的转发等级。因此,PFE-X 上的 100 Gbps 出口输出端口使用八个可用出口输出队列中的四个(如 PFE-X 上用橙色虚线突出显示的四个队列表示),VOQ 架构在每个入口数据包转发引擎上提供四个相应的虚拟输出队列(由 PFE-A 和 PFE-B 上的四个虚拟队列用橙色虚线突出显示)。PFE-A 和 PFE-B 上的虚拟队列仅在有要发送的流量时存在。
PTX 系列路由器上的交换矩阵调度和虚拟输出队列
本主题介绍使用 VOQ 的 PTX 系列路由器上的结构调度过程。
VOQ 使用请求和授权消息来控制 PTX 系列路由器上的交换矩阵调度。出口数据包转发引擎通过使用请求和授权消息控制来自入口虚拟输出队列的数据传输。虚拟队列在入口处缓冲数据包,直到出口数据包转发引擎通过向入口数据包转发引擎发送授权消息来确认已准备好接收这些数据包。
图 5 说明了具有 VOQ 的 PTX 系列路由器使用的结构调度过程。当数据包到达入口端口时,入口管道会将数据包存储在与目标输出队列关联的入口队列中。路由器在执行数据包查找后做出缓冲决策。如果数据包属于已超过最大流量阈值的转发类,则数据包可能不会缓冲,并且可能会被丢弃。调度过程的工作方式如下:
入口数据包转发引擎接收数据包并将其缓冲在虚拟队列中,然后将该数据包与发往相同出口接口和数据输出队列的其他数据包分组。
入口线卡数据包转发引擎通过结构向出口数据包转发引擎发送请求,其中包含对数据包组的引用。
当有可用的出口带宽时,出口线卡授予计划程序通过向入口线卡数据包转发引擎发送带宽授予来做出响应。.
当入口线卡数据包转发引擎收到来自出口线卡数据包转发引擎的授权时,入口数据包转发引擎会对数据包组进行分段,并通过交换矩阵将所有分段发送到出口数据包转发引擎。
出口数据包转发引擎接收片段,将它们重新组装到数据包组中,并将各个数据包排队到与虚拟输出队列对应的数据输出队列。
入口数据包将保留在入口端口输入队列的 VOQ 中,直到输出队列准备好接受和转发更多流量。
在大多数情况下,交换矩阵的速度足够快,可以对出口服务等级 (CoS) 策略透明,因此将流量从入口管道通过交换矩阵转发到出口端口的过程不会影响为流量配置的 CoS 策略。仅当出现交换矩阵故障或端口公平性问题时,交换矩阵才会影响 CoS 策略。
当数据包进入和出口同一数据包转发引擎(本地交换)时,数据包不会遍历结构。但是,路由器使用与通过交换矩阵的数据包相同的请求和授权机制来接收出口带宽,因此,当流量争夺相同的输出队列时,本地路由的数据包和穿过交换矩阵后到达数据包转发引擎的数据包将得到公平对待。
了解数据包转发引擎公平性和虚拟输出队列过程
本主题介绍在 PTX 系列路由器上与 VOQ 一起使用的数据包转发引擎公平方案。
数据包转发引擎公平性意味着从出口角度对所有数据包转发引擎一视同仁。如果多个出口数据包转发引擎需要从同一虚拟输出队列传输数据,则会以轮询方式对其进行服务。虚拟输出队列的服务 不 依赖于每个源数据包转发引擎上的负载。
图 6 说明了在具有三个数据包转发引擎的简单示例中与 VOQ 一起使用的数据包转发引擎公平性方案。入口 PFE-A 有一个 10 Gbps 数据流,发往 PFE-C 上的 VOQx 。PFE-B 有一个 100 Gbps 数据流,也发往 PFE-C 上的 VOQx 。在 PFE-C 上,VOQx 由一个 100 Gbps 接口提供服务,该接口是该接口上唯一的活动虚拟输出队列。
在图 6 中,我们总共有 110 Gbps 的源数据,发往 100 Gbps 输出接口。因此,我们需要丢弃 10 Gbps 的数据。丢弃发生在何处,此丢弃如何影响来自 PFE-A 与 PFE-B 的流量?
由于 PFE-A 和 PFE-B 通过出口 PFE-C 以轮询方式提供服务,因此来自 PFE-A 的所有 10 Gbps 流量都将通过出口输出端口。但是,PFE-B 上会丢弃 10 Gbps 的数据,因此只能将来自 PFE-B 的 90 Gbps 数据发送到 PFE-C。因此,10 Gbps 流的下降率为 0%,而 100 Gbps 流的下降仅为 10%。
但是,如果 PFE-A 和 PFE-B 各自获取 100 Gbps 的数据,则它们各自将丢弃 50 Gbps 的数据。这是因为出口 PFE-C 实际上使用轮询算法控制入口虚拟队列上的服务和排出速率。使用轮询算法,当存在多个源时,较高带宽的源始终会受到惩罚。该算法尝试使两个源的带宽相等;但是,由于它无法提高较慢源的带宽,因此会降低较高源的带宽。轮循机制算法继续此序列,直到源具有相等的出口带宽。
每个入口数据包转发引擎为单个出口端口提供多达 8 个虚拟输出队列。出口数据包转发引擎将带宽分配给每个入口虚拟输出队列;因此,无论他们提出的负载如何,他们都将得到平等的待遇。队列的排出速率是队列排出的速率。出口数据包转发引擎在入口数据包转发引擎之间平均分配每个输出队列的带宽。因此,每个入口数据包转发引擎的消耗率 = 输出队列的消耗速率/入口数据包转发引擎的数量。
处理拥塞
可能发生两种主要类型的拥塞:
-
入口拥塞 — 当入口数据包转发引擎提供的负载超过出口可以处理的负载时发生。入口拥塞的情况与传统路由器非常相似,因为队列会累积,一旦超过配置的阈值,数据包就会被丢弃。
-
出口拥塞 — 当所有入口数据包转发引擎的总和超过出口路由器的能力时发生。所有丢弃都在入口数据包转发引擎上执行。但是,入口队列的大小会因队列的消耗率(出口数据包转发引擎请求数据包的速度)而衰减。此速率主要由出口数据包转发引擎将请求转换为授权的速率决定。出口数据包转发引擎以循环方式为请求到授权的转换提供服务;它不依赖于入口数据包转发引擎提供的负载。例如,如果入口数据包转发引擎的消耗率是其预期值的一半(就像 2 个入口数据包转发引擎为目标输出队列提供超额订阅负载时的情况一样),则入口数据包转发引擎会将此队列的大小减小到其原始大小的一半(当它获得完全排出速率时)。
VOQ 队列深度监控(Junos OS 演化版)
VOQ 队列深度监控或延迟监控用于测量 VOQ 的峰值队列占用情况。此功能支持为每个单独的数据包转发引擎 (PFE) 报告给定物理接口的峰值队列长度。
除了峰值队列长度数据外,每个队列还维护入口数据路径上的丢弃统计信息和平均时间队列长度。此外,每个队列都维护出口数据路径上的队列传输统计信息。
在使用严格优先级调度的典型部署方案中, HIGH
优先级队列可能会使 LOW
优先级队列不足。因此,此类 LOW
优先级队列中的数据包可以保持比预期更长的时间。您可以使用此 VOQ 队列深度监控功能以及队列传输统计信息来检测此类停止情况。
要在接口上启用 VOQ 队列深度监控,请先创建监控配置文件,然后将该配置文件附加到接口。如果将监控配置文件附加到聚合以太网 (ae-) 接口,则每个成员接口都有自己的专用硬件 VOQ 监控器。
您只能在传输 WAN 接口上启用 VOQ 队列深度监控。您可以在每台设备多达 420 个物理接口上启用 VOQ 队列深度监控。
每个监控配置文件都包含一个或多个导出过滤器。导出过滤器为物理接口上的一个或多个队列定义峰值队列长度百分比阈值。一旦导出过滤器中的任何队列达到定义的峰值队列长度百分比阈值,Junos 就会导出导出过滤器中所有队列的 VOQ 遥测数据。
队列深度监视数据 仅 通过遥测通道输出。除了配置监视配置文件(如下所示)之外, 还必须 启动常规传感器订阅才能传出数据。没有 CLI 显示选项。
配置 VOQ 队列深度监控
配置 VOQ 队列深度监控以导出队列利用率数据。您可以使用此数据来监控微突发,并帮助识别停滞的传输输出队列。要配置 VOQ 队列深度监控:
- 配置监控配置文件。
- 将监控配置文件附加到接口。
要配置监控配置文件,请执行以下操作:
- 为监控配置文件命名。例如:
[edit class-of-service] set monitoring-profile mp1
- 为蒙托林配置文件命名导出过滤器。例如:
[edit class-of-service monitoring-profile mp1] set export-filters ef1
- 定义哪些队列(0 到 7)属于导出筛选器。例如:
[edit class-of-service monitoring-profile mp1 export-filters ef1] set queue [0 1]
- (可选)定义阈值峰值队列长度百分比以导出 VOQ 遥测数据。默认百分比为 0。例如:
[edit class-of-service monitoring-profile mp1 export-filters ef1] set peak-queue-length percent 50
- (可选)为监控配置文件定义一个或多个其他导出过滤器。例如:
[edit class-of-service monitoring-profile mp1] set export-filters ef2 queue [2 3]
- 提交更改。
要将监控配置文件附加到接口:
- 将监控配置文件附加到接口。例如:
[edit class-of-service] set interfaces et-0/0/1 monitoring-profile mp1
- 提交更改。
检查您的配置。例如:
[edit class-of-service] user@host# show monitoring-profile mp1 { export-filters ef1 { peak-queue-length { percent 50; } queue [ 0 1 ]; } export-filters ef2 { queue [ 2 3 ]; } } interfaces { et-0/0/1 { monitoring-profile mp1; } }
运行以下 show 命令以验证您的配置:
user@host> show class-of-service interface et-0/0/1 Physical interface: et-0/0/1, Index: 1098 Maximum usable queues: 8, Queues in use: 4 Exclude aggregate overhead bytes: disabled Logical interface aggregate statistics: disabled Scheduler map: default, Index: 0 Congestion-notification: Disabled Monitoring Profile Name: mp1 Logical interface: et-0/0/1.16386, Index: 1057 user@host> show class-of-service monitoring-profile Monitoring profile: mp1 Export filter Queue Number Peak Queue Length ef1 0 50% ef1 1 50% ef2 2 0% ef2 3 0%
从此示例中可以看到,不为导出筛选器设置 a peak-queue-length percent
会将百分比默认为 0%,如导出筛选器 ef2
所示。此示例显示了物理接口上具有不同峰值队列长度阈值的不同队列,用于导出 VOQ 遥测数据。