自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 收藏
  • 关注

原创 OVS 和 OVS-DPDK 对比

OVS 目前有两种比较突出的架构,一种是原生的 OVS 架构(使用 kernel 作为 datapath),一种是基于 DPDK 的架构(使用用户空间作为 datapath)。

2022-11-17 16:12:27 1068 1

原创 DPDK的虚拟交换机框架OvS

DPDK是X86平台报文快速处理的库和驱动的集合,不是 网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。DPDK的优势在于,可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。主要架构如图所示:.传统的socket方式与DPDK对比:DPDK关键技术点:使用大页缓存支持来提高内存访问效率。利用UIO支持,提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间 的,减小了报文在用户空间和应用空间的多次拷贝。利用LINUX亲和性支持,把控制面

2022-11-17 16:06:47 846

原创 生产环境中负载均衡产品DPDK问题的解决

但是这一个分片报文就很异常,报文的总长度是20,也就是说只有一个IP头,后面不再携带任何信息,这样的报文是没有任何意义的。值得一提的是,ULB4的高可用集群架构在本次问题的处理过程中发挥了重要作用,在一台不可用的时候,集群中其他机器也可以继续为用户提供可靠服务,有效提升了用户业务的可靠性。(从整个报文的交互来看,这一片报文本来是设置了不可分片的TCP报文,但是在经过某个公网网关后被强制设定了允许分片,并且分片出了这种异常的形式。队列满,而且后面的报文一直加不进去,说明此时队列里面的报文一直卡在那。

2022-09-01 19:58:55 513

原创 DPDK内存篇(一): 基本概念

对于NUMA来说,所有内存都是不同的:某一个CPU对一些内存的访问(如不在该CPU所属NUMA NODE上的内存)将比其他内存访问花费更长的时间,这是由于它们相对于执行所述内存访问的CPU所在的物理位置不同。因此,由于两个进程中的所有内容都位于相同的地址,指向DPDK内存对象的任何指针都将跨进程工作,无需任何地址转换。然而,TLB的大小有限,而且实际上非常小,和DPDK通常处理的数据量(有时高达几十GB)比起来,在任一给定的时刻,4KB 标准页面大小的TLB所覆盖的内存量(几MB)微不足道。...

2022-08-31 15:13:08 481

原创 在虚拟机上部署SPDK NVME测试案例

正如我们之前在微信中所讨论的在物理机器[1]上使用SoftRoCE部署SPDK NVMe-oF的方法一样,现在,我们将要讨论在虚拟机上使用部署SPDK NVMe测试案例[2]的方法。Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 学习地址: https://ke.qq.com/course/5066203?1.在虚拟机中使用自动测试运行时,如果遇到以下问题,说明虚拟机没有给虚拟机中的大页面分配足够的内存,则需要在虚拟机创建时分配更多内存,如12288KB。...

2022-08-31 15:07:25 394

原创 DPDK以太网部分代码整理

总体流程如图所示,初始化时配置设备和队列,运行时通过rte_eth_tx_burst和rte_eth_rx_burst来收发包。

2022-08-31 14:48:35 1629

原创 DPDK的VFIO

VFIO是一种设备直通方案,可以在用户态直接通过VFIO驱动访问硬件。相比UIO,VFIO有IOMMU的保护,非特权用户也可以直接使用,还提供了更多的中断支持。可以使用MMIO寄存器,通过PCI的配置空间来访问。主要由3部分组成,group,device,iommu(对应container)。vfio一般用于绑定VF,PF拥有完全的配置资源,可用于配置VF。图中的PF和所有VF共享PCIe端口的带宽.VF不支持IO空间,需要映射到系统内存。...

2022-08-31 14:43:05 1550

原创 DPDK中Ring的优先级反转问题

a. 手写ring buffer,可以参考linux的ring buffer实现,比如https://lwn.net/Articles/340443/。注意linux的ring buffer或自己实现的ring,一般不是sync的,有可能出现这边push了,对端还不能pop的情况。b. C++ boost库的boost::lockfree::queue实现,boost库的ring是sync的,也就是push到ring返回后,对端一定可以pop。...

2022-08-31 14:39:42 511

原创 DPDK&VPP关键技术文档总结

Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 学习地址: https://ke.qq.com/course/5066203?(https://blog.csdn.net/shaoyunzhe/article/category/6538239),DPDK和vpp的文章都挺多了,不是源码解读,主要是使用方面。13、vfio 和UIO 区别 https://www.cnblogs.com/yi-mu-xi/p/10515609.html。7、如何在DPDK 盒子上使用TRex。.

2022-08-30 17:04:52 997

原创 DPDK memory学习

自定向下分别是物理内存,memzone,mempool和pktmbuf。

2022-08-30 17:02:34 778

原创 DPDK的几种buffer分配方式

在使用DPDK时,我们一般会用mbuf作为buffer,从mempool中分配。其实我们还可以直接用mempool的block作为buffer,或者memzone的block作为buffer,以及用rte_malloc的heap区作为buffer。但mbuf可以发送到以太网,其他方式分配的buffer,没有mbuf header,不能发送到网络。...

2022-08-30 16:58:26 1494

原创 数据面最流行的工具包dpdk的前世-现在和未来

数据平面开发套件(DPDK)软件是一组用户空间库和驱动程序,可加速在所有主要CPU架构上运行的数据包处理工作负载。由Intel大约10年前创建,现在是Linux基金会旗下的开源项目之一。从企业数据中心到公共云的环境,尤其是在电信网络中, DPDK在推动高性能通用CPU的使用方面都起了重大作用。DPDK是什么DPDK是Linux基金会托管的一个开源项目。...

2022-08-30 16:36:26 1139

原创 DPDK 网卡设备scan及probe流程

本文只是简单介绍了网卡设备及PMD驱动的探测,并且实例化网卡设备;利用igb_uio驱动将网卡设备的IO及中断资源映射到用户态。但是对eth_i40e_pci_probe()函数还需要深入研究.

2022-08-30 16:33:27 851

原创 DPDK网卡多队列

网卡多队列,顾名思义,也就是传统网卡的DMA队列有多个,网卡有基于多个DMA队列的分配机制。多队列网卡已经是当前高速率网卡的主流。Linux内核中,RPS(Receive Packet Steering)在接收端提供了这样的机制。...

2022-08-27 14:43:23 903

原创 DPDK vhost-user详解

在软件实现的网络I/O半虚拟化中,vhost-user在性能、灵活性和兼容性等方面达到了近乎完美的权衡。虽然它的提出已经过了四年多,也已经有了越来越多的新特性加入,但是万变不离其宗,那么今天就从整个vhost-user数据通路的建立过程,以及数据包传输流程等方面详细介绍下vhost-user架构,本文基于DPDK 17.11分析。vhost-user的最好实现在DPDK的vhost库里,该库包含了完整的virtio后端逻辑,可以直接在虚拟交换机中抽象成一个端口使用。...

2022-08-27 14:11:15 1234

原创 Virtio网络的演化之路

对比最原始的virtio网络实现,控制平面在原有的基础上转变为vhost协议定义的ioctl操作(对于前端而言仍是通过PCI传输层协议暴露的接口),基于共享内存实现的Vring转变为virtio-net与vhost-net共享,数据平面的另一方转变为vhost-net,并且前后端通知方式也转为基于eventfd的实现。1. 特性协商:virtio的特性与vhost-user新定义的特性都可以通过类似的方式协商,而所谓协商的具体实现就是QEMU接收vhost-user的特性,与自己支持的特性取交集。.....

2022-08-27 14:01:16 418

原创 Intel VMD技术和SPDK VMD驱动模块介绍及使用

如果想要使用VMD技术,首先要确定处理器是英特尔至强可扩展处理器。然后就可以进入到BIOS里配置VMD。下面以英特尔的至强服务器为例子,介绍如何配置VMD。开机后,进入BIOS界面,选择Advanced configuration:然后选择PCI Configuration:然后选择Volume Management Device, 进入如下页面:在这个页面中会出现两种配置情况。...

2022-08-27 13:59:54 4688

原创 Barefoot P4加速SDN

2019年6月,英特尔宣布收购一家名为“Barefoot”的公司,旨在帮助英特尔的数据中心部门“更好的应对云数据中心客户的不断变化的各类需求”。很多读者也许并没有听说过Barefoot这个公司。事实上,它的飞速发展已经对诸如博通和英特尔等传统网络交换芯片厂商形成了逼宫之势。...

2022-08-26 14:39:36 307

原创 北京峰会系列三|End-to-End Data Protection with SPDK NVMe/TCP Target

Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?3)性能数据对比和分享;今天我们给大家带来的是日立研发经理以及SPDK的Core Maintainer 之一的Shuhei Matsumoto 给我们带来的SPDK对于数据端到端保护支持的分享。DPDK 学习资料、教学视频和学习路线图 :https://space.bilibili.com/1600631218。...

