cavium CN71XX芯片 FPA协处理器总结

1、
FPA是一个CN71XX单元,包含9个无限容量的存放L2/DRAM存储指针的pool(其中8个对软件开放),软硬件都可以去pool里申请和释放指针,软件和IPD,SSO硬件都可以去从pool里申请内存,SSO,DMA,DPI,HFA,ZIP,TIM这些硬件可以释放内存回pool。
2、
FPA为每一个pool实现了一个类似栈的后进先出的数据结构,在任意时刻,FPA硬件单元都存储/缓存栈顶,当一个pool太大,以至不能适应in-unit的存储,FPA就会在L2/DRAM上创建一个树/链表 数据结构使用pool里的空闲存储空间,来存储其他指针,这个机制导致了每一个pool的size是不被限制的。
3、
对于FPA的唯一约束是指针被提交到free的pool上必须要以128字节对齐,且空闲的存储空间必须是128字节或者更多,不同的pool里可以有不同size的free memry,实际上,在同一个pool里也可以有不同的free memory
例子:
wqe来申请一个空间,只能申请128byte的倍数个,如果此wqe实际存储空间是300byte,则它需要申请至少4个128字节这么大的空间,因为空闲的存储空间必须是128字节或者更多。
4、当in-unit空间溢出时,每32个free memory中有31个不会被FPA硬件更改,它们指向其他free memory,每32个free memory pointer中都有一个指向其他32个free memory pointers, 32个free memory pointer中31个指向有效的memory,随后一个指向下32个free memory pointers,内存是就是这样连接成块的。
5、FPA硬件单元内部可以保存2048个指针,pool 0 默认有256个节点,pools 1-8 默认有224个节点,每一个pool中的存储空间上都有自己的水印,CN68XX硬件从L2/DRAM上存取指针都是依据这个水印,当一个pool接收到比此pool允许接收的高水印阀值还多的包时,硬件会向L2/DRAM上写32个指针,当in-unit中的空闲内存小于pool允许的低水印阀值时,就会从L2/DRAM上取32个指针。
6、CN68XX硬件还能在相关的内存上自动处理DWB(不能回写)命令,目的是保证DRAM的带宽不会在缓存块到内存时无谓的浪费。
7、IO桥单元实现了DWB功能
8、当pool中没有足够指针空间,core去pool中申请只会返回NULL指针
9、8个有效的DID可以为特定的处理流程选择pool,pool8只能被SSO调用,而不能被DID访问,pool0是特殊的,因为集成的输入硬件会从pool0中申请空间来存储packet data,集成输入硬件也会从一个可编程的pool中申请wqe节点,每当pool0或者wqe pool 节点耗尽,输入硬件就不能收包。
10、pool8是特殊的pool,pool8是SSO用来内部处理wqe节点的,pool8必须包含足够的buff来支持最大数两的wqe节点,如果pool8耗尽,SSO执行ADDWQ命令就会失败并且上报error
11、FPA硬件检测DRAM中的free list损坏,这种检测可以检测普通的内存损坏,在某些环境下还能检测出指针重复,FPA硬件设置
FPA_INT_SUM[Qn_COFF,Qn_PERR,Qn_UND]中的一个,当它检测到errors,除了将32个指针写进L2/DRAM,CN68XX还会为pool写入页索引(FPA_QUEn_PAGE_INDEX)和pool number,如果回读指针发现value不匹配,the FPA hardware sets FPA_INT_SUM[Qn_PERR] and loads FPA_QUE_EXP/FPA_QUE_ACT.
12、FPA硬件通过确定添加到pool中的每一页是否在FPA_POOLn_START_ADDR到FPA_POOLn_END_ADDR定义的区域内来判断是否出错,如果某个page的地址不是在这一区域内,则会报告FPA_ADDR_RANGE_ERROR
13、内核软件可以通过读FPA_QUEn_AVAIABLE[QUE_SIZ]寄存器来找到现在pool里剩余多少free的buffers

软件手册:
1、包流非常依赖于内存空间,FPA就是用来管理内存空间的硬件
2、这些空间是在系统初始化的时候从L2/DRAM中申请,被平均分配到8个pool中,一般每一个pool都有相同大小的内存空间,作用也是一样的,例如,现有两种pool,处理两种不同类型的buffer:packet data buffer和wqe buffer
3、每一个pool的size只被pool申请的L2/DRAM空间总数所限制,每一个pool size都被认真的配置过,所以总是可用的free buffer
4、申请一个buffer
硬件会从FPA中申请buffer,FPA会把buffer指针从特定的pool上拿下来,给申请者的buffer pointer,这叫做allocate
buffers可能会被从FPA中预申请,并且被申请者保存,等待被使用,这种预申请操作会用到申请者(IPD)和内核共同作用,预申请操作是异步的,让core空闲,以便于内核执行其他程序
5、释放一个buffer
很多硬件可以释放buffer交还给FPA,FPA拿到pointer然后还给特定pool,返回的pool如果不是申请的pool,则会报错
6、硬件控制 packet-link-lock
在包处理过程中,临界区例如TCP/IP块必须用一个lock保护,每一个flow都有一个TCP/IP控制块,访问这个锁必须按照入接口顺序访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值