DPAA1 Software Architecture 工作原理之浅见

一、介绍

        DPAA1 的主要目的是在片上系统( SOC )的 IO 部分内提供智能处理,以进行路由和管 理与流量相关的处理工作,以简化与多核相关的排序和负载平衡问题处理。 DPAA1硬件检查入口流 量,并从端口流量中提取用户定义的流。然后引导特定流(或相关流量)到一个特定的核或一组核。
        传统的 Linux 在处理数据包时,主要采用在内核态收发包的模式,然后交给内核协议栈处理,效率低,无法满足高速传输的需求。而 DPAA 提供了一套硬件加速平台,主要包括三个模块:BMan、QMan、FMan。能很好的解决包括处理器负载平衡/利用率、流顺序维护和有效的缓存利用率等问题。

二、DPAA1 的目的

1、在 SoC 的 IO 部分内提供智能处理;
2、路由和管理与流量相关的处理工作;
3、简化与多核处理相关的排序和负载平衡问题。

        DPAA1 通过检测进入的流量将这些流量分成帧队列(FQs)来管理这些目标,通常这样做 的目的是将一个或一组流量定义为特定 FQ 中的流量。FQ 通过通道与特定的核相关联。在定义通道时可以使用工作队列(WQ)机制对 FQ 进行优先排序,出口流和进口流相似, CPU 将流量放到特定的 FQ 上,FQ 通过通道与特定的物理端口相关联。

三、FMan 帧管理

        FMan 在流量进入时会检查,将流量分成 FQs 。怎样进行流量分割是可以配置的,FMan 可以配置确定的 PCD (Parse, Classify, Distribute), 这样用户就自己定义流量的配置传输方式。PCD 可以根据传入包的特定内容或包的接收速率来识别流量。

        1、解析函数用于识别数据帧中的哪些字段决定流量分割。所使用的字段可以由行业标准定义,或者用户可以使用可编程的软解析特性来适应专用字段(通常是标头)定义。

        2、分类函数根据解析函数的结果将特定的帧队列或是字段进行分类以保证不会错包乱包。

        3、分配函数会将处理好的 FQs 发送到 FQs 出口的接口。

        FMan还提供一个基于费率的策略器功能,允许用户标记或删除超过流量阈值的特定帧。

四、QMan 队列管理

        队列管理的主要作用就是将 FQs 连接到 SoC 中的生产者和消费者(数据流量)。生产者/消费者要么是 FMan、加速模块或 CPU 核。

        所有的生产者 / 消费者都有一个专用通道,和多个池通道,池通道可以允许多个内核 CPU 服务同一个池通道, FMan 和加速模块则不可以,每个外部 FMan 端口都有专有通道,数量取决于SoC 的数量。

DPAA1 Software Architecture 工作原理之浅见

         队列管理 (QMan) 为网络接口硬件加速模块,为 CPU 内核之间提供数据队列功能,如拥塞管理、优先级的排队机制等。

优先级排队机制

         1、每个生产者 / 消费者都有一个专用通道,和多个池通道,每个通道会提供八个级别的优先级,每个级别都有自己的工作队列(WQ)。其中 WQ0、WQ1 两个是最高级别的,WQ0 的优先级高于任何一个,WQ1 高于其他六个。剩余的六个 WQ 被分成两组,每组 3 个,按照加权轮询的方式来配置。如图所示

DPAA1 Software Architecture 工作原理之浅见

        注意
        1)只有当 FQ1 为空时其他流量才可以进入到生产者 / 消费者中
        2)FQ2 和 FQ3 具有相同的优先级,高于 FQ4 的优先级 

        2、当多个 FQ 分配给同一个 WQ 时,QMan 实现了一个基于信誉的方案来确定调度哪个 FQ ,以及在 QMan 将调度切换到 WQ 上的下一个 FQ 之前它可以退出多少帧。如果高优先级的 WQ 变的活跃,也就是高优先级的 WQ 中的一个 FQ 接收到一个非空的帧,那么低优先级的 FQ 的出队会被挂起,直接到高优先级的帧开始出队。在高优先级的 FQ 服务之后为空时,较低优先级 FQ 重新开始服务时,将使用之前剩余的信用额度。

