dpdk

OpenVSwitch 硬件加速浅谈

喜欢而已 提交于 2020-12-25 02:39:01
https://zhuanlan.zhihu.com/p/57870521 本文首发SDNLAB。 现代的虚拟化技术使得开发和部署高级网络服务变得更加简单方便。基于虚拟化的网络服务,具有多样性,低成本,易集成,易管理,低持有成本等优点。而虚拟交换机已经成为了一个高度虚拟化环境不可缺少的一部分。OpenVSwitch是所有虚机交换机中的佼佼者,广泛被各种SDN方案采用。 OpenVSwitch kernel datapath -- OpenVSwitch是一个实现了OpenFlow的虚拟交换机,它由多个模块组成。主要有位于用户空间的ovsdb-server和ovs-vswitchd进程,和位于内核空间的OVS datapath组成。在一个SDN架构中,Controller将各种网络拓扑,网络功能转换成OVS的数据和OpenFlow规则,分别下发给ovsdb-server和ovs-vswitchd进程,OpenFlow规则可以通过ovs-ofctl dump-flows查看。 网络数据的转发,都是由位于内核空间的OVS datapath完成。用户空间和内核空间的信息是怎么同步的?对于一个网络数据流,第一个数据包到达OVS datapath,这个时候的datapath没有转发信息,并不知道怎么完成转发。接下来OVS datapath会查询位于用户空间的ovs-vswitchd进程。ovs

docker构建dpdk运行环境镜像

China☆狼群 提交于 2020-12-19 02:43:47
构建dpdk运行环境 编写Dockerfile文件 FROM debian:stretch MAINTAINER yanhai<yh@chinabluedon.cn> COPY sources.list /etc/apt/ COPY dpdk-18.11.tar.xz /opt/ # 解压xz格式的文件,需要先安装xz-utils RUN apt-get update && \ apt-get install -y xz-utils && \ apt-get install -y gcc make && \ apt-get install -y libnuma-dev && \ apt-get install -y libpcap-dev && \ rm -rf /var/lib/apt/lists/* # 关闭掉一些编译开关,因为我们不需要这些功能,打开会由于某些原因编译失败 # 如果使能PMD_PCAP,需要先安装libpcap开发包 RUN cd /opt && tar -xf dpdk-18.11.tar.xz && \ cd dpdk-18.11 && \ export RTE_SDK=/opt/dpdk-18.11 && \ export RTE_TARGET=x86_64-native-linuxapp-gcc && \ sed -i 's/CONFIG_RTE

What's the RSS filter function?

一世执手 提交于 2020-12-15 05:15:12
问题 I'm looking some doc about RSS filter funciton. NIC is Intel I210 and driver is e1000. I found some functions about RSS filter. Like: eth_igb_start => igb_filter_restore => igb_rss_filter_restore => igb_config_rss_filter igb_config_rss_filter will write RSS configure(rss reta, rss key and rss protocol) to NIC register. My question is what's the different between igb_config_rss_filter and igb_rss_configure? Can you share some doc about DPDK filter? Thanks 回答1: igb_config_rss_filter is used by

What's the RSS filter function?

守給你的承諾、 提交于 2020-12-15 05:15:01
问题 I'm looking some doc about RSS filter funciton. NIC is Intel I210 and driver is e1000. I found some functions about RSS filter. Like: eth_igb_start => igb_filter_restore => igb_rss_filter_restore => igb_config_rss_filter igb_config_rss_filter will write RSS configure(rss reta, rss key and rss protocol) to NIC register. My question is what's the different between igb_config_rss_filter and igb_rss_configure? Can you share some doc about DPDK filter? Thanks 回答1: igb_config_rss_filter is used by

linux多线程下的fwrite和write使用详解

ぃ、小莉子 提交于 2020-12-11 23:59:25
Linux下的文件操作,有人喜欢用C库的文件流操作,有人喜欢用Linux的原生的系统调用。一般来说,C库的文件操作会更高效一些,因为C库自己做了文件缓存的处理。今天,主要研究多线程下的fwrite与write,每个线程都对相同的FILE*或者fd进行写操作,看看结果是否为预期行为。 第一种情况:使用C库的fwrite,其线程的实现如下: 第二种情况:使用系统调用write,其线程的实现如下: 下面看主线程的实现: 其中LOOPS定义为1000000。也就是说,线程1~3分别写入"aaaaaa\n",“bbbbbb\n”,和"cccccc\n"各一百万次。如果写入文件的操作是“线程安全”的,那么最终的文件行数应该是3百万行,且每行只可能是"aaaaaa"、“bbbbbb”、和"cccccc"的一种。 【文章福利】需要C/C++ Linux服务器架构师学习资料加群812855908(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等) 接下来看测试结果: 1、定义了宏USE_CLIB,即使用C库的fwrite,其结果如下: 2、注释掉红USE_CLIB,即直接使用系统调用write,其结果如下:

Forward packets between SR-IOV Virtual Function (VF) NICs

