Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

PTX 系列数据包传输路由器上的虚拟输出队列

本节介绍 PTX 系列数据包传输路由器上的虚拟输出队列 (VOQ) 架构,并包括以下主题:

PTX 系列数据包传输路由器上的虚拟输出队列简介

本主题介绍 PTX 系列数据包传输路由器上的虚拟输出队列 (VOQ) 架构,及其如何使用 PTX 系列路由器上可配置的服务等级 (CoS) 组件进行操作。

Junos OS 和 PTX 系列硬件 CoS 功能使用入口上的虚拟输出队列,为每个出口输出队列缓冲和队列流量。PTX 系列路由器支持每个输出端口(物理接口)最多 8 个出口输出队列。

通过路由器转发流量的传统方法是在入口接口上的输入队列中缓冲入口流量,通过交换矩阵将流量转发到出口接口上的输出队列,然后在输出队列上再次缓冲流量,然后再将流量传输到下一跃点。入口端口上数据包的传统方法是将发往不同出口端口的流量存储在同一输入队列(缓冲区)中。

在拥塞期间,路由器可能会在出口端口丢弃数据包,因此路由器可能会花费资源将流量通过交换矩阵传输至出口端口,而只是丢弃该流量而不是转发。由于输入队列存储了发往不同出口端口的流量,因此一个出口端口上的拥塞可能会影响不同出口端口上的流量,这种情况称为线头拦截 (HOLB)。

虚拟输出队列 (VOQ) 架构采用不同的方法:

  • PTX 系列路由器使用每个数据包转发引擎入口管道上的物理缓冲区来存储每个出口端口的流量,而不是为输入和输出队列提供单独的物理缓冲区。一个出口端口上的每个输出队列在路由器上所有数据包转发引擎的每个入口管道上都有缓冲区存储空间。入口管道存储空间到输出队列的映射为 1 比 1,因此每个输出队列都会在每个入口管道上接收缓冲区空间。

  • 每个输出队列都有一个专用 VOQ,其中包含用于多个不同输出队列的流量(一对多映射),其中包含专用于该输出队列的每个数据包转发引擎上的输入缓冲区(1 对 映射)。此架构可防止任何两个端口之间的通信影响另一个端口。

  • 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 选项,展示了它们交互的顺序。

图 1:通过 PTX 系列路由器 Packet Flow Through CoS Components on PTX Series Routers上的 CoS 组件的数据包流

VOQ 选择过程由使用行为聚合 (BA) 分类器或多域分类器的 ASIC 执行,根据您的配置,为出口端口选择八个可能的虚拟输出队列之一。根据您的 CoS 配置,在出口端口的入口缓冲区数据上设置虚拟输出队列。

尽管 CoS 功能不会更改,但 VOQ 存在一些运维差异:

  • 随机早期检测 (RED) 发生在入口数据包转发引擎上。当路由器仅支持出口输出队列时,出口会出现 RED 和相关的拥塞情况。对入口执行 RED 可节省宝贵资源,并提高路由器性能。

    尽管 RED 发生在 VOQ 入口上,但配置丢弃配置文件的方式没有变化。

  • 交换矩阵调度通过请求和授予控制消息进行控制。数据包在入口虚拟输出队列中缓冲,直到出口数据包转发引擎向入口数据包转发引擎发送授予消息,表明其已准备好接收。有关交换矩阵调度的详细信息,请参阅 PTX 系列路由器上的交换矩阵调度和虚拟输出队列

了解 VOQ 在 PTX 系列路由器上的工作原理

本主题介绍如何在 PTX 系列路由器上执行 VOQ 流程。

了解 VOQ 流程的组件

图 2 显示了参与 VOQ 流程的 PTX 系列路由器的硬件组件。

图 2:PTX 系列路由器 VOQ Components on PTX Series Routers上的 VOQ 组件

这些组件执行以下功能:

  • Physical Interface Card (PIC)— 提供与各种网络介质类型的物理连接,从网络接收传入数据包并将传出数据包传输到网络。

  • Flexible PIC Concentrator (FPC)- 将安装在其中的 PIC 连接到其他数据包传输路由器组件。每个机箱最多可以有八个 FPC。

  • Packet Forwarding Engine— 提供第 2 层和第 3 层数据包交换、封装解封装、转发和路由查找功能,并管理数据包缓冲和通知队列。数据包转发引擎从 FPC 上安装的 PIC 接收传入数据包,并通过交换机平面将其转发到相应的目标端口。

  • Output queues—(未显示)PTX 系列路由器每个输出端口(物理接口)最多支持 8 个输出队列。这些输出队列由 CoS 调度器配置控制,后者确定如何处理输出队列中的流量,以便传输到交换机交换矩阵。此外,这些出口输出队列还控制数据包何时从入口上的虚拟输出队列发送到出口输出队列。

了解 VOQ 流程

PTX 系列路由器每个输出端口支持多达 8 个输出队列(物理接口)。这些输出队列由 CoS 调度器配置控制,该配置用于确定如何处理输出队列内的流量以传输至交换矩阵。此外,这些出口输出队列还控制数据包何时从入口上的虚拟输出队列发送到出口输出队列。

对于每个出口输出队列,VOQ 架构在每个入口数据包转发引擎上提供 虚拟 队列。这些队列被称为虚拟队列,因为 只有当 线卡实际有数据包排队时,队列才会物理存在于入口数据包转发引擎上。