QMan 入口门户
        每个非核心DPAA1生产者/消费者(FMan、SEC和PME)都有一个单独的门户。这是SoC 内部的一个数据结构,它将数据直接传递到用户的直接连接通道。
        软件门户组成:
        A)DQRR(出队响应环):确定下一个要处理的数据包。
        B)EQCR(入队命令环):将数据包从核心 CPU 发送到其他元素。
        C)MR(消息环):通知核心操作信息(例如:尝试出队被拒绝,等等)
        D)管理命令和响应控制寄存器。

        在 FQs 进入时,DQRR 充当进入特定核的数据包的一个小缓冲区。当软件执行 获取包 类型操作时,它从一个指针获取包,该指针是作为运行该软件的特定核心的DQRR中的一个入口提供的。每个DQRR最多有16个入口。每个DQRR入口包含:
        A) 一个指向待处理数据包的指针;
        B)数据包起源的帧队列的标识符;
        C)序列号;
        D)以及在配置时附加的FMan确定的数据。

        软件可以配置两种模式:推(PUSH)模式和拉(PULL)模式
        A)当配置为推模式时,QMan尝试从所有潜在的传入通道填充DQRR。
        B)在拉模式下配置时,QMan仅在请求核心通知它添加一个DQRR条目。
        在链路流量必须严格控制的情况下,拉模式可能有用;但是,推模式通常被认为是大多数应用程序的首选模式。

队列调度
        QMan 与处理器之间的主要通信路径是软件门户内存结构。QMan 使用这个接口在每核的 基础上调度要处理的帧。对于专用通道,过程非常简单:QMan 在 DQRR 中为专用通道的门 户(处理器)放置一个入口,并将帧从 FQ 取出到门户。为此,QMan 根据通道的优先级方案确 定接下来应该处理哪一帧,然后将与该通道关联的门户的入口添加到 DQRR 中。

        1、当配置为推模式时,一旦门户请求 QMan 处理所需的帧,QMan 将提供帧,直到停止。当 DQRR已满且有更多的帧要发送给门户时,QMan 将等待 DQRR 中出现可用的空插槽,然后在插槽可用时添加更多的需要处理的帧。
        2、当配置为拉模式时,QMan 仅在门户的直接请求时将 FQ 添加到 DQRR。QMan 命令可以确定配置为推模式还是拉模式,并确定一次提供一个还是一到三个 FQ (最多 配置为三个)。

        当系统配置为使用池通道时,门户可以从多个通道获取帧,而通道可以向多个门户提供帧,出队 也是使用上面相同的方法。

        默认的调度是让FQ发送帧到同一个核,直到它用完分配的信用额度变为空,然后会被重新安排,直到被清空。

五、BMan 缓存管理

        BMan 缓存管理,管理内存中的缓存区,处理器核、FMan、SEC、PME 都可以直接从 BMan 中获得缓冲区,而不需要额外的软件干预。并且还负责在缓冲区不使用时将缓存释放回缓冲池。通常,FMan 直接从 BMan 的入口获取一个缓冲区。当系统中的流量终止时,核心通常会释放缓冲区。在接收、处理和传输流量时,整个流程可能使用相同的缓冲区。在这种情况下, 可以将 FMan 配置为在传输完成时自动释放缓冲区。

        BMan 还支持单缓冲帧多缓冲帧

        1、单个缓冲区帧通常需要充分定义分配缓冲区大小来包含最大的数据帧并最小化系统开销。          2 、多缓冲帧能更好的允许内存利用率,但在生产者和消费者之间传递的实体是一个scatter-gather表,而不是指向整个帧的指针 ,这就给处理上元素添加了额外的处理需求。

        软件在系统初始化时定义了缓冲区池。BMan单元管理指向软件提供的缓冲区的指针,并且可以配置在空闲缓冲区的数量耗尽时去中断软件。

六、顺序处理

        DPAA1 的一个目的就是解决多核处理器环境中运行应用程序而可能出现的包乱包问题,有几种方法可以来处理系统中的包顺序问题,包顺序保存映射,DPAA1 在处理流顺序时,特定的流在特定的处理器上执行。这样的话单个流将不会被多个线程执行,系统也就和单核系统一样了,不能有效地利用系统中所有的处理器。

        如果软件不是单独的使用专用通道,使用池通道来决解这个平衡负载问题,那么软件必须参与排序。软件可以利用 QMan 中的顺序恢复点函数,该函数要求软件对在出口排队的帧进行序列号管理。还有一种方法是使用亲和性来偏置流。如果没有顺序要求那么就可以将所有无序的流都关联到核池中来实现负载平衡。

