cavium CN71XX芯片包处理过程总结

1、一般包收发过程:一般情况下,网卡收到数据包后通过DMA映射到指定的内存位置,然后中断通知CPU来取数据包,经过几次内存拷贝后到达协议栈。为了加速包的处理效率,一些CPU采用各种协处理器来帮助完成包的处理。
2、Cavium的OCTEON为网络做了大量优化,主要包括数量众多的协处理器,不同的协处理器完成特定的任务,大大简化了软件的复杂度提高了性能,并且能够从硬件上保证一些特性比如包保序。
3、FPA:Free Pool Alloctor主要负责分配收发包过程中的packet work entry以及packet的data buffer和PKO command buffer。
4、对FPA的操作主要有三种:
对FPA的操作主要有三种:
buffer_allocte(synchronous): core会等待可用的buffer返回或者是返回的NULL
buffer_allocte(asynchronous): core不会等待buffer地址返回,而是在之后的时间里会从特定位置接受到buffer地址
buffer_free(synchronous): 这个操作会把buffer地址返还到特定的FPA pool
5、主要使用了FPA 0 1 2,0负责在收到packet后存储packet buffer data部分,1负责对packet header部分进行简单hash后的信息存储,2是pko command buffers。在banfflite的一个BUG中人为的在FPA0中分配packet buffer的时候会出现crash的现象,Cavium的人就此给出一个workaround就是建议在FPA4中分配packet buffer去发送这个包,但是OCTEON在硬件上规定收包必须用FPA0.因此packet buffer的大小就是2176。
6、PIP/IPD
这个协处理器的主要作用就是从interface上比如:SGMII XAUI口上收到数据后由PIP对数据包的头部进行5-tuple的计算后得到这个包的WQE(Work Queue Entry)和group tag Qos类提交给SSO所需要的数据,而IPD则是将收到的数据包的数据部分copy到data FPA中申请的fpa buffer中去。这个协处理器提供收包以及包的最简单的CRC 错误检查以及丢弃操作,OCTEON也提供另外一种收包方法,在不用PIP/IPD的时候可以使用内核的NAPI的方式使用cnMIPS core的poll方式来进行收包。

检查packet,包括L2/L3头部的错误
提供拥塞控制,可在PIP部分丢掉部分包
创建WQE(Work Queue Entry)
决定提供给SSO的WQE的包属性(Group Qos Tag-Type Tage-Value)
把收到的包存储在PIP/IPD内部的buffer和RAM中
发送WQE到SSO完成调度
一般配置流程:

一个core调用: cvmx_helper_initialize_packet_io_global()
每个core都调用: cvmx_helper_initialize_packet_io_local()
使用cvmx_pip*和cvmx_ipd*来配置PIP/IPD
使用:cvmx_helper_ipd_and_packet_input_enable()打开收包功能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值