用户空间网络提升 NFV 的性能
本文是一篇翻译,翻译自https://software.intel.com/en-us/blogs/2015/06/12/user-space-networking-fuels-nfv-performance,文章有点老了,15年写的,但是文章总结了一些用户态的协议栈,很有学习参考的意义。
如今,作为一个网络空间的软件开发人员是非常激动人心的,因为工程师的角色随着这个世界的规则在逐渐改变。
过去这 15 年来,人们对高性能网络做了很多努力,网络模型也发生了很多改变,起初,数据包的收发都要推送到内核才能完成,现在,不用内核态的参与也可以完成。这种改变的背后是在力图解决以下的几个问题:1)用户态和内核态上下文切换的开销;2)软硬中断的开销;3)数据拷贝的开销等等。

最近,很多人在讨论 mTCP——一个实现了用户态协议栈的开源库,这种技术在很大程度上就颠覆了传统的网络模型,使得网络收发包的效率大大提升。它充分利用了 CPU 的亲和性,共享内存,批处理等技术来实现高效的 I/O 事件。与之类似的技术也相继被提出。
实验表明,mTCP 这种用户态协议栈,相较原生的内核协议栈,在处理多种流行的应用时的性能得到较大提升,如 SSLShader 提升了 33%,lighttpd 提升了 320%。