使用精确的匹配流定义来保持顺序:
        保持秩序的最简单技术是将单个流的入口相关到特定的核,对于需要讨论的特定流,系统作为单核编程来实现。

DPAA1 Software Architecture 工作原理之浅见

        这种技术是完全确定的 DPAA1 将特定的流强制到特定的处理器,因此,如果入口流完全被理解并得到了很好的定义,那么可能更容易确定性能。需要注意的是,一个特定的处理器核可能会因为流量而超载,而另一个核可能会因为流量速率越来越随机而处于空闲状态,为了实现这种方案,必须将 FMan 配置为与流量流中的字段完全匹配。这种方法只能用于有限数量的总流动 FMan 前的内部资源消耗在一般情况下,这种天生的方法应该留给重要的带外交通或少量的系统流可以受益于的高度确定性性质处理。

 使用散列来跨核心传输:

        将 FMan 配置为从一个或多个字段中提取数据,然后根据该字段构建一个密钥,将生成的密钥散列到更小的数字中。这种技术可以处理大量的数据流,同时确保特定的数据流总是与特定的核心相关联。

        例如,将流定义为 IPv4 源地址 + IPv4 目标地址。这两个字段一起构成 64 位,因此在那个定义中,流有 264 种可能的组合。然后 FMan 使用散列算法将其压缩成可管理的比特数。

        注意,因为散列算法是一致的,所以来自特定流的包总是指向相同的 FQ 。通过使用这种技术,可以以伪随机、一致(每个流)的方式将流传播到更少的 FQs 。例如,将 64 位数据散列成 2 位数据可以在 4 个队列之间传播流。然后可以使用专用通道将这些队列分配给四个 独立的核。实际上,这是作为任何特定流的单核实现出现的(实际就是 FMan 通过 PCD 拆解分类数据包然后将特定的包交由特定的核来完成处理,实现伪随机、一致的方式来传输流量包)。

DPAA1 Software Architecture 工作原理之浅见

        为了保证传输的稳定和速度,解决优化缓存变暖的问题,可以在分配缓存时,分配比预计更 多的 FQ,这样虽然不能保证每个 FQ 都包含一个数据流,但是解决优化了散列冲突,一个 FQ 中包含多个数据流。为此 FQ ID 设计了 24 位架构,因此系统中可能有多达 1600 万个 FQ 。

DPAA1 Software Architecture 工作原理之浅见

七、池通道

        前面已经说过每个生产者 / 消费者都有一个专用通道,除 FMan 和加速模块外,每个核还具有多个池通道。我们可以使用池通道,让多个核心一起为特定的一组数据流提供服务,这样可以有效的解决平衡负载问题,但是多个核为一组数据流服务也增加了包的无序处理可能性。当应用程序不需要按顺序处理时,池通道就是最好的选择。但需要顺序处理时可以使用硬件顺序保存来完成。

 

DPAA1 Software Architecture 工作原理之浅见

        只要多核在不同时间处理来自同一个数据流的帧,这样就可以保持顺序。这样的话就可以用之前的 DQRR 相关的离散方法来处理数据。当同一时间处理同一数据的帧,可以通过 QMan 来将 FQ 挂起,来错开时间。

拥塞管理:

        1、系统中活动的最大帧数由分配给压缩帧队列描述符(PQFD)的内存量决定的。每个 PQFD 是 64 字节的,最多可以识别 3 个帧,所以总帧数是分配给 PQFD 空间的内存除以 64 字节乘以 3 个帧。

        2、BMan 中的缓冲池可能会耗尽。这取决于软件为 BMan 分配了多少缓冲区。当一个给定的池处于耗尽状态时,BMan 可以触发一个中断来请求更多的缓冲区;软件可以通过这种方式管理缓冲池的拥塞状态。

        3、除了这些高级的系统机制之外,拥塞管理还可以针对 FQs 进行识别。许多 FQ 可以组合在一起形成一个拥塞组,对于大多数 DPAA1 SoCs,每个系统最多 256 个拥塞组。可以将系统配置为通过考虑拥塞组中FQ内的总字节数或通过拥塞组内的总帧数来指示拥塞。

(未完待续)

来源:技术探索者

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月10日
下一篇 2022年7月10日

相关推荐