1 介绍
OCTEON处理器包含了若干功能块,他们一起工作管理包流通过处理器。在这个文档,处理器指的是完整的芯片,拥有所有的不同功能的硬件块,芯片上的所有核。
这个章节分为不同的部分:
1) 章节2-包流纵览,一个典型包流程被讨论,展示不同的功能块怎么协同工作去创造一个快速包处理。
2) 章节3-硬件特性加速包处理,关键硬件加速特性被讨论:
(1) 包分类和优先的硬件管理
(2) 硬件缓存管理
(3) 包连接锁
(4) 包序列管理
3) 调度/同步/序化单元介绍,SSO提供必要的能力
SSO单元提供下面的关键功能
(1) 调度:根据QOS优先权调度包处理
(2) 同步:通过提供包连接锁支持同步,这些锁可以被用来保护临界区,或串行包转发;
(3) 序化:
2 包流总览
这个部分介绍关键功能块在包处理中的使用,和一个包如何穿过处理器。在接下来的图中,说明包流穿过一个OCTEON处理器。前三个图书包流的总览。而后的图,包流被细分解为一系列分开的图。总览图和细节图概括了同样的事实,但是总线被引入更容易说明细节的图。
在这些图中有两个Psedo blocks。一个是“simplified packet interface pseudo block”,另一个是”packetinput pseudo block”。这两个pseudo block被包括在帮助阅读者理解OCTEON处理器的各种功能。
1) simplified packet interface pseudo block 是一个一般的接受和转发功能的表现,包接口可以说下面任何一个:XAUI,PCIE,SPI-4.2,PCI/PCI-X/SGM2,RGM2,GM2,M2等待。simplifiedpacket interface pseudo block已经被极大简化和包含两个子块,被标注为TX端口和RX端口。
2) packet input pseudo block包含两个块,一个是PIP一个是IPD。这个块从simplifiedpacket interface接收和处理数据。
包流以三个不同的部分在下面的图中展示:
1) 包入
2) SSO和内核处理
3) 包出
注意:这些图简化了包流,在真实的系统中,许多活动是平行执行的。例如,IPD预取包的同时仍然在处理当前的包。有很多特殊的特性没有被描述在这个章节。
注意:这些图假定包没有被丢弃直到可配置的RED,或包错。在RED里,包可以被丢弃如果缓冲被填满。
注意:文档中的指针是物理地址,SDK函数如cvmx_pow_work_request_sync()转换物理地址到虚拟地址,若需要的话。
IPBD=IPD总线
PKOB=PKO总线
POB=包出总线
I/O总线包含两个总线:IOBI(输入)IOBO(输出)。接收数据直接从接口RX到IPD通过IOBI,不需要结果IOB(I/O BRIAGE)
1) 接口RX接收到包后,检查错误,它通过IOBI传递这个包到IPD单元,IPD和PIP共享这个数据。这两个单元一起工作处理这个输入包
2) 在PIP对这个包进行解析,包括检查软件配置,它计算数据是否需要被IPD
3) 若IPD没有丢弃这个包,它从FPA单元申请一个WQEBUFFER和包数据BUFFER。
4) IPD写WQE区域到WQE BUFFER,写包数据到包数据BUFFER
5) IPD执行add_work操作增加WQE指针到SSO段元的QOS队列
注意:操作步骤3分配了两个BUFFER,一个是WQE BUFFER,一个是PACKET DATA BUFFER,在释放时是分开释放的后面流程中需要特别注意。
SSO调度WQE是基于QOS优先权,进入次序等。
6a 6b.内核通过get_work操作从SSO单元中获取新的WQE指针。WQE包含了包数据BUFFER指针。
7 内核处理包数据,读写,包数据在L2/DRAM中。
8 处理完毕包数据后,内核发送包数据BUFFER指针和数据偏移到PKO单元的出包队列。队列配置指明出包的端口和包的优先权。若需要,包的输出安装包的进入顺序。
9 内核释放WQE BUFFER到FPA。
注意步骤8想PKO传递了两个参数,一个是PACKET DATABUFFER,一个是DATA OFFSET; 步骤9这里释放的是WQE而不是DATA BUFFER。
10 PKO通过DMA将数据从L2/DRAM中的包数据BUFFER到自己的内部内存。(由于PKO拥有PACKET DATA BUFFERADDRESS和DATA OFFSET,所有PKO可以直接在L2/DRAM中获取数据)
11 PKO选择性的增加TCP/UDP的检验和,然后从它的内部内存发送包数据到OUTPUT端口。TX接口将转发这个包。然后PKO通告内核这个包已经发送。
12 PKO释放包数据BUFFER到FPA(注意这里释放了PACKET DATA BUFFER)
接下来的图展示了和上面图相同的事实,但是总线被引入。理解这个信息对展示很有用:
通过想象处理器中的准确的数据流过程,可以经常能编码性能上的问题。注意那个特殊的总线,和DMA设备提供的数据转发将保持IOB变得过载。
下面图片中的英文和上面的基本雷同,不再做翻译,请特别注意数据是通过不同的总线在各个单元间进行传输。
3 硬件特性加速包处理
在你学习包处理细节之前,有几种非常重要的OCTEON特性,这些腾信对加速包流非常必要,他们是:
1) 硬件管理的包分类和优先权[z1]
2) 硬件管理的BUFFER池[z2]
3) 硬件管理的包连接锁[z3]
4) 硬件管理的包序[z4]
3.1 分类和优先权
这个是OCTEON处理器的关键特性。硬件分类和优先权包括:
1) 包进入处理器时,被PKI被分类和给一个QOS优先权,然后包数据被放入到SSO单元里的指定的QOS输入队列。QOS的输入队列是高可配的。
2) 内核从SSO单元请求一个包。SSO返回一个最高优先权的调度包。当内核收到这个包时,它已经准备好处理它。内核不检查包的优先级。它永远不会收到一个正在等待锁的包。
3) 当包处理完毕后,内核把包放到PKO的输出队列中等待转发。PKO的输出队列被映射到一个指定的输出端口。PKO输出队列的优先权是高可配的。
通过允许内核以并行的方式处理包,这个硬件处理删除了包流的瓶颈,不需要分类和排列包的优先级。
这是包优先级硬件管理的简化视图。SSO单元和其他硬件单元提供一个强有力的和灵活的调度能力。这些能力在相应的章节被仔细描述。
3.2 BUFFER申请单元
包流非常依赖内存的BUFFER。FPA(FREE POLL ALLOCATOR)单元在OCTEON处理上的其他硬件单元管理内存BUFFER。在系统初始化的时候,这些BUFFER被从L2/DRAM申请,同时被商定到高达8个BUFFER池中。通常每个BUFFER池有相同的大小,而且被用作相同的目的.例如,有分开的池为两种不同类型的BUFFER,下面他们将被介绍:PACKET DATA BUFFER和WORK QUEUE ENTRY BUFFER.
每个池的大小依赖于池的数量。池的大小配置时应该格外小心,目的总要有可用的BUFFER。
FPA章包含配置BUFFER的细节。
3.2.1 分配BUFFER
一个硬件单元,像IPD或内核,可以从FPA中的指定的池请求BUFFER。FPA将BUFFER指针从池上取下,把地址扔给请求者。这个操作较分配一个BUFFER。
Buffer可以预先分配和保存,以等待请求者需要。这个预分配被IPD和内核都在使用以增加包的处理速度。
3.2.2 释放BUFFER
很多硬件单元可以把一个BUFFER指针返回给FPA池。FPA池得到这个BUFFER指针,将它插入到池中。这个操作较释放BUFFER。
3.3 包连接锁
锁的硬件管理去保护临界区。这些锁和锁不是同一类的:他们被直接连接到包的处理,所以被叫做包连接锁。包处理过程中,如代码的临界区,如读编辑TCP/IP控制块,必须用锁保护。在每个流中只有一个TCP/IP控制块。访问这个锁必须安装包的进入顺序,没有随机顺序或先来先服务。硬件锁设备.
硬件包连接锁特性包括:
1) 减负软件:硬件锁通过减负软件改进系统效率:SSO负责批准锁和计算出哪个包是下一个。
2) 原子访问:仅仅一个包在同一时间才能获取到该锁。
3) 锁被授予包进入次序: 通常在收到包的时候临界区应该被锁住,而不是请求锁的顺序。SSO提供硬件锁执行规则。
4) 异步锁获得:另外一个特性是异步锁的获得。在内核需要所得时候,内核可以请求锁,结束包处理,然后检查锁是否已经获得。当锁被获得内核将被通知。
包连接锁被用作异步包处理。
注意:内核在同一时刻仅仅能够有一个包分配,在同一时刻内核也仅仅能保持/请求一个包连接锁。
3.4 包序
当并行处理被请求的时候,多内核可以一齐工作处理相同流的多个包。当包改变处理阶段时,或需要访问硬件锁,SSO将强迫包安装进入次序停留。这个特性被用作保持包次序。