SRIO(Serial RapidIO) 接收端流控(Receiver-Controlled Flow Control)介绍

   流量控制

      LP-Serial协议定义了两种流量控制方法或模式,即接收机控制的流量控制和发射机控制的流量控制。这两种方法各有其独特的应用和重要性。

   首先,接收机控制的流量控制是确保数据接收端能够有序、有效地处理传入数据的关键机制。在这种模式下,接收机会根据自身的处理能力和缓冲区状态,向发送机发送适当的控制信号,从而调节数据的发送速率。这对于避免数据丢失、确保数据完整性以及维护稳定的通信连接至关重要。

     RapidIO LP-Serial端口必须支持接收机控制的流量控制,这是因为它提供了必要的保障机制,确保数据在传输过程中能够被正确接收和处理。这种流量控制模式对于大多数应用场景都是必要的,特别是在数据传输速率较高或数据量较大的情况下。另一方面,发射机控制的流量控制是一种可选的支持特性。在这种模式下,发送机会根据一定的算法或策略,自主调整其发送速率,以适应接收机的处理能力。这种流量控制模式可以提供更灵活的数据传输方式,但并非所有LP-Serial端口都需要支持它。是否选择支持发射机控制的流量控制,通常取决于具体的应用需求和系统设计.

   接收端流控

      接收机控制的流量控制是流量控制中最简单且基础的方法。在这种方法中,端口的输入侧通过逐个数据包地接受或拒绝数据包来控制来自其链路伙伴的数据包流量。接收端口不会向其链路伙伴提供关于可用于数据包接收的缓冲区空间量的任何信息。

      因此,链路伙伴在传输数据包时,没有先验预期某个特定数据包是否会被接受或拒绝。端口通过在其发送的每个包含该字段的控制符号中将buf_status字段设置为全1,来向其链路伙伴发出信号,表明它正在以接收机控制的流量控制模式运行。这种方法之所以被称为接收机控制的流量控制,是因为接收端负责决定如何为数据包接收分配接收器中的缓冲区。

      以接收机控制的流量控制模式运行的端口,基于接收端口是否有足够的缓冲区空间可用于虚拟通道(VC)和数据包的优先级级别,来决定接受或拒绝每个入站无误的数据包。如果有足够的缓冲区空间可用,端口将接受数据包,并向其链路伙伴发送一个包含已接受数据包ackID的packet-accepted控制符号。端口还可以选择使用单个packet-accepted控制符号来确认多个数据包。发送packet-accepted控制符号通知端口的链路伙伴,数据包(或数据包)已被接收且未检测到错误,并已被端口接受。在接收到packet-accepted控制符号后,链路伙伴将丢弃其已接受的数据包(或数据包)的副本,从而释放伙伴中的缓冲区空间。

