在结构sk_buff中添加新成员-对性能有影响吗



我需要向sk_buff结构添加一个小缓冲区,并希望将其作为单独的成员添加,或者将其添加到默认的skb->cb之上。

大小大约为100字节。在这里,关注的是";性能";。它会对数据包处理造成任何性能打击吗?特别是,缓存对齐,因为这样大小的sk_buff无法在单个缓存行中加载,这会导致问题吗?

我做了一个实验,只需在sk_buff中再添加4个字节,就注意到在常规UDP测试中会出现30-50MBps的性能下降。

有什么建议吗?

,它会对性能产生影响!

除了数据结构对齐方面的可能问题外,主要问题还来自更高的内存扩散和/或更大的内存带宽使用。事实上,如果缓冲区没有被完全使用,它就充当了一个大的填充。这种填充会降低性能,因为可能会浪费缓存行,或者因为结构项不会从主内存连续加载(当需要遍历数据结构的许多项而只读取很少的字段时,就会出现这种情况(。否则,如果缓冲区是完全读取/有用的,则需要从内存层次结构(CPU缓存和RAM(加载更多的数据,而内存层次结构根本不是免费的。

我建议您只需将一个(小(引用(例如,数组单元格偏移量、指针(放在此关键skb_buff数据结构中的缓冲区中,并将此缓冲区移动到另一个单独的数据结构中。其好处是缓冲区可以打包,并且显著降低了内存扩散的影响(如果不经常使用添加的缓冲区(。然而,这种方法的缺点是额外的间接/访问,并且需要以一致的方式管理单独的缓冲区。

最新更新