图 3 显示了三个入口数据包转发引擎—PFE0、PFE1 和 PFE2。每个入口数据包转发引擎为单个出口端口 0 提供多达 8 个虚拟输出队列(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% 的流量通过。

图 3:PTX 系列路由器 Virtual Output Queues on PTX Series Routers上的虚拟输出队列

图 4 展示了出口输出队列与入口虚拟输出队列之间的关联示例。在出口端,PFE-X 有一个 100 Gbps 端口,该端口配置了四个不同的转发等级。因此,PFE-X 上的 100 Gbps 出口输出端口会使用八个可用出口输出队列中的四个(由 PFE-X 上用橙色虚线突出显示的四个队列表示),而 VOQ 架构为每个入口数据包转发引擎提供四个相应的虚拟输出队列(由 PFE-A 和 PFE-B 上的四个虚拟队列表示,并用橙色虚线突出显示)。PFE-A 和 PFE-B 上的虚拟队列仅在有要发送的流量时存在。

图 4:VOQ Example of VOQ 示例

PTX 系列路由器上的交换矩阵调度和虚拟输出队列

本主题介绍使用 VOQ 的 PTX 系列路由器上的交换矩阵调度过程。

VOQ 使用请求和授予消息来控制 PTX 系列路由器上的交换矩阵调度。出口数据包转发引擎通过使用请求和授予消息来控制来自入口虚拟输出队列的数据交付。虚拟队列会缓冲入口上的数据包,直到出口数据包转发引擎通过向入口数据包转发引擎发送授权消息来确认已准备好接收这些数据包。

图 5:交换矩阵调度和虚拟输出队列进程 Fabric Scheduling and Virtual Output Queues Process

图 5 展示了带 VOQ 的 PTX 系列路由器使用的交换矩阵调度过程。当数据包到达入口端口时,入口管道将数据包存储在与目标输出队列关联的入口队列中。路由器在执行数据包查找后,会做出缓冲决策。如果数据包属于已超过最大流量阈值的转发类,则数据包可能不会被缓冲,可能会被丢弃。调度过程的工作方式如下:

  1. 入口数据包转发引擎接收数据包并在虚拟队列中缓冲该数据包,然后将该数据包与发往同一出口接口和数据输出队列的其他数据包进行分组。

  2. 入口线卡数据包转发引擎通过交换矩阵向出口数据包转发引擎发送一个请求,其中包含对数据包组的参考。

  3. 当有可用的出口带宽时,出口线卡授予调度器会向入口线卡数据包转发引擎发送带宽授权,从而做出响应。.

  4. 当入口线卡数据包转发引擎收到来自出口线卡数据包转发引擎的授权时,入口数据包转发引擎对数据包组进行分段,并通过交换矩阵将所有部分发送至出口数据包转发引擎。

  5. 出口数据包转发引擎接收这些分片,将其重组到数据包组中,并将单个数据包排队至与虚拟输出队列对应的数据输出队列。

入口数据包会保留在入口端口输入队列上的 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:使用虚拟输出队列进程的 Packet Forwarding Engine Fairness with Virtual Output Queue Process数据包转发引擎公平性

图 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 Evolved)

VOQ 队列深度监控或延迟监控可以测量 VOQ 的峰值队列占用情况。运行 Junos OS 演化版的 PTX 系列路由器支持 VOQ 队列深度监控,可以报告每个数据包转发引擎 (PFE) 给定物理接口的峰值队列长度。

注意:

除了峰值队列长度数据外,每个队列还维护入口数据路径上的丢弃统计信息和平均队列长度。此外,每个队列都会维护出口数据路径上的队列传输统计信息。

在使用严格优先级计划的典型部署场景中, HIGH 优先级队列可能会使优先级队列匮没 LOW 。因此,此类 LOW 优先级队列中的数据包的保留时间可以超过预期。您可以使用此 VOQ 队列深度监控功能以及队列传输统计信息来检测此类停滞情况。

要对接口启用 VOQ 队列深度监控,请首先创建监控配置文件,然后将该配置文件连接到接口。如果将监控配置文件连接到聚合以太网 (ae-) 接口,则每个成员接口都有自己的专用硬件 VOQ 监视器。

注意:

只能在传输 WAN 接口上启用 VOQ 队列深度监控。您可以在每台设备多达 420 个接口上启用 VOQ 队列深度监控。

每个监控配置文件都包含一个或多个导出过滤器。导出过滤器为物理接口上的一个或多个队列定义峰值队列长度百分比阈值。一旦满足导出过滤器中任何队列的定义的峰值队列长度百分比阈值,Junos 就会导出导出导出过滤器中所有队列的 VOQ 遥测数据,

配置 VOQ 队列深度监控

配置 VOQ 队列深度监控以导出队列利用率数据。您可以使用这些数据来监控微突发,并协助识别停滞的传输输出队列。要配置 VOQ 队列深度监控:

  1. 配置监控配置文件。
  2. 将监控配置文件连接到接口。

要配置监控配置文件:

  1. 命名监控配置文件。例如:
  2. 命名蒙托配置文件的导出过滤器。例如:
  3. 定义哪些队列(0 到 7)属于导出过滤器。例如:
  4. (可选)定义用于导出 VOQ 遥测数据的阈值峰值队列长度百分比。默认百分比为 0。例如:
  5. (可选)为监控配置文件定义一个或多个其他导出过滤器。例如:
  6. 提交更改。

将监控配置文件连接到接口:

  1. 将监控配置文件连接到接口。例如:
  2. 提交更改。

检查您的配置。例如:

运行以下 show 命令以验证您的配置:

注意:

从此示例中可以看到,不为导出过滤器设置 a peak-queue-length percent 默认将百分比设置为 0%,如导出过滤器 ef2 所示。此示例显示了物理接口上用于导出 VOQ 遥测数据的不同队列,这些队列具有不同的峰值队列长度阈值。