现在的NFV架构是否存在重大性能问题

一般的vCPE都选择用VM或者container部署在多核上,OVS分配网络,每个容器/vm里面跑DPDK以求达到性能最优,这里有几个问题:
1. 每个core上的负载不均衡,有的vnf可能很空闲,有的又很忙,成为瓶颈。如果不绑定到core, 系统上下文切换又造成延时
2. 每个VNF要从虚拟网卡上取数据,可能是ovs,也可能是sriov,要经过内核态用户态切换,包数据解析,组包,甚至送到硬件去再回来。即使ovs交换也要绕一圈再回来。
3. 数据在不同cpu上处理也就意味着要进DDR, load cpu cache, flush, 再轮回到下一个cpu重复,DDR本身就是性能瓶颈

总体来看报文经过了多个vnf也经过了多个cpu, 延时大,cpu负载不均衡,如果把这种横向分割整合成纵向,性能会10倍以上提升:
1. 每个vnf处理变成callback, 报文从进来到出去经过一系列callback, 都在一个cpu上处理。 这样报文数据一直在一级缓存,效率极高。
2. VNF之前只有向后传递报文或者丢弃,顶多像个流程图一样复杂。 vnf从调用参数驱动报文,不需要知道硬件信息。
3. OVS的复杂功能,比如报文过滤规则,overlay都变成一个或者几个标准vnf,加入处理管道。
4. 报文不下cpu直到出去,多核利用就要靠RSS或者其他负载均衡,这个很成熟
5. vnf控制面, 这个可以用容器去隔离,管理。容器和vnf之间尽量通过共享内存方式通信,避免切换。

问题:
1. 安全性,vnf之间到底会不会相互干扰破坏?运营商的程序应该充分测试。即使没有,经过隔离,很容易定位到问题VNF. 不知道程序能否动态切换Namespace, 如果可以就能动态隔离。从长期来看,特别是VNF稳定以后,可以选择这种不隔离的方式提高性能,前期用vm或者容器去隔离。
2. Openstack还能支持吗?这是个vm/容器之外的新平台,应该有新的插件
3. 还是不安全怎么办?vcpe或者是每个core变成bare metal模式, 系统提供的api有限

性能。。。一个数量级没问题吧?本质上NFV是一种硬件网元变软件的方案,不能说有了V就一定要虚拟化要容器,这是错误的思想,软件化的目的是灵活控制升级,利用普及的低成本计算能力, 只要能做到这些就可以,vm/容器并不适合vnf这种数据串行处理流程!

opennfv都用openstack做参考实现,这是早期的过渡想法,性能还能数量级的提升

猜你喜欢

转载自steeven.iteye.com/blog/2325792