2022-08-25 15:26:06 119

原创 DPDK vhost-user详解

它模拟了一个virtio设备,该设备显示在客户机的特定PCI端口中,客户机可对该端口进行无缝探测和配置,此外,它还将ioeventfd映射到模拟设备的内存映射I / O空间,并将irqfd映射到它的全局系统中断(Global System Interrupt,GSI)。virtio轮询模式驱动(virtio-pmd)是使用PMD API的众多驱动程序之一,为使用DPDK编写的应用程序提供对virtio设备的快速无锁访问,从而提供了使用virtio的virtqueue进行数据包接收和传输的基本功能。...

2022-08-25 15:16:12 428

原创 SPDK block device 及其编程的简单介绍

本文不过是抛砖引玉,带读者初步了解spdk bdev层的大致内容以及编写spdk bdev module的基本方式,若是想更深入的了解spdk的功能或者想用spdk编写出符合复杂需求的bdev module,可以详细的阅读spdk 官方的documentation(https://spdk.io/doc/) 以及参考spdk源码(https://github.com/spdk/spdk)中更多spdk bdev module的实现。用户在使用spdk编程的过程中,通过以上接口,就可以简单的操作一个块设备。

2022-08-25 15:11:49 250

原创 DPDK内存篇(三)

在PA模式的IOVA中,可用IOVA连续内存量取决于DPDK控制之外的许多因素,尽管DPDK将尝试保留尽可能多的IOVA连续内存,具体取决于可用内存量和系统配置,可能没有足够的IOVA连续内存来满足所有分配。使用DPDK内存管理的所有好处(例如显式NUMA节点局部性,更少的TLB查询失败,对齐等),将适用于使用这些API分配的任何内存。所有内存分配API也是线程安全的,并且因为内存也在所有主进程和辅助进程之间共享,在进程之间传递指针,以及在不同进程中分配或释放内存,是非常安全的。

2022-08-25 15:06:00 733

原创 SPDK NVMe-oF TCP transport 目前优化的一些工作和方向

SPDK NVMe-oF transport 的实现自19.01正式发布以来,差不多快一年时间。在解决各种软件稳定性问题以及和Linux 内核互操作兼容的同时,也在性能优化方面不断进行一些尝试,这些尝试主要包括软件和硬件方向。在这篇文章中我们会集中讨论软件方面的一些优化方向以及目前SPDK NVMe-oF实现的一些工作(这些尝试最终会反映到SPDK github上的开源代码中)。鉴于很多SPDK NVMe-oF TCP的用户经常反馈一些性能的问题以及询问一些性能优化的方向。为此撰写这篇文章希望能回答一些众多

2022-08-25 14:57:17 168

原创 DPDK内存篇(四)

在18.11中,情况不再如此,因为内存是在运行时以逐页的粒度保留并释放的。这是有关DPDK内存管理功能系列文章的最后一篇,之前的文章集中于介绍DPDK内存管理背后的一般概念,从而深入概述了各种输入输出虚拟地址(IOVA)相关选项,并描述了DPDK 17.11中与内存相关的功能,本文涵盖了有关DPDK内存管理的所有最新的和最重要的知识。同样,不再需要事先知道应用程序的内存需求,DPDK的内存映射可以动态增加和减少,因此DPDK内存子系统可以根据需要自动增加其内存使用量,并在不再需要时将内存返回给系统。

2022-08-25 14:54:20 600

原创 DPDK PMD for PCIe Non-Transparent Bridge

DPDK 19.08利用Doorbell和Scratchpad寄存器设计了两个系统上NTB设备的协商过程,实现了基本的NTB rawdev PMD. DPDK 19.11在此基础上设计了一个高效的ring,实现了两个系统的高速数据传输,可以达到16GB/s的传输速度。Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?链接,直达峰会分享,搜索"NTB"。...

2022-08-25 14:49:37 327

原创 AF_XDP PMD in DPDK

它可以看作是XDP的用户态接口,应用程序需要事先将定制的XDP程序绑定到对应的网卡上,XDP程序在内核网卡驱动中会预先处理网卡收到的网络报文,它会将报文发送到一个在用户态可以读写的共享内存(UMEM)当中,应用程序可以直接利用AF_XDP socket来接收数据,在UMEM中完成对网络报文的读写。Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?

2022-08-25 14:44:33 533

原创 SPDK手把手用户态驱动实践

Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?DPDK 学习资料、教学视频和学习路线图 :https://space.bilibili.com/1600631218。今天给大家带来的是,2019 SPDK 中国峰会上的 SPDK 用户态驱动的实践。希望通过这个分享,可以让大家对SPDK用户态驱动有进一步的认识。

2022-08-24 15:32:16 110

原创 Linux开源存储全栈详解:从Ceph到容器存储

本书致力于帮助读者形成有关Linux开源存储世界的细致的拓扑,从存储硬件、Linux存储堆栈、存储加速、存储安全、存储管理、分布式存储、云存储等各个角度与层次展开讨论,同时对处于主导地位的、较为流行的开源存储项目进行阐述,包括SPDK、ISA-L、OpenSDS、Ceph、OpenStack Swift与Cinder、容器存储等。本书内容基本不涉及具体源码,主要围绕各个项目的起源与发展、实现原理与框架、要解决的网络问题等方面展开讨论,致力于帮助读者对Linux开源存储技术的实现与发展形成整体清晰的认识。

2022-08-24 15:29:50 1184

原创 SPDK 应用编程框架

在Reactor的while循环中,它会不停的check这些Poller的状态,进行相应的调用,用户的函数也因此可以进行相应的调用。较之内核(诸如Linux Kernel) 的NVMe驱动,它可以大幅度降低NVMe command的延迟 (Latency) ,同时提高单CPU核的IOPS,从而形成一套高性价比的解决方案,例如使用SPDK的vhost解决方案可以应用于HCI (Hyper Converged Infrastructure) 加速虚拟机中的NVMe I/O。

2022-08-24 15:27:49 214

原创 SPDK Block Device及其编程的简单介绍(二):初始化

SPDK中的bdev modules是顺序初始化的,且有的module是依次完成初始化,有的module是采用异步初始化,即不等待其完成初始化,先继续其他的bdev module的初始化;等到这最终的初始化完成之后,ftl会通过函数spdk_bdev_module_init_done()告知g_bdev_mgr,之后g_bdev_mgr会检查是否所有的bdev module都已初始化,如果没有则会继续等待其余的异步操作完成;另外,本文所讲的初始化不涉及RPC。

2022-08-24 15:25:39 215

原创 Fuzz方法在SPDK iSCSI的应用实例

但是用fuzz来模拟填充各种BHS结构体的字段内容,就能进入更多的其他代码分支,就能发现更多潜在的问题。同样地,可以再扩大fuzz的范围,来模拟填充更多PDU结构体的字段,这样会覆盖更多的代码分支。模糊测试的技巧在于,它是不符合逻辑的。Fuzz随机生成了一个比较狂野的bhs.total_ahs_len的值,超过了ISCSI_AHS_LEN的范围,暴露了这个问题。接下来,我们要用大量的fuzz输入用例,来模拟填充PDU的主要数据结构,这里重点是填充BHS,以及其中的操作码(opcode)。

2022-08-24 15:18:52 130

原创 网络编程的未来,io_uring?

前言熟悉Linux网络或者存储编程的开发人员,对于libaio [1] (Linux-native asynchronous I/O) 应该并不太陌生。Libaio提供了一套不同于POSIX接口的异步I/O接口,其目的是更加高效的利用I/O设备。在最近几年的过程中,有很多Linux 开发人员试图去优化libaio相关的实现,但是收效甚微。于是Jens [2] 开发了一套新的异步编程接口io_uring [3] ,主要是为了替代libaio,目前主要应用在存储的场景中。相比使用libaio,在存储中使用io_

2022-08-24 15:14:49 310

原创 Iostat.py: 输出SPDK Bdev IO子系统性能指标

因此,iostat.py是无法获得SPDK驱动层管理的设备的性能信息的,如果需要在SPDK用户态驱动下,硬件设备的性能指标,可以通过。在使用之前,请确保SPDK Bdev层的RPC启动之后(如果RPC地址和端口不为默认的地址和端口,则需要指定相应的参数),iostat.py才能正常工作。Iostat.py的原理并不复杂,它请求了SPDK Bdev RPC的bdev_get_iostat接口,获取了一些比较原始的数据,进行计算统计,返回结果。

2022-08-24 15:12:11 223

原创 SPDK与io_uring新异步IO机制

这里体现的是SPDK用户态驱动的Scale Up的能力,当CPU Core的处理没有达到上限的时候,整体的IOPS会随着NVMe SSD数量的增加而线性增加。如果我们不考虑CPU Core的使用和限制,从打满单个NVMe SSD角度看,即使在libaio异步处理的情况下,同样可以占用多个CPU Core,分配多个FIO jobs,设置比较高的队列深度,比如常规的 4 jobs * 64队列深度/job,也通常可以把单个NVMe SSD打满。图4:io_uring的优化。

2022-08-24 15:10:33 266

原创 使用SPDK lib搭建自己的NVMe-oF Target应用

事实上,SPDK不仅仅提供APP,还提供用户态driver和lib,因此用户也可以根据实际的需求选择直接用我们的APP,还是用SPDK提供的lib自己开发,nvmf example就提供了一个这样的平台,展示如何使用SPDK lib 实现自己的nvmf。”),在20.01版本中,我们增加了NVMe-oF example(下文简写为nvmf)进一步展示它的实现(代码位于 spdk_dir/examples/nvmf/),方便用户的理解和使用,包括搭建自己的NVMe-oF Target应用。