软件形态的改变离不开硬件的革新。由以前的单核系统到如今多核系统的性能扩展,直接导致了网络软件架构的新方法。例如,内核所做的所有功能和处理,包括网络驱动程序,现在都可以被直接放到用户空间中来实现,应用程序可以直接访问底层的 NUMA 结构,利用 CPU 的亲和性,以及多核特性并行处理任务。这种设计避免了上下文之间的切换开销,可以显著降低数据传输的延迟和 CPU 使用,同时提高吞吐量和带宽。另外,提供一种运行到完成(run-to-completion)的模型能够让不同的核独立并行地完成不同的任务。
随着网络的发展,我们现在看到了大量的开源项目,都在将内核协议栈移到用户空间来做。它们的做法存在一些区别,像 mTCP,它的协议栈是从零开始开发的,而其他很多项目则是基于 FreeBSD 的来做,这主要是因为 FreeBSD 的协议栈具有 “最健壮的网络协议栈的声誉”。此外,很多存储解决方案也是采用的 FreeBSD 来作为其核心操作系统。当然,Linux 协议栈也是可以采用的。
这些用户态协议栈怎么做到绕过内核的,这就离不开 DPDK 的支持。利用 DPDK,用户态协议栈可以创建一个中断来将数据包从 NIC 的缓冲区直接映射到用户空间,然后利用协议栈的特性来管理 TCP/IP 数据包的处理和传输。
DPDK 还可以作为一些 vSwitch(虚拟交换机)的加速器,这些 vSwitch 包含 OpenFlow 协议的完整实现,以及与 OpenStack Neutron 的整合。
下面,我们收集了一些发现的开源项目,无论你决定使用一个 vSwitch 还是一个完整的网络协议栈,网络开发人员都有很多选择,可以将应用程序移到用户空间,并在多核系统上扩展性能。
DPDK-Enabled vSwitch:
OVS
Open vSwitch 是一个多核虚拟交换机平台,支持标准的管理接口和开放可扩展的可编程接口,支持第三方的控制接入。
https://github.com/openvswitch/ovs
Lagopus
Lagopus 是另一个多核虚拟交换的实现,功能和 OVS 差不多,支持多种网络协议,如 Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS 和 PBB,以及隧道协议,如 GRE,VxLan 和 GTP。
https://github.com/lagopus/lagopus/blob/master/QUICKSTART.md
Snabb
Snabb 是一个简单且快速的数据包处理工具箱。
https://github.com/SnabbCo/snabbswitch/blob/master/README.md
xDPd
xDPd 是一个多平台,多 OpenFlow 版本支持的开源 datapath,主要专注在性能和可扩展性上。
https://github.com/bisdn/xdpd/blob/stable/README
从零开发的用户空间协议栈套件:
mTCP
mTCP 是一个针对多核系统的高可扩展性的用户空间 TCP/IP 协议栈。
https://github.com/eunyoung14/mtcp/blob/master/README
Mirage-Tcpip
mirage-tcpip 是一个针对 MirageOS 这种 “库操作系统” 而开发的一个用户态网络协议栈,开发的语言是 OCaml。
https://github.com/mirage/mirage-tcpip
IwIP
IwIP 针对 RAM 平台的精简版的 TCP/IP 协议栈实现。
http://git.savannah.gnu.org/cgit/lwip.git/tree/README
移植版的用户空间协议栈套件:
Arrakis
针对多核系统的用户空间 OS,移植于 IwIP。
https://github.com/UWNetworksLab/arrakis/blob/master/README_ARRAKIS
libuinet
用户空间的 TCP/IP 协议栈,移植于 FreeBSD。
https://github.com/pkelsey/libuinet/blob/master/README
NUSE (libos)
一个基于 Linux 的库操作系统,移植于 Linux。
https://github.com/libos-nuse/net-next-nuse/wiki/Quick-Start
OpenDP
一个针对 DPDK TCP/IP 协议栈的数据面,移植于 FreeBSD。
https://github.com/opendp/dpdk-odp/wiki
OpenOnload
一个高性能的用户态协议栈,移植于 IwIP。
http://www.openonload.org/download/openonload-201205-README.txt
OSv
一个针对虚拟机的开源操作系统。移植于 FreeBSD。
https://github.com/cloudius-systems/osv/blob/master/README.md
Sandstorm
一个针对个人服务器安全的开源网络平台,移植于 FreeBSD。
https://github.com/sandstorm-io/sandstorm/blob/master/README.md
总结:
1、这篇文字的亮点在于总结了当前阶段业界出现的一些用户空间协议栈,对于文章标题提到的 NFV 在文中则只字未提,但其实意思也很明了了。用户空间的协议栈是随着硬件技术的发展,以及新鲜应用场景应运而生的,换句话说,对于像 NFV 这种对性能要求比较高的场景,采用用户态的协议栈是比较合适的。
2、文中是 2015 年写的,这意味着到现在为止,肯定出现了很多比上面总结还要多的方案,其中比较出名的有 SeaStar 和 腾讯开源的 F-Stack,后面找机会再进行详述,敬请期待吧。
用户空间网络提升 NFV 的性能的更多相关文章
- Linux用户空间网络配置工具tips
1.当调用`ifconfig eth0 down`命令关闭网络设备eth0时,会产生如下影响: 所有配置在该网卡上的IP地址都将失效并且被移除 (在ubuntu 14.04上测试,IP并不会被移除,重 ...
- 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...
- 深入理解Linux网络技术内幕——用户空间与内核空间交互
概述: 内核空间与用户空间经常需要进行交互.举个例子:当用户空间使用一些配置命令如ifconfig或route时,内核处理程序就要响应这些处理请求. 用户空间与内核有多种交互方式,最常 ...
- 译<容器网络中OVS-DPDK的性能>
译<容器网络中OVS-DPDK的性能> 本文来自对Performance of OVS-DPDK in Container Networks的翻译. 概要--网络功能虚拟化(Network ...
- Linux时间子系统之(三):用户空间接口函数
专题文档汇总目录 Notes:用户空间时间相关接口函数: 类型 API 精度 说明 时间 time stime time_t 精度为秒级 逐渐要被淘汰.需要定义__ARCH_WANT_SYS_TIME ...
- Linux时间子系统(三) 用户空间接口函数
一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: 1.和系统时间相关的服务.例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时). 2.让进程睡眠一段时间 3. ...
- linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解
1.特权级 Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ...
- 提升 Web开发性能的 10 个技巧
随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键.高度联结的世界意味着用户对网络体验提出了更严苛的要求.假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情 ...
- 如何从请求、传输、渲染3个方面提升Web前端性能
什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情: 输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...
随机推荐
- Django的设计模式
MVC模式 MVC将应用程序分解为三个组成部分:mode(模型).view(视图).control(控制器),其中: M 管理应用程序的状态(通常存储到数据库中),并榆树改变状态的行为(或者叫&quo ...
- Scrapy爬虫实例——校花网
学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地.Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有更高的性能. Scrapy官方定义:Scrapy是用于抓取网 ...
- UVALive 3716 DNA Regions
题目大意:给定两个长度相等的字符串A和B,与一个百分比p%,求最长的.失配不超过p%的区间长度.O(nlogn). 题目比较简单套路,推推式子就好了. 记S[i]表示到下标i一共有多少个失配,就相当于 ...
- bzoj 4310: 跳蚤
Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典 ...
- Cat 跨线程之 TaggedTransaction 用法和原理分析
代码 package com.dianping.cat.message.internal; import com.dianping.cat.Cat; import com.dianping.cat.m ...
- Quartz.Net 使用
Quartz.NET 是一套很好的任务调度框架. 下面介绍如何使用: 在项目Nuget包管理器中搜索:quartz 安装后会添加如下dll: <packages> <package ...
- vmstat 命令详解
作用:vmstat 的含义为显示虚拟内存状态(virtual memor statics),但是它可以报告关于进程,内存,I/O 等系统整体运行状态 选项: -a 显示活动内页 -f 显示启动后创建的 ...
- JMeter数据库操作详解
Jmeter提供了JDBC连接的插件,通过执行SQL语句的java API,实现对数据库的访问和查询,同时可以操作一次向数据库插入上百条上千条数据. 一.安装驱动包 将需要连接JDBC的jar包放入j ...
- 【http转https】其之三 IIS_URL重写_http重定向到https
IIS_URL重写_http重定向到https 文:铁乐猫 2016年1月14日 IIS7以上支持URL Rewrite这个模块了,所以在我们做好了ssl证书这一块之后, 要对来自http的请求重定向 ...
- oracle 导入 dmp
执行命令 imp his/his@orcl File=/home/oracle/core_his50_common.dmp FULL=Y