pflua:用Lua编写的高性能网络包过滤工具箱

来源:互联网 发布:snailsvn mac 怎么用 编辑:程序博客网 时间:2024/05/29 00:32

发表于2014-09-05 09:283441次阅读| 来源CSDN7 条评论| 作者伍昆

pflua高性能性能工具lua编译器web服务器
摘要:Pflua是一款高性能的包过滤工具,用Lua编写,不同于其它包过滤工具,Pflua使用了libpcap库来编译pflang,编译后的字节码可运行于内核。该项目托管在GitHub上。

Pflua是一款高性能的包过滤工具,用Lua编写;实现了libpcap的包过滤语言,我们简称为pflang。不同于其它包过滤工具,Pflua使用了libpcap库来编译pflang,编译后的字节码可运行于内核。该项目托管在GitHub上。

为什么选择Lua?

1.  以LuaJIT作为编译器。LuaJIT是一款适时制追踪编译器。追踪在包过滤场合是非常恰当的战略,对比其它任何静态的编译技术能获得更好的性能。

2.  使用了Snabb Switch 。SnabbSwith是一个开源的网络软件,主要是为了帮助用户便捷地创建和部署大规模化网络,SnabbSwith也是采用Lua编写的。与SnabbSwith的整合,能构成一个高性能的过滤操作环境。

实现

Pflua把pflang语句编译成Lua源码,在运行时能被优化为本地机器码。在Pflua中有两种编译管道。

1.  自定义分析,这是一种非常传统的做法,能生成pflang过滤语句的高级AST。例如,如果我们采用该编译管道来编译Pflang语句ip或ip6,得到的Lua源码如下:

[js] view plaincopy在CODE上查看代码片派生到我的代码片
  1. return function(P,length)  
  2.    if not (length >= 14) then return false end  
  3.    do  
  4.       local v1 = ffi.cast("uint16_t*", P+12)[0]  
  5.       if v1 == 8 then return true end  
  6.       do  
  7.          do return v1 == 56710 end  
  8.       end  
  9.    end  
  10. end  

2.  Berkeley 包过滤虚拟机。Pflua能够载入libpcap库,并且利用它来把pflang语句编译成BPF(Berkeley Packet Filter)。不论你是使用原生的BPF还是pflang语句,BPF都会直接被编译成Lua源码。如果我们采用该编译管道来编译Pflang语句ip或ip6,得到的Lua源码如下:

[js] view plaincopy在CODE上查看代码片派生到我的代码片
  1. return function (P, length)  
  2.    local A = 0  
  3.    if 14 > length then return 0 end  
  4.    A = bit.bor(bit.lshift(P[12], 8), P[12+1])  
  5.    if (A==2048) then goto L2 end  
  6.    if not (A==34525) then goto L3 end  
  7.    ::L2::  
  8.    do return 65535 end  
  9.    ::L3::  
  10.    do return 0 end  
  11.    error("end of bpf")  
  12. end  

性能比较

经与LuaJIT的强强联合,Pflua的表现令人满意:


这是一个摹拟的两机之间ping泛滥测试,图中不同pflang执行方式的说明如下:

  1. libpcap:从libpcap解释的用户空间(user-space)BPF。
  2. linux-bpf:发布于2011年旧d的Linux内核空间(kernel-space)BPF编译器。我们把它的库调整为一个可载入的用户空间模块。
  3. linux-ebpf:发布于2014年新的Linux内核空间BPF编译器,相应调整为用户空间可用。
  4. bpf-lua:BPF字节码,由Pflua交叉编译为Lua。
  5. pflua:透过Pflua直接把Pflang编译成Lua。

图中显示了Pflua能以接近测试机内存带宽极值100G/S速度来执行pflang包过滤操作,表明它不俗的包处理能力。


此外,我们还尝试从wingolog.org上进行包过滤测试,wingolog.org大部分时间是作为Web服务器来运作的,测试情况如上图所示。Pflua在这里再次击败了其它对手。

写在最后

如果想更多了解Pflua,不妨选择以下任一方式:有关Snabb中运用Pflua的查询,请访问论坛:snabb-devel。更多内容,请点击:wingolog。

0 0
原创粉丝点击