2022-08-24 15:08:31 416

原创 DPDK Rx flexible descriptor 在Intel E810 网卡中的使用

由于硬件限制,传统的descriptor的格式是固定的,在任何应用场景下,面对不同的协议,其内容都是一致的。这些profile都有对应的RXDID,网卡硬件通过由软件写入到相应寄存器中的RXDID值来决定要使用的Rx descriptor格式,软件也可根据收到的Rx descriptor中的RXDID字段验证当下所使用的Rx descriptor格式。也就是说,这个flexible descriptor通过硬件提取了接收到的IPv4报文头部的主要信息,而这些信息可以被直接用于后续DPDK PMD的处理中。

2022-08-24 15:06:55 442

原创 基于Intel®E810 的OVS-DPDK VXLAN TUNNEL性能优化

OVS已经支持基本的HW offload框架,OVS内部的flow表示被转化成基于DPDK rte_flow的描述后通过rte_flow_create() API将流表规则下发到硬件,后续OVS接收到的报文将会被硬件打上flow mark标签,OVS可以迅速地从flow mark索引到相应的flow并执行其action。其他通用的软件调优技术同样适用,例如实现封装/解封装的批处理模式,调整队列的长度以控制OVS的memory footprint。

2022-08-23 15:45:50 480

原创 Rocksdb加SPDK改善吞吐能力建设

