发送间隔调整方法、 装置和网络设备 技术领域 本发明实施例涉及数据传输技术领域, 尤其涉及一种发送间隔调整方法、 装置和 网络设备。
背景技术 快速外设部件互连 (Peripheral Component Interconnect Express ; 以下简称 : PCIE) 总线, 沿用了现有的外设部件互连 (Peripheral Component Interconnect Express ; 以下简称 : PCI) 编程概念及通讯标准, 但传输速度更快, PCIE 的一个串行高速收发器的单 向物理带宽即可达到 2.5 吉比特每秒 (Gigabit per second ; 以下简称 : Gbps)。而 PCIE 链 路分为发送 (TX) 与接收 (RX) 两个方向, 因此仅一个串行高速收发器的双向合计物理带宽 就可以达到 5Gbps。
在用户接口层面, 使用事务层规定的处理层数据包 (Transaction Layer Packet ; 以下简称 : TLP) 帧来传输数据。用户的不同传输请求需要根据协议规定类型填写 TLP 帧头 中的相应字段。 TLP 帧可以分为转发事务 (Post) 帧与非转发事务 (Non-Post) 帧两大类, 其 中写数据请求属于 Post 帧, 而读数据请求则属于 Non-Post 帧。
直接内存访问 (Direct Memory Access ; 以下简称 : DMA) 是一种不经过中央处理 单元 (Central Processing Unit ; 以下简称 : CPU) 而直接从内存存取数据的数据交换模 式。在 DMA 传输模式下, CPU 只须向现场可编程门阵列 (Field Programmable Gate Array ; 以下简称 : FPGA) 端的 DMA 控制器下达指令, 让 DMA 控制器来处理数据的传送, 数据传送完 毕再把信息反馈给 CPU, 这样就很大程度上减轻了 CPU 的资源占有率, 可以大大节省系统资 源, 提高数据传输速率。
FPGA 端的 DMA 控制器通过缓存描述符 (Buffer Descriptor ; 以下简称 : BD) 与 CPU 进行数据传输, CPU 在自身的内存中设置相应的收发 BD 后, 启动 FPGA 的 DMA 控制器, FPGA 根据 CPU 设定的 BD 在 CPU 内存中的位置读取 BD, 如果是下行 BD, 则根据下行 BD 中的数据 存储地址和存储长度从 CPU 内存中搬运数据, 如果是上行 BD, 则将 FPGA 从下游芯片接口中 收到的数据填写到上行 BD 所设定的 CPU 内存中, 并将写入的数据总长度更新到上行 BD 中。 当 FPGA 收发完成一个完整数据包后, 将相应的上下行 BD 回写到 CPU 的内存中, 以通知 CPU 一个数据包已经收发完成。
其中下行链路定义为 CPU 向 FPGA 发送数据, 上行链路定义为 FPGA 向 CPU 发送数 据。
一个系统的上下行速率即数据包的收发速率与多种因素相关, 例如 CPU 对数据的 处理能力, FPGA 内部 DMA 的处理能力, FPGA 和 CPU 间的接口种类, 以及所选用的桥接芯片性 能等。当 CPU 和 FPGA 内部 DMA 的处理能力都足够强大时, 接口的性能就成了系统性能的瓶 颈。
DMA 传输数据包时, 每一个数据包均配置一个 8 字节长度的 BD, 而且每个 BD 的读 取和回写也需要占用 PCIE 接口的带宽, FPGA 的 DMA 发起的读 BD 请求与读数据请求均需要
通过 PCIE 接口的 TX 链路, 而系统的下行带宽完全取决于通过 PCIE TX 链路发起的读数据 请求数量, PCIETX 链路上发出的读请求的数据量越多, 则下行带宽越大。
并且 PCIE 协议规定 Post 帧的可以穿越 Non-post 帧, 也就是说即使当读数据请求 优先于写数据请求提交给 PCIE 内核 (PCIE core) 之后, PCIE 接口上后到的写数据请求也 是优先于先前的读数据请求发送到 CPU 端。
因此系统的瓶颈在于如何有效利用 PCIE 接口的 TX 链路带宽, 如何在 TX 链路上合 理分配上行写数据传输带宽和下行读数据的带宽。
现有的保证系统上下行速率相对均衡的方案一般有 2 种, 即提高 PCIE 接口物理带 宽的方案与控制上行链路速率的方案。
1、 提高 PCIE 接口物理带宽的方案。
本方案通过提高 CPU 与 FPGA 之间 PCIE 接口的物理带宽, 例如选择满足 PCIE2.0 标准的 CPU 或者使 PCIE 链路由 ×4 改为 ×8, 使得物理带宽提升一倍, 从而使得系统瓶颈不 再存在于 PCIE 接口上, 同时保证上下行链路均达到最大性能。
但是该方案存在以下缺点 : 系统成本显著上升, 增加硬件设计复杂度, 需要使用更 高性能的 CPU 与更大容量更多高速接口的 FPGA 来满足高速 PCIE 接口的物理指标。并且不 能最大限度的利用高速 PCIE 接口的全部带宽。
2、 控制上行链路速率的方案。
本方案通过限制上行链路的速率, 例如固定设置上行链路发包的最小间隔, 以限 制上行链路的最大带宽来提高下行链路的带宽, 保证 Non-Post 帧不被 Post 帧穿越, 来达到 上下行链路带宽的均衡性。
但是该方案存在以下缺点 : 将系统的瓶颈转移到 FPGA, 通过限制 FPGA 的处理能 力, 来保证速率均衡, 但是通常实际应用场合中, CPU 的处理能力要弱于 FPGA, 在 CPU 来不及 设置下行 BD 的情况下, 而 FPGA 的上行速率又无法提升, 或者包长递增的情况下, 无法平衡 上下行速率, 将有相当一部分的 PCIE 带宽被浪费。 发明内容
本发明实施例提供一种发送间隔调整方法、 装置和网络设备, 以实现上下行带宽 自适应均衡, 提高 PCIE 接口的带宽利用率。
本发明实施例提供一种发送间隔调整方法, 包括 :
统计第 i 个统计周期内从快速外设部件互连 PCIE 接口接收到的第一数据量和所 述第 i 个统计周期内发送到所述 PCIE 接口的第二数据量 ;
根据所述第一数据量与所述第 i 个统计周期的长度计算所述第 i 个统计周期的下 行带宽, 并根据所述第二数据量与所述第 i 个统计周期的长度计算所述第 i 个统计周期的 上行带宽 ;
根据所述第 i 个统计周期的上行带宽与所述第 i 个统计周期的下行带宽的比例关 系, 调整第 i+1 个统计周期内转发事务帧的发送间隔。
本发明实施例还提供一种发送间隔调整装置, 包括 :
统计模块, 用于统计第 i 个统计周期内从快速外设部件互连 PCIE 接口接收到的第 一数据量和所述第 i 个统计周期内发送到所述 PCIE 接口的第二数据量 ;计算模块, 用于根据所述第一数据量与所述第 i 个统计周期的长度计算所述第 i 个统计周期的下行带宽, 并根据所述第二数据量与所述第 i 个统计周期的长度计算所述第 i 个统计周期的上行带宽 ;
调整模块, 用于根据所述第 i 个统计周期的上行带宽与所述第 i 个统计周期的下 行带宽的比例关系, 调整第 i+1 个统计周期内转发事务帧的发送间隔。
本发明实施例还提供一种网络设备, 包括如上所述的发送间隔调整装置。
本发明实施例, 首先统计第 i 个统计周期内从 PCIE 接口接收到的第一数据量和第 i 个统计周期内发送到上述 PCIE 接口的第二数据量, 然后根据上述第一数据量与第 i 个统 计周期的长度计算第 i 个统计周期的下行带宽, 并根据第二数据量与第 i 个统计周期的长 度计算第 i 个统计周期的上行带宽 ; 最后根据所述第 i 个统计周期的上行带宽与第 i 个统 计周期的下行带宽的比例关系, 调整第 i+1 个统计周期内转发事务帧的发送间隔 ; 从而可 以实现调整第 i+1 个统计周期的上行带宽, 进而可以实现调整第 i+2 个统计周期的下行带 宽, 使得 PCIE 链路的上下行带宽达到动态平衡, 并可以提高 PCIE 链路的带宽利用率。 附图说明 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍, 显而易见地, 下面描述中的附图是本发 明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下, 还可以 根据这些附图获得其他的附图。
图 1 为本发明发送间隔调整方法一个实施例的流程图 ;
图 2 为本发明统计周期生成时序一个实施例的示意图 ;
图 3 为本发明上下行带宽变化情况一个实施例的示意图 ;
图 4 为本发明发送间隔调整装置一个实施例的结构示意图 ;
图 5 为本发明发送间隔调整装置另一个实施例的结构示意图 ;
图 6 为本发明发送间隔调整装置再一个实施例的结构示意图 ;
图 7 为本发明 Post 帧发送间隔计算单元一个实施例的示意图 ;
图 8 为本发明仲裁状态机一个实施例的示意图。
具体实施方式
为使本发明实施例的目的、 技术方案和优点更加清楚, 下面将结合本发明实施例 中的附图, 对本发明实施例中的技术方案进行清楚、 完整地描述, 显然, 所描述的实施例是 本发明一部分实施例, 而不是全部的实施例。 基于本发明中的实施例, 本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例, 都属于本发明保护的范围。
图 1 为本发明发送间隔调整方法一个实施例的流程图, 如图 1 所示, 该发送间隔调 整方法可以包括 :
步骤 101, 统计第 i 个统计周期内从 PCIE 接口接收到的第一数据量和第 i 个统计 周期内发送到上述 PCIE 接口的第二数据量。
本实施例中, i 为整数, 且 i ≥ 0。
步骤 102, 根据上述第一数据量与第 i 个统计周期的长度计算第 i 个统计周期的下行带宽, 并根据上述第二数据量与第 i 个统计周期的长度计算第 i 个统计周期的上行带宽。
具体地, 可以计算第一数据量与第 i 个统计周期的长度的比值, 以上述第一数据 量与第 i 个统计周期的长度的比值作为第 i 个统计周期的下行带宽 ; 计算第二数据量与第 i 个统计周期的长度的比值, 以上述第二数据量与第 i 个统计周期的长度的比值作为第 i 个 统计周期的上行带宽。
步骤 103, 根据第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比例关 系, 调整第 i+1 个统计周期内 Post 帧的发送间隔。
具体地, 可以确定第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比 值; 当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的第一比值小于第一预定 数值时, 增大第 i+1 个统计周期内 Post 帧的发送间隔 ; 当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的第二比值小于第二预定数值时, 缩小第 i+1 个统计周期内 Post 帧的发送间隔。
更具体地, 可以将 0 与第一预定数值限定的区间划分为 N 个子区间, N 为正整数, N≥2; 当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的第一比值落入上述 N 个子区间中的任一子区间时, 采用第一比值所在子区间对应的步长, 增大第 i+1 个统计周 期内 Post 帧的发送间隔。 可以将 0 与第二预定数值限定的区间划分为 M 个子区间, M 为正整数, M≥2; 当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的第二比值落入上述 M 个子区间中 的任一子区间时, 采用第二比值所在子区间对应的步长, 缩小第 i+1 个统计周期内 Post 帧 的发送间隔。
本实施例中, 第一预定数值大于 0, 且小于或等于 1 ; 第二预定数值大于 0, 且小于 或等于 1。当然, 本实施例并不仅限于此, 第一预定数值和第二预定数值的取值范围也可 以为其他范围, 本实施例对此不作限定 ; 例如 : 当上述第一比值或第二比值为大于 1 的数值 时, 也可以根据系统性能要求或实际需要对第 i+1 个统计周期内 Post 帧的发送间隔进行调 整。
另外, 当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的大小相同时, 可以不对第 i+1 个统计周期内 Post 帧的发送间隔进行调整。
上述实施例可以实现调整第 i+1 个统计周期的上行带宽, 进而可以实现调整第 i+2 个统计周期的下行带宽, 使得 PCIE 链路的上下行带宽达到动态平衡, 并可以提高 PCIE 链路的带宽利用率。
本发明图 1 所示实施例中, 上述统计周期的生成时序可以如图 2 所示, 图 2 为本发 明统计周期生成时序一个实施例的示意图, 图 2 中的 5 微秒的统计周期是个初始值, 可以根 据不同应用场景的实际情况由 CPU 进行设定。当本发明实施例提供的方法应用于不同系统 中时, 随着不同系统的物理带宽的变化, 统计周期也需要相应调整, 以使得在一个相对较长 的统计周期内, 带宽的波动更加平滑。本发明实施例以链路的最大带宽为 7Gbps 为例来计 算, 当同时发起的最大读数据量为 4KB 时, 可以计算得到统计周期为 5 微秒。
总的来说, 影响 PCIE 接口下行带宽的因素主要有以下两点 :
(1)DMA 发起的读请求的数据量越大, 对端设备通过 PCIE 接口发给 FPGA 的数据量 就越多, 因此在 PCIE 接口上收到的数据量就越大。
(2)PCIE 接口的上行带宽太大将会降低下行带宽。根据 PCIE 接口特性, 写请求能 够穿越读请求, 当写请求的数据量太大时, PCIE 接口将会阻塞读请求, 优先保证写请求, 从 而导致上下行带宽不均衡。
因此根据上下行链路的带宽状态, 限制上行带宽是保证上下行带宽均衡的重要手 段。本发明实施例根据第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值, 调整第 i+1 个统计周期内 Post 帧的发送间隔, 从而可以达到调整第 i+1 个统计周期的上行 带宽, 进而影响第 i+2 个统计周期的下行带宽, 使得 PCIE 链路的上下行带宽动态平衡的目 的。
下面以第一预定数值为 75% ; 第二预定数值为 75% ; M 和 N 均为 3, 各子区间对应 的步长分别为 4、 2 和 1 为例进行说明。
本发明实施例的一种具体实现方式中, 当第 i 个统计周期的下行带宽与第 i 个统 计周期的上行带宽的比值大于 0, 且小于或等于 25%时, 以步长为 4, 增大第 i+1 个统计周期 内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值大于 25%, 且 小于或等于 50%时, 以步长为 2, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ; 当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值大于 50%, 小 于或等于 75%时, 以步长为 1, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔。
总的来说, 当第 i 个统计周期的下行带宽小于第 i 个统计周期的上行带宽时, 要增 大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔, 以缩小上行带宽, 使得下行链路的 Non-Post 能够尽快提交给 CPU, 从而增加下行链路带宽。
当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 0, 且小于 或等于 25%时, 以步长为 4, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 25%, 且 小于或等于 50%时, 以步长为 2, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 50%, 且 小于或等于 75%时, 以步长为 1, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
总的来说, 当第 i 个统计周期的上行带宽小于第 i 个统计周期的下行带宽时, 要缩 小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔, 以增大上行带宽, 这样下行链路的 Non-Post 帧将被 Post 帧穿越, 从而缩小下行链路带宽。
举例来说, 假设第 i 个统计周期内上行链路的 Post 帧的发送间隔为 6, 接口带宽为 200MHz, 位宽为 64 位。因此第 i 个统计周期 (5 微秒= 5000 纳秒, 即 1000 个时钟周期 ) 内 可以传输的 64 字节长度的数据包的个数为 :
有效数据传输周期 : 64 字节 ×8/64 = 8 个时钟周期, 第 i 个统计周期内上行链路 的 Post 帧的发送间隔为 6 个时钟周期, 因此发送一个 64 字节的数据包需要 14 个时钟周期。
这样, 5 微秒内可以传输的数据包的个数= 1000/14 = 71, 因此 5 微秒内传输的数 据量为 71×64 字节= 4544 字节。
假设第 i 个统计周期的下行带宽小于或等于第 i 个统计周期的上行带宽的 25%, 即第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值小于或等于 25%, 则以 步长为 4, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔, 这样, 第 i+1 个统计周
期内, 传输一个 64 字节长的数据包需要 8+6+4 = 18 个时钟周期, 因此 5 微秒内可以传输的 数据包的个数为 1000/18 = 55, 也就是 3520 字节的数据量。
因此增大上行链路的 Post 帧的发送间隔可以明显降低上行链路的带宽, 同理可 知缩小上行链路的 Post 帧的发送间隔可以增大上行链路的带宽。
而调节当前统计周期的上行带宽将影响 PCIE 接口上提交给下行链路的读请求的 数据量, 而当前统计周期内发出的读请求, 只能影响下一个统计周期的下行带宽, 也就是通 过调整第 i+1 个统计周期的上行带宽来影响第 i+2 个统计周期的下行带宽, 以此类推。
通俗的说, 本发明实施例就是根据上下行链路对 PCIE 接口带宽的互相争用来达 到动态平衡, 如图 3 所示, 图 3 为本发明上下行带宽变化情况一个实施例的示意图, 图 3 中, 实线表示上行带宽变化情况, 虚线表示下行带宽变化情况, 由图 3 可以看出, 当上行带宽增 加时, 下行带宽将会逐渐减少 ; 当上行带宽减少时, 下行带宽将会逐渐增加。
以 64 字节 (Byte) 的短包为例, DMA 以 200M 输出的原始位宽为 64 位的数据, DMA 的最小帧间间隔为 6 个时钟周期, 即 DMA 的上行带宽为 200M×64bit×8/14 = 7.3Gbps, 如 果第 i 个统计周期的下行带宽为 2.0Gbps, 则第 i 个统计周期下行带宽与上行带宽的比值约 为 27.40%, 该比值大于 25%, 且小于 50%, 因此需要以步长为 2, 增大第 i+1 个统计周期内 上行链路的 Post 帧的发送间隔, 这样第 i+1 个统计周期的上行带宽变为 200M×64bit×8/ (14+2) = 6.4Gbps, 在第 i+1 个统计周期继续进行统计, 发现下行链路带宽提升到 2.5Gbps, 这样, 第 i+1 个统计周期下行带宽与上行带宽的比值约为 39%, 该比值仍旧大于 25%, 且小 于 50%, 因此需要以步长为 2, 增大第 i+2 个统计周期内上行链路的 Post 帧的发送间隔, 这 样第 i+2 个统计周期的上行带宽变为 200M×64bit×8/(14+2+2) = 5.6Gbps, 此时下行链路 带宽逐渐上升到 3.0Gbps。重复以上步骤, 逐渐达到上下行带宽的动态平衡。
本发明实施例中, 当第 i 个统计周期的上行带宽等于第 i 个统计周期的下行带 宽时, 表示上行带宽与下行带宽暂时达到平衡, 不需调整第 i+1 个统计周期内上行链路的 Post 帧的发送间隔。
另外, 本发明实施例中, 当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带 宽的比值在其他数值范围 ( 例如 : 大于 75%且小于 1) 时, 第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽相差比较小, 上行带宽也不需要大幅调整, 即不需要大幅调整第 i+1 个统计周期内上行链路的 Post 帧的发送间隔。
当然本发明实施例并不仅限于此, 本发明实施例对将 0 与第一预设数值限定的区 间划分为 N 个子区间, 以及将 0 与第二预定数值限定的区间划分为 M 个子区间的方式, 以及 各子区间对应步长的大小不作限定。 下面以第一预定数值为 1, 第二预定数值为 1, M和N均 为 3, 步长分别为 3、 2 和 1 为例进一步说明。
本发明实施例的另一具体实现方式中, 可以当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值大于 0, 且小于或等于 1/3 时, 以步长为 3, 增大第 i+1 个统计 周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值大于 1/3, 且小 于或等于 2/3 时, 以步长为 2, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值大于 2/3, 且小 于或等于 1 时, 以步长为 1, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔。当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 0, 且小于 或等于 1/3 时, 以步长为 3, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 1/3, 且小 于或等于 2/3 时, 以步长为 2, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值大于 2/3, 且小 于或等于 1 时, 以步长为 1, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔。
当然, 本发明实施例中, 上下行带宽的平衡是一种动态的过程, 受到 CPU 处理能力 与 PCIE 接口特性的影响, 上下行带宽不会在达到平衡后稳定不变, 会出现时而上行带宽较 大, 时而下行链路带宽较大, 但是在一个比较长的统计时间 ( 例如 : 1 秒或者 10 秒 ) 内, 上 下行带宽是趋于平衡的。
而且本发明实施例在 CPU 的处理能力不足, 引起 DMA 的 BD 库中任何一个方向可用 BD 不够时, 都可以保证 PCIE 链路上另外一个方向的带宽不受影响, 使得 PCIE 链路的使用率 达到最大。
本发明实施例提供的上述方法可以实现在可编程逻辑器件, 例如 FPGA 或复杂可 编程逻辑器件 (Complex Programmable Logic Device ; 以下简称 : CPLD) 芯片内部, 占用逻 辑资源少, 在不占用 CPU 资源的情况下, 可以比较稳定的控制 PCIE 接口上的上下行带宽, 进 而可以实现平衡上下行链路的速率, 并且保证 PCIE 链路的带宽使用率达到最大。本发明实 施例对其他可能造成链路带宽不平衡的接口标准也是适用的, 当同一总线下连接两个不同 的设备, 本发明实施例提供的方法对其性能的平衡也是适用的。 本领域普通技术人员可以理解 : 实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成, 前述的程序可以存储于一计算机可读取存储介质中, 该程序 在执行时, 执行包括上述方法实施例的步骤 ; 而前述的存储介质包括 : ROM、 RAM、 磁碟或者 光盘等各种可以存储程序代码的介质。
图 4 为本发明发送间隔调整装置一个实施例的结构示意图, 本实施例中的发送间 隔调整装置可以作为网络设备, 或网络设备的一部分实现本发明图 1 所示实施例的流程。 如图 4 所示, 该发送间隔调整装置可以包括 : 统计模块 41、 计算模块 42 和调整模块 43。
其中, 统计模块 41, 用于统计第 i 个统计周期内从 PCIE 接口接收到的第一数据量 和第 i 个统计周期内发送到 PCIE 接口的第二数据量 ;
计算模块 42, 用于根据第一数据量与第 i 个统计周期的长度计算第 i 个统计周期 的下行带宽, 并根据第二数据量与第 i 个统计周期的长度计算第 i 个统计周期的上行带宽 ; 具体地, 计算模块 42 可以计算第一数据量与第 i 个统计周期的长度的第一比值, 以上述第 一比值作为第 i 个统计周期的下行带宽 ; 以及计算第二数据量与第 i 个统计周期的长度的 第二比值, 以上述第二比值作为第 i 个统计周期的上行带宽。
调整模块 43, 用于根据第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽 的比例关系, 调整第 i+1 个统计周期内 Post 帧的发送间隔。
本实施例中, 上述发送间隔调整装置可以通过可编程逻辑器件, 例如 : FPGA 或 CPLD 实现 ; 本实施例中的网络设备可以为交换机或路由器等设备, 本实施例对网络设备的 具体形式不作限定。
上述发送间隔调整装置可以实现调整第 i+1 个统计周期的上行带宽, 进而可以实
现调整第 i+2 个统计周期的下行带宽, 使得 PCIE 链路的上下行带宽达到动态平衡, 并可以 提高 PCIE 链路的带宽利用率。
图 5 为本发明发送间隔调整装置另一个实施例的结构示意图, 与图 4 所示的发送 间隔调整装置相比, 不同之处在于, 本实施例中, 调整模块 43 可以包括 : 确定子模块 431、 增 大子模块 432 和缩小子模块 433 ;
其中, 确定子模块 431, 用于确定第 i 个统计周期的上行带宽与第 i 个统计周期的 下行带宽的比值, 以及确定第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比 值;
增大子模块 432, 用于当第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽 的比值小于第一预定数值时, 增大第 i+1 个统计周期内 Post 帧的发送间隔 ;
缩小子模块 433, 用于当第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽 的比值小于第二预定数值时, 缩小第 i+1 个统计周期内 Post 帧的发送间隔。
进一步地, 调整模块 43 还可以包括 : 第一划分子模块 434 ;
第一划分子模块 434, 用于将 0 与第一预定数值限定的区间划分为 N 个子区间, N 为正整数, N≥2; 则, 增大子模块 432, 具体用于当第 i 个统计周期的下行带宽与第 i 个统 计周期的上行带宽的第一比值落入上述 N 个子区间中的任一子区间时, 采用第一比值所在 子区间对应的步长, 增大第 i+1 个统计周期内 Post 帧的发送间隔。 进一步地, 调整模块 43 还可以包括 : 第二划分子模块 435 ;
第二划分子模块 435, 用于将 0 与第二预定数值限定的区间划分为 M 个子区间, M 为正整数, M≥2; 则, 缩小子模块 433, 具体用于当第 i 个统计周期的上行带宽与第 i 个统 计周期的下行带宽的第二比值落入上述 M 个子区间中的任一子区间时, 采用第二比值所在 子区间对应的步长, 缩小第 i+1 个统计周期内 Post 帧的发送间隔。
上述发送间隔调整装置在不占用 CPU 资源的情况下, 可以比较稳定的控制 PCIE 接 口上的上下行带宽, 进而可以实现平衡上下行链路的速率, 并且保证 PCIE 链路的带宽使用 率达到最大。
图 6 为本发明发送间隔调整装置再一个实施例的结构示意图, 如图 6 所示, 该发送 间隔调整装置可以包括 : 统计定时单元 61、 上行带宽计算单元 62、 下行带宽计算单元 63、 请 求仲裁单元 64、 DMA 65、 TLP 帧组装发送单元 66、 TLP 帧接收分类单元 67、 数据缓存 68、 Post 帧发送间隔计算单元 69 和 PCIE 内核 (PCIE Core)610。
其中, 统计定时单元 61, 用于在 DMA 65 启动后, 利用计数器产生 5 微秒间隔的脉 冲, 提供给上行带宽计算单元 62 和下行带宽计算单元 63 作为统计周期。
上行带宽计算单元 62, 用于在第 i 个统计周期内, 对请求仲裁单元 64 发送到 PCIE 接口的第二数据量进行统计, 并计算第二数据量与第 i 个统计周期的长度的第二比值, 以 第二比值作为第 i 个统计周期的上行带宽。每个统计周期结束后, 上行带宽计算单元 62 统 计的数值清 0。
下行带宽计算单元 63, 用于在第 i 个统计周期内, 对从 PCIE 接口接收到的第一数 据量, 并计算第一数据量与统计周期的长度的第一比值, 以上述第一比值作为第 i 个统计 周期的下行带宽。每个统计周期结束后, 下行带宽计算单元 63 统计的数值清 0。
本实施例中的上行带宽计算单元 62 和下行带宽计算单元 63 可以实现本发明图 4
和图 5 所示实施例中统计模块 41 和计算模块 42 的功能。
请求仲裁单元 64, 用于根据上行带宽计算单元 62 计算的第 i 个统计周期的上行带 宽与下行带宽计算单元 63 计算的第 i 个统计周期的下行带宽的比例关系, 以及 Post 帧发 送间隔计算单元 69 计算的第 i+1 个统计周期内 Post 帧的发送间隔, 均衡 PCIE 接口上下行 链路的带宽。
DMA 65, 用于根据 CPU 的相关设定发起各种数据传输的相关请求, 例如读 BD 请求、 读数据请求、 更新 BD 请求和 / 或写数据请求。其中读数据请求与读 BD 请求属于 Non-Post 请求 ; 更新 BD 请求与写数据请求属于 Post 请求。并且在下游接多个端口的时候, 根据下游 的数据缓存水线进行多通道仲裁, 根据下游端口的数据传输情况将上游总线上获取的带宽 动态分配给下游接口。
TLP 帧组装发送单元 66, 用于根据请求仲裁单元 64 发起的请求种类, 按 PCIE 协议 规定的格式组装 TLP 帧, 而后发送给 PCIE 内核 610。
TLP 帧接收分类单元 67, 用于将从 PCIE 内核 610 取得的 TLP 帧按照不同种类分开, 提供给 DMA 65。
数据缓存 68, 用于存储 DMA 65 与下游通信接口收到的数据, 实现数据的存储转 发。 Post 帧发送间隔计算单元 69, 用于根据上行带宽计算单元 62 计算的第 i 个统计 周期的上行带宽与下行带宽计算单元 63 计算的第 i 个统计周期的下行带宽, 计算第 i+1 个 统计周期内 Post 帧的发送间隔, 然后将该发送间隔发送给请求仲裁单元 64。本实施例中, 请求仲裁单元 64 和 Post 帧发送间隔计算单元 69 可以实现本发明图 4 和图 5 所示实施例 中调整模块 43 的功能。
PCIE 内核 610, 用于接收 TLP 帧组装发送单元 66 发送的 TLP 帧, 以及向 TLP 帧接 收分类单元 67 发送 TLP 帧。
本实施例中的 Post 帧发送间隔计算单元 69 可以通过图 7 所示的电路实现, 图7 为本发明 Post 帧发送间隔计算单元一个实施例的示意图。
如图 7 所示, 当第 i 个统计周期的下行带宽小于或等于第 i 个统计周期的上行带 宽的 25%, 即第 i 个统计周期的下行带宽与第 i 个统计周期的上行带宽的比值小于或等于 25%时, 以步长为 4, 增大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的下行带宽大于第 i 个统计周期的上行带宽的 25%, 且小于或 等于第 i 个统计周期的上行带宽的 50%, 即第 i 个统计周期的下行带宽与第 i 个统计周期 的上行带宽的比值大于 25%, 且小于或等于 50%时, 以步长为 2, 增大第 i+1 个统计周期内 上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的下行带宽大于第 i 个统计周期的上行带宽的 50%, 且小于或 等于第 i 个统计周期的上行带宽的 75%, 即第 i 个统计周期的下行带宽与第 i 个统计周期 的上行带宽的比值大于 50%, 小于或等于 75%时, 以步长为 1, 增大第 i+1 个统计周期内上 行链路的 Post 帧的发送间隔。
总的来说, 当第 i 个统计周期的下行带宽小于第 i 个统计周期的上行带宽时, 要增 大第 i+1 个统计周期内上行链路的 Post 帧的发送间隔, 以缩小上行带宽, 使得下行链路的 Non-Post 能够尽快提交给 CPU, 从而增加下行链路带宽。
当第 i 个统计周期的上行带宽小于或等于第 i 个统计周期的下行带宽的 25%, 即 第 i 个统计周期的上行带宽与第 i 个统计周期的下行带宽的比值小于或等于 25%时, 以步 长为 4, 缩小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽大于第 i 个统计周期的下行带宽的 25%, 且小于或 等于第 i 个统计周期的下行带宽的 50%, 即第 i 个统计周期的上行带宽与第 i 个统计周期 的下行带宽的比值大于 25%, 且小于或等于 50%时, 以步长为 2, 缩小第 i+1 个统计周期内 上行链路的 Post 帧的发送间隔 ;
当第 i 个统计周期的上行带宽大于第 i 个统计周期的下行带宽的 50%, 且小于或 等于第 i 个统计周期的下行带宽的 75%, 即第 i 个统计周期的上行带宽与第 i 个统计周期 的下行带宽的比值大于 50%, 且小于或等于 75%时, 以步长为 1, 缩小第 i+1 个统计周期内 上行链路的 Post 帧的发送间隔 ;
总的来说, 当第 i 个统计周期的上行带宽小于第 i 个统计周期的下行带宽时, 要缩 小第 i+1 个统计周期内上行链路的 Post 帧的发送间隔, 以增大上行带宽, 这样下行链路的 Non-Post 帧将被 Post 帧穿越, 从而缩小下行链路带宽。
本实施例中, 请求仲裁单元 64 的仲裁状态机如图 8 所示, 图 8 为本发明仲裁状态 机一个实施例的示意图。
现将图 8 中各状态和各信号的含义介绍如下。
状态说明 :
IDLE : 空闲状态 ;
NP_REQ : Non-Post 帧请求响应, 即读请求响应状态 ;
DLBD_RD : 响应读下行 BD 请求 ;
ULBD_RD : 响应读上行 BD 请求 ;
DLDAT_RD : 响应读下行数据请求 ;
Post_REQ : Post 帧请求响应, 即写请求响应状态 ;
DLBD_WR : 响应写下行 BD 请求 ;
ULBD_WR : 响应写上行 BD 请求 ;
ULDAT_RD : 响应写上行数据请求。
信号说明 :
s_rdreq : 拉高表示 DMA 65 有发起读请求, 也就是说当 s_dlbd_rdreq 信号、 s_ ulbd_rdreq 或 s_dldat_rdreq 拉高时, s_rdreq 拉高。
s_wrreq : 拉高表示 DMA 65 有发起写请求, 也就是说 s_dlbd_wrreq 信号、 s_ulbd_ wrreq 或 s_ulbd_wrreq 拉高时, s_wrreq 拉高。
s_dlbd_rdreq : 拉高表示 DMA 65 有发起读下行 BD 请求 ;
s_ulbd_rdreq : 拉高表示 DMA 65 有发起读上行 BD 请求 ;
s_dldat_rdreq : 拉高表示 DMA 65 有发起读下行数据请求 ;
s_dlbd_wrreq : 拉高表示 DMA 65 有发起写下行 BD 请求 ;
s_ulbd_wrreq : 拉高表示 DMA 65 有发起写上行 BD 请求 ;
s_ulbd_wrreq : 拉高表示 DMA 65 有发起写上行数据请求 ;
dlbd_rddone : 拉高表示 DMA 65 的读下行 BD 请求成功发送 ;ulbd_rddone : 拉高表示 DMA 65 的读上行 BD 请求成功发送 ;
dldat_rddone : 拉高表示 DMA 65 的读下行数据请求成功发送 ;
dlbd_wrdone : 拉高表示 DMA 65 的写下行 BD 请求成功发送 ;
ulbd_wrdone : 拉高表示 DMA 65 的写上行 BD 请求成功发送 ;
uldat_wrdone : 拉高表示 DMA 65 的写上行数据请求成功发送。
仲裁状态机说明 :
(1) 系统在复位后, 进入 IDLE 状态 ;
(2) 在 IDLE 状态下检测到 s_rdreq 信号为高, 就跳转至 NP_REQ, 响应各种读请求。
(3) 在 IDLE 状态下如果没有检测到 s_rdreq 信号为高, 而是检测到 s_wrreq 信号 为高, 则跳转至 Post_REQ 状态, 响应各种写请求。
(4) 在 NP_REQ 状态下, 如果检测到 s_dlbd_rdreq 信号为高则跳转至 DLBD_RD 状 态, 响应 DMA65 发出的读下行 BD 请求。
(5) 在 NP_REQ 状态下, 如果检测到 s_dlbd_rdreq 信号为低, 而 s_ulbd_rdreq 信号 为高则跳转至 ULBD_RD 状态, 响应 DMA65 发出的读上行 BD 请求。
(6) 在 NP_REQ 状态下, 如果检测到 s_dlbd_rdreq 信号与 s_ulbd_rdreq 信号为低, 且 s_dldat_rdreq 信号为高, 则跳转至 DLDAT_RD 状态, 响应 DMA65 发出的读下行数据的请 求。
(7) 在 DLBD_RD 状态下, 在读下行 BD 的 TLP 帧提交给 PCIE 内核 610 之后, 若检测 到 dlbd_rddone 信号拉高, 则跳转回 IDLE 状态。
(8) 在 ULBD_RD 状态下, 在读上行 BD 的 TLP 帧请求提交给 PCIE 内核 610 之后, 若 检测到 ulbd_rddone 信号拉高, 则跳转回 IDLE 状态。
(9) 在 DLDAT_RD 状态下, 在读下行数据 TLP 帧提交给 PCIE 内核 610 之后, 若检测 到 dldat_rddone 信号拉高, 则跳转回 IDLE 状态。
(10) 在 POST_REQ 状态下, 如果到达 Post 帧发送间隔计算单元 69 计算的发送间 隔, 则开始进行判决, 当检查到 s_dlbd_wrreq 为高时跳转至 DLBD_WR 状态, 响应 DMA 65 发 起的更新下行 BD 请求。
(11) 在 POST_REQ 状态下, 如果到达 Post 帧发送间隔计算单元 69 计算的发送间 隔, 则开始进行判决, 当检查到 s_dlbd_wrreq 为低并且 s_ulbd_wrreq 为高时, 跳转至 ULBD_ WR 状态, 响应 DMA 65 发起的更新下行 BD 请求。
(12) 在 POST_REQ 状态下, 如果到达 Post 帧发送间隔计算单元 69 计算的发送间 隔, 则开始进行判决, 当检查到 s_dlbd_wrreq 信号与 s_ulbd_wrreq 为低, 并且 s_uldat_ wrreq 信号为高时, 跳转至 ULDAT_WR 状态, 响应 DMA65 发起的写上行数据请求。
(13) 在 DLBD_WR 状态下, 当更新下行 BD 的 TLP 帧提交给 PCIE 内核 610 之后, 若检 测到 dlbd_wrdone 拉高, 则跳转回 IDLE 状态。
(14) 在 ULBD_WR 状态下, 当更新上行 BD 的 TLP 帧提交给 PCIE 内核 610 之后, 若检 测到 ulbd_wrdone 拉高, 则跳转回 IDLE 状态。
(15) 在 ULDAT_WR 状态下, 当写上行数据的 TLP 帧提交给 PCIE 内核 610 之后, 若检 测到 uldat_wrdone 拉高, 则跳转回 IDLE 状态。
本实施例所示的发送间隔调整装置可以通过可编程逻辑器件, 例如 : FPGA 或 CPLD等实现, 在不占用 CPU 资源的情况下, 可以比较稳定的控制 PCIE 接口上的上下行带宽, 进而 可以实现平衡上下行链路的速率, 并且保证 PCIE 链路的带宽使用率达到最大。
本发明实施例还提供一种网络设备, 该网络设备可以通过本发明图 4、 图 5 或图 6 所示的发送间隔调整装置实现, 该网络设备可以为交换机或路由器等设备, 本实施例对网 络设备的具体形式不作限定。
本领域技术人员可以理解附图只是一个优选实施例的示意图, 附图中的模块或流 程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分 布于实施例的装置中, 也可以进行相应变化位于不同于本实施例的一个或多个装置中。上 述实施例的模块可以合并为一个模块, 也可以进一步拆分成多个子模块。
最后应说明的是 : 以上实施例仅用以说明本发明的技术方案, 而非对其限制 ; 尽 管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解 : 其依然 可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替 换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的范 围。