pf_ring有三种透明模式(transparent_mode),为0时走的是Linux标准的NAPI包处理流程。为1时,包既走Linux标准包处理流程,也copy给pf_ring一份。为2时,驱动只将包拷贝给pf_ring,内核则不会接收到这些包。

从性能角度而言,三种模式的效率依次升高。

(1)通用网卡驱动


对于通用网卡驱动,只有transparent_mode=0有效。

pf_ring透明工作模式(transparent_mode)原理_第1张图片


pf_ring透明工作模式(transparent_mode)原理_第2张图片

从这里可以看到,当设置为模式0和模式1时,内核依然会处理这些包,而设置为2时,包只由pf_ring处理。

(3)效率提升

从上面的分析看以看出,模式0网络处理路径最长,效率也是最低的;模式1路径较短,效率比模式0要高,但内核中的处理工作依然较多;

模式2路径最短,内核中的处理工作较少。