DCF简介

2023-10-12 15:40
文章标签 简介 dcf

本文主要是介绍DCF简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方蓝字

关注我们吧

作者:李晓云;王海跃;邢蓓蕾(按姓氏排名)

一、DCF的诞生背景

在虚拟化网络应用中,I/O虚拟化是虚拟化技术的重要组成部分。相比纯虚拟化和半虚拟化,PCIe的SRIOV和Intel 的VT-d技术结合为高性能虚拟化I/O提供了方案。现在大部分主流网卡都已经支持了SR-IOV技术。SR-IOV规范引入了两个新的PCIe Function类型:PF(Physical Function)和VF(Virtual Function,虚拟功能)。可以在PF上生成VF,每个VF接口都有其独立的PCIe通道,每个虚拟机可占用一个或多个VF接口,这样虚拟机就可以直接访问自己的VF接口,而不需要Hypervisor的参与,从而大幅提升网络吞吐性能。

而随着SDN 和NFV技术的不断发展及吞吐性能的要求,越来越多的VNF(Virtual Network Function)基于SRIOV VF来开发。DPDK作为VNF的开发基础套件,其VF的Polling Mode正在被广泛使用, 同时PF作为配置面和管理面仍被首选使用Kernel Driver来控制。

Intel网卡一般的工作模式是PF driver 来访问/控制硬件资源,虚机中VF 所获得的资源则有PF 来分配。VF获得资源的渠道有两种:

  1. 可由虚机中的VF去配置。除了DMA相关的快速通道直接访问硬件以外,VF申请的资源需要由PF driver来仲裁和代理配置。PF和VF通过硬件提供的通道(Mailbox Queue)进行通信。

  2. 主机侧通过标准配置工具分配,比如Linux 系统中的ip link, tc 等。

随着产品的更新迭代,新一代Intel网卡(800 系列)提供了越来越多的灵活功能可以用来加速VNF,比如DDP (Dynamic Device Personalization),QoS等。这时标准的Linux tool缺乏相应的接口来控制。而DPDK作为Network Function开发的基础,拥有丰富的接口。那是不是可以由DPDK来完成这部分配置呢?

如果DPDK完成,脱离了Linux的标准接口,利用设备的配置空间以及User Space Driver的框架,是不是可以来控制硬件呢?答案是肯定的,这就是下面要讲的DCF(Device Config Function)。

二、DCF简介

DCF(Device Config Function)是设备控制功能,可以理解为升级版的可信VF(trust VF)。目前支持将Intel E800系列网卡的每个端口的可信VF 0设置为DCF,为该端口的其他VF配置如Switch,ACL之类的流表规则。在此之前,没有灵活可扩展的途径可以通过VF配置Switch,ACL的流表规则,只能通过如图1中路径2,由TC Flower之类的工具通过PF配置一些简单的协议规则。

图1: DCF示意图

如图1中路径1所示,在NFV环境下,远端的VIM(Virtualized Infrastructure Manager)通过向用户空间的DCF PMD配置规则,实现对于虚拟机中使用的VF的流表规则的配置。在这个过程中,PF的内核驱动负责管理DCF,包括赋予以及回收DCF的权限,为DCF提供一些必要的准备信息,以及DCF的正常/异常退出之后的现存规则的处理等。而可信VF 0在与PF的Kernel Driver通信,申请到DCF的权限之后,将收到的对于VF设置的规则封装成AdminQ Command的格式,通过Virtual Channel的消息传递给PF,PF收到后会判断Command是否在白名单内,如果在,则直接执行该AdminQ Command到硬件,实现对VF的规则配置。

三、如何使用DCF

如前文所述,DCF实际上就是可信任的VF 0,可以为其他VF提供Switch,ACL之类的流规则配置(DPDK 20.11可支持ACL)。使用DCF,需要Intel E800系列网卡的Kernel Driver和DPDK配合使用,需要内核驱动版本在1.0.4之上,DPDK的版本在20.05以上。

以端口enp24s0f0 (18:00.0)为例,下面是创建DCF,并使用DCF创建规则的具体步骤:

首先,需要创建并启动DCF。

1.为端口生成4个VF

echo 4 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs

2.设置VF 0为可信任的VF

ip link set dev enp24s0f0 vf 0 trust on

3. 将VF 0绑定到DPDK并为其申请DCF权限

./usertools/dpdk-devbind.py -b vfio-pci 18:01.0

./build/app/dpdk-testpmd -l 22-25 -n 4 -w 18:01.0,cap=dcf -- -i

接下来,就可以验证DCF的功能,如图2所示,VF 0是DCF,不管其他VF加载的是DPDK的驱动(VF 1)还是kernel驱动(VF 2),都可以通过DCF创建规则,将流导向它们。

图2: DCF示例图

1.  在DCF中创建规则,将特定的流导向VF 1和VF 2

  • 创建规则1,将所有dst mac是68:05:ca:8d:ed:a8 ,ipv4 src ip是192.168.0.1,ipv4 dst ip是192.168.0.2,tos是4,ttl是3,tcp src port是25,tcp dst port是23的数据包发到VF 1

    testpmd> flow create 0 ingress pattern eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.1 dst is 192.168.0.2 tos is 4 ttl is 3 / tcp src is 25 dst is 23 / end actions vf id 1 / end

  • 创建规则2,将所有outer ipv4 dst ip是192.168.0.1,nvgre tni是8,inner ipv4 src ip是192.168.0.2,inner ipv4 dst ip是192.168.0.3,inner udp src port是50,inner udp dst port是23的tunnel数据包发到VF 2

    testpmd > flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 50 dst is 23 / end actions vf id 1 / end

2. 观察VF 1和VF 2是否可以收到匹配规则的数据包

  • 用DPDK观察VF 1(18:01.1),可以看到匹配上述规则1的数据包都可以被VF 1收到

    ./build/app/dpdk-testpmd -l 22-25 -n 4 -w 18:01.1 -- -i

    testpmd > set fwd rxonly

    testpmd > set verbose 1

    testpmd > start

  • 用tcpdump观察VF 2(enp24s1f2),可以看到匹配上述规则2的数据包都可以被VF 2收到

    tcpdump -e -nn -i enp24s1f2

四、DCF下一步的发展方向

目前,DCF只支持Intel E800系列网卡的每个端口将VF 0作为DCF,用来为其他VF下发Switch,ACL规则。但随着需求的变化和增长,DCF主要有三个方向的发展正在进行中。第一点是未来DCF将支持QoS的功能;第二点是未来将可以指定任意VF作为DCF;最后一点是未来可以存在多个DCF,每个DCF负责一个VF域,为该域中的所有VF配置流规则。

转载须知

DPDK与SPDK开源社区公众号文章转载声明

推荐阅读

CVL网卡的ADQ特性在SPDK的NVMF测试中的应用实例 - 上篇

CVL网卡的ADQ特性在SPDK的NVMF测试中的应用实例 - 下篇

点点“分享”,给我充点儿电吧~

这篇关于DCF简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/196814

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成