为此我们考虑对blobfs原生的IO处理模型进行相应的扩展,来修复以上问题,扩展后的模型如上图右侧所示。另外在blobfs的原生实现里,文件的读取操作是需要加自旋锁来进行同步的,防止数据读取过程中发生文件修改的情况,而rocksdb是不会有该场景发生的,因其文件组织格式sst是不支持modify和append操作的,并且在文件的上层还有Reader引用计数,如果计数不为0(即有读取操作)文件是不允许被删除的,因此我们将该spin_lock从整个读取链路中做了移除。

2022-08-23 15:42:02 326

原创 管中窥豹SPDK RBD bdev 模块

针对同一个Ceph的集群的RBD 的使用,一般有两种用法,他们分别是“连接不同的rbd pool中的不同rbd 文件”和“连接同一个rbd pool中的不同rbd 文件”。在最开始的时候, 我们只是隔离了rbd image 以及rados_context 创建的函数。接着对image file的读写,可以采用rbd_aio_read(v)/rbd_aio_write(v)/rbd_aio_flush提交请求, 在SPDK RBD bdev module中采用rbd_poll_io_events来收割请求。

2022-08-23 15:36:15 287

原创 SPDK中常用的性能测试工具

本文主要介绍磁盘性能评估的方法,针对用户态驱动Kernel与SPDK中各种IO测试工具的使用方法做出总结。其中fio是一个常用的IO测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的性能。为了和SPDK的fio工具相区别,我们称之为内核fio。SPDK有自己的IO测试工具,包括fio_plugin,perf和bdevperf。SPDK采用异步I/O(Asynchronous I/O)加轮询(Polling)的工作模式,通常与Kernel的异步I/O作为对比。在此

2022-08-23 15:33:30 3450

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除