单VC重试协议

     在单VC(VC0)操作模式下,接收器可能会使用重试协议来处理接收器缓冲区溢出的情况。为了与现有的RapidIO接口保持向后兼容性,实施者必须在通道设计中包含这一功能。

    当端口拒绝一个数据包时,它会立即进入输入重试停止状态,并按照第6.9.1.4节“输入重试停止恢复过程”中指定的输入重试停止恢复过程进行操作。作为输入重试停止恢复过程的一部分,端口会向其链路伙伴发送一个数据包重试控制符号,指示控制符号的packet_ackID字段中的ackID对应的数据包以及端口随后传输的所有数据包都已被链路伙伴丢弃,并必须全部重传。

      当启用使用单个控制符号确认多个数据包的功能时,数据包重试控制符号应确认所有直到(但不包括)重试控制符号中的ackID的数据包。控制符号还指示链路伙伴暂时无法为优先级小于或等于重试数据包优先级的数据包提供缓冲区.

    设备可以选择支持配置值,其中发送和/或接收的重试控制符号可以确认多个数据包。配置应由端口n延迟优化控制/状态寄存器(CSR)控制。当发送控制符号时,使用控制符号24或控制符号48的设备应支持默认配置,其中重试控制符号不确认数据包。使用控制符号24或控制符号48的设备可以选择支持一种配置,其中重试控制符号确认所有数据包,直到但不包括重试控制符号中的ackID_status。使用控制符号64的设备应支持默认配置,其中发送的重试控制符号确认所有数据包,直到但不包括重试控制符号中的ackID_status。使用控制符号24或控制符号48的设备可以选择支持接收重试控制符号,该符号确认所有未决数据包,直到但不包括ackID_status。使用控制符号64的设备应支持接收重试控制符号,该符号确认所有未决数据包,直到但不包括ackID_status。应该能够配置使用控制符号64的设备,以便仅在所有数据包均被确认至重试数据包时,才发送重试控制符号.
      一个端口在接收到数据包重试控制符号后,会立即进入输出重试停止状态,并按照第6.9.1.5节“输出重试停止恢复过程”中指定的输出重试停止恢复过程进行操作。作为输出重试停止恢复过程的一部分,接收到数据包重试控制符号的端口会发送一个从重试恢复控制符号,这会导致其链路伙伴退出输入重试停止状态并恢复数据包接收。在从重试恢复控制符号之后传输的第一个数据包被分配的ackID,就是之前被重试的数据包的ackID。
        这个例子展示了单VC接收器控制流量控制操作的情况。在这个例子中,发送器发送数据包的速度比接收器能够处理的速度要快。一旦发送器收到一个数据包的重试请求,它可以选择取消当前正在传输的任何数据包,因为这些数据包最终会被丢弃。这样做可以释放带宽,以便为任何可能待传输的更高优先级数据包提供空间.

    输入重试-已停止的恢复过程

       

     在单虚拟通道(VC0 唯一激活)模式下,当一个端口的输入侧重试一个数据包时,它会立即进入“输入重试停止”状态。为了从这个状态恢复,端口的输入侧会执行以下操作:

  1. 丢弃被拒绝或取消的数据包且不报告数据包错误:在端口处于“输入重试停止”状态时,它会忽略所有后续接收到的数据包。这意味着系统不会因为这些数据包而生成错误报告,而是专注于处理重试过程。

  2. 指示输出侧发送包含重试数据包ackID值的包重试控制符号:这个控制符号的packet_ackID字段包含了需要重试的数据包的ackID值。当这个控制符号被发送到链路的另一端(即链路伙伴)时,它会触发链路伙伴的输出侧进入“输出重试停止”状态,并发送一个重启-从重试控制符号。这个控制符号的交换是两端同步重试过程的关键。

  3. 接收重启-从重试控制符号并恢复数据包接收:一旦端口接收到来自链路伙伴的重启-从重试控制符号,它就会退出“输入重试停止”状态,并恢复正常的数据包接收过程。这标志着重试过程的结束,系统现在可以继续处理新的或待处理的数据包

 输出重试-已停止的恢复过程

要从输出重试停止状态恢复,端口的输出端将执行以下操作:

  1. 立即停止传输新数据包:这意味着在当前问题得到解决之前,不会发送任何新的数据包。这是为了防止在重试或恢复过程中,新的数据包可能会干扰或混淆现有的数据传输状态。

  2. 重置所有已发送但未确认的数据包的链路包确认定时器:这一步是为了防止由于数据包在传输过程中丢失或延迟而导致的超时错误。通过重置这些定时器,系统可以等待更长的时间来接收确认,而不是在数据包可能还在传输途中时就宣布它们为丢失。

  3. 发送重启-从重试控制符号:这个控制符号是一个特殊的信号,用于通知接收方(或中间设备)当前传输过程正在重新启动,并且将从某个特定的数据包开始重试。这有助于同步双方的传输状态。

  4. 回退到第一个未接受的数据包:这意味着系统将回滚到第一个需要重试的数据包(即之前发送但未被接收方正确确认的数据包)。这个数据包的ackID值由之前接收到的包重试控制符号中的packet_ackID值指定。这一步是准备重新发送这个数据包或其后续的数据包。

  5. 退出输出重试停止状态并恢复传输:完成上述步骤后,系统将从重启-从重试控制符号中指定的ackID值开始,恢复数据传输。这意味着它可能会首先重试之前未成功传输的数据包,或者如果有更高优先级的数据包等待发送,并且这些数据包可以安全地跳过之前的重试数据包(因为它们可能已经被更新或不再需要),则系统会发送这些更高优先级的数据包。

     整个过程是一个复杂的错误恢复和数据传输同步机制,旨在确保数据传输的可靠性和效率,同时最小化由于传输错误或网络问题导致的数据丢失.

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值