两盒软妹~` 提交于 2020-12-07 15:45:07
问题 I have an Intel 82599ES 10G NIC which supports Intel SR-IOV. I have successfully created 8 virtual functions (VF) of it and assigned to 2 qemu/kvm VMs (2 VFs per each VM). Both of the VMs run DPDK applications (warp17 on one and my custom application on other) using assigned VFs. What I need to do is test my custom DPDK application by sending traffic through it using warp17. My test setup looks like this, The red arrow represents the traffic path. My Physical NIC (PF) use dpdk poll mode

Forward packets between SR-IOV Virtual Function (VF) NICs

假如想象 提交于 2020-12-07 15:43:21
问题 I have an Intel 82599ES 10G NIC which supports Intel SR-IOV. I have successfully created 8 virtual functions (VF) of it and assigned to 2 qemu/kvm VMs (2 VFs per each VM). Both of the VMs run DPDK applications (warp17 on one and my custom application on other) using assigned VFs. What I need to do is test my custom DPDK application by sending traffic through it using warp17. My test setup looks like this, The red arrow represents the traffic path. My Physical NIC (PF) use dpdk poll mode

VFIO —将 DMA 映射暴露给用户态

左心房为你撑大大i 提交于 2020-12-05 17:57:35
来自:ggaaooppeenngg链接:https://ggaaooppeenngg.github.io/zh-CN/2017/06/05/VFIO-——将-DMA-映射暴露给用户态/ 在开始之前我们先要说一个东西就是 DMA,直接让设备访问内存,可以不通过 CPU 搬运数据。 这是一个比较简单的体系结构图,设备 和 CPU 通过存储控制器访问存储器。一个简单的 case 是 CPU 向存储器写数据,然后设备从存储器读数据。这么快来一切都很正常。但是实际上 CPU 是有一层缓存的,例如下面这样的。 CPU 想内存写数据,但是先要清空到不一致的缓存,然后设备再去读数据,不然设备读到的数据和 CPU 实际的数据会不一致(因为缓存里的数据可能和存储器的不一致),而且实际上缓存也不只是一层,所以需要一个中间层来保证 从 CPU 的角度和从设备的角度内存都是一致的,所以就有了下面这个结构。 CPU 和 设备都会走缓存验证一遍以后,再落到存储器上,这样带上缓存以后大家的一致性都是一样的了。所以从设备的角度,设备也拥有了缓存,实际上这个和 IOMMU 关系不是很大,接下来设备其实也可以和 CPU 一样有一层 MMU,也就是地址到存储器物理地址的转换。注意,这里我用了地址,因为对 CPU 来说是虚拟地址,但是对设备来说是一个总线域的地址。这里要明确区分一下,一个是总线地址,是从设备的角度来看的

DPDK 网络数据包转发处理

故事扮演 提交于 2020-11-24 08:24:12
https://www.intel.cn/content/www/cn/zh/communications/data-plane-development-kit.html https://www.dpdk.org/ 软件简介 Intel® DPDK 全称 Intel Data Plane Development Kit,是 Intel 提供的数据平面开发工具集,为 Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。目前已经验证可以运行在大多数Linux操作系统上,包括FreeBSD 9.2、Fedora release18、Ubuntu 12.04 LTS、RedHat Enterprise Linux 6.3和Suse EnterpriseLinux 11 SP2等。DPDK使用了BSDLicense,极大的方便了企业在其基础上来实现自己的协议栈或者应用。 需要强调的是,DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。 总体结构 主要有以下几个核心 网络层模块

DPDK(二):准备知识9 --- Linux内核收报流程

不问归期 提交于 2020-11-16 05:26:03
原文:https://segmentfault.com/a/1190000008836467 原文讲的很好,描述了大体的流程。 第一步:网卡到内存 网卡需要有驱动才能工作,驱动是加载到内核中的模块,负责衔接网卡和内核的网络模块,驱动在加载的时候将自己注册进网络模块,当相应的网卡收到数据包时,网络模块会调用相应的驱动程序处理数据。 1: 数据包从外面的网络进入物理网卡。如果目的地址不是该网卡,且该网卡没有开启混杂模式(是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它,混杂模式是为网络分析而提供的),该包会被网卡丢弃。 2: 网卡将数据包通过DMA的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化。注: 老的网卡可能不支持DMA,不过新的网卡一般都支持。 3: 网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了。 4:CPU根据中断表,调用已经注册的中断函数,这个中断函数会调到驱动程序(NIC Driver)中相应的函数。 5: 驱动先禁用网卡的中断,表示驱动程序已经知道内存中有数据了,告诉网卡下次再收到数据包直接写内存就可以了,不要再通知CPU了,这样可以提高效率,避免CPU不停的被中断。 6: 启动软中断。这步结束后,硬件中断处理函数就结束返回了。由于硬中断处理程序执行的过程中不能被中断,所以如果它执行时间过长,会导致CPU没法响应其它硬件的中断