网络通信 频道

OpenVPN性能测试:单纯路由为何慢?

解析:为何OpenVPN相对于单纯路由性能下降很多?

    OpenVPN相对于单纯路由来说,性能下降很多,那么主要的因素是什么呢?相对于单纯路由功能,OpenVPN主要是添加了:

  1,虚拟网卡TUN到应用层再由UDP发送的过程。
  2,传输加解密部分。
    这里进行了另一项测试,即在不加密的状态下测试,做法很简单,将OpenVPN配置文件中的cipher段改成cipher none即可。
    新的传输数据如下图:

    看得出,转发速率略有提高,达到了1.3~1.4万/秒,大约提高了15%左右,但这与直接route测试结果相比仍然有很大差距,因而说,对于小包来说,OpenVPN做加解密的消耗并不是主要的,更多的消耗是因为它的工作机制。
    此外,我在66主机的系统上测试了CPU加解密能力,使用OpenSSL的speed操作,摘几个我们关心的算法如下:

  type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
  des ede3          7831.31k     7924.27k     7958.27k     7972.18k     7981.74k
  blowfish cbc     32325.64k    34821.07k    35421.81k    35609.51k    35388.90k
  aes-128 cbc      28142.41k    37398.85k    40835.93k    41901.40k    42246.14k

    简单的说,加解密算法中AES128的速度是比较快的,接近每秒40兆(64字节),也就是说如果只是要满足百兆网络加解密需要,PIII 1G CPU只需要利用30%即可。
    然后我们再来看一下这个模式下VPN所在主机的CPU消耗:

    依然是从最后一条垂直短红线处开始,CPU占用率85%,还是CPU作为瓶颈。

    最后,我再来测试中等长度包(udp 512)对VPN的要求,这里依然使用AES128,如下图所示:
   

    发包速率在1万左右,换算成流量大概是5Mbytes。对VPN主机的CPU消耗如下图(从最后一条垂直红线处开始):

    再来试一下中等包时候,加密操作对OpenVPN的影响,下图是无加解密时对OpenVPN进行udp 512字节包测试数据:

    发包速率到了1.2万左右,相对加密模式,提高了20%左右,比64字节测试的同比提升率高,这也是很容易解释的,随着包变大,流量变大,因而加解密操作所消耗的CPU也变高。

    同样,看一下这时候VPN主机的CPU使用率:

    去掉加解密之后,CPU由90%降到85%,也是符合逻辑的,因为现在只有包转发和内存拷贝(DMA操作)了。
    再来看看udp数据长度为1400的大包,如图:

    发包速率降到了6000~7000/秒,但流量却到了9.5Mbytes上下。再来看看VPN主机的CPU占用率:
   

    这次CPU占用有了提升,接近95%,这是因为大量数据压缩更耗CPU,这也说明了一点:PIII 1G CPU是不足以让OpenVPN跑满100M网络的,即使是1400多字节的大包。
    最后,还有一个测试,就是试试多CPU对OpenVPN的影响,我将66/68两台主机换成PIII 1Gx2,并且打开Linux的SMP支持,这样OpenVPN会不会性能翻倍呢?

    发包数据如下图:

    不幸的是,发包速率几乎没有任何变化,那么OpenVPN对双CPU的利用率如何呢?见下图:

    VPN CPU利用率保持在52%左右,也就是说,实际上有一个CPU是几乎空闲的,这也说明目前的OpenVPN并不支持多路CPU(我看到过OpenVPN好像有实验性的多线程支持,但不知道怎么打开,将来不排除OpenVPN将来会对多CPU的支持)。
 

5
相关文章