
spdk
文章平均质量分 84
DPDK技术员
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OVS 和 OVS-DPDK 对比
OVS 目前有两种比较突出的架构,一种是原生的 OVS 架构(使用 kernel 作为 datapath),一种是基于 DPDK 的架构(使用用户空间作为 datapath)。原创 2022-11-17 16:12:27 · 1256 阅读 · 1 评论 -
DPDK的虚拟交换机框架OvS
DPDK是X86平台报文快速处理的库和驱动的集合,不是 网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。DPDK的优势在于,可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。主要架构如图所示:.传统的socket方式与DPDK对比:DPDK关键技术点:使用大页缓存支持来提高内存访问效率。利用UIO支持,提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间 的,减小了报文在用户空间和应用空间的多次拷贝。利用LINUX亲和性支持,把控制面原创 2022-11-17 16:06:47 · 1013 阅读 · 0 评论 -
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 · 1421 阅读 · 0 评论 -
Intel VMD技术和SPDK VMD驱动模块介绍及使用
如果想要使用VMD技术,首先要确定处理器是英特尔至强可扩展处理器。然后就可以进入到BIOS里配置VMD。下面以英特尔的至强服务器为例子,介绍如何配置VMD。开机后,进入BIOS界面,选择Advanced configuration:然后选择PCI Configuration:然后选择Volume Management Device, 进入如下页面:在这个页面中会出现两种配置情况。...原创 2022-08-27 13:59:54 · 5516 阅读 · 0 评论 -
北京峰会系列三|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 · 178 阅读 · 0 评论 -
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 · 545 阅读 · 0 评论 -
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 · 362 阅读 · 0 评论 -
DPDK内存篇(三)
在PA模式的IOVA中,可用IOVA连续内存量取决于DPDK控制之外的许多因素,尽管DPDK将尝试保留尽可能多的IOVA连续内存,具体取决于可用内存量和系统配置,可能没有足够的IOVA连续内存来满足所有分配。使用DPDK内存管理的所有好处(例如显式NUMA节点局部性,更少的TLB查询失败,对齐等),将适用于使用这些API分配的任何内存。所有内存分配API也是线程安全的,并且因为内存也在所有主进程和辅助进程之间共享,在进程之间传递指针,以及在不同进程中分配或释放内存,是非常安全的。原创 2022-08-25 15:06:00 · 857 阅读 · 0 评论 -
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 · 270 阅读 · 0 评论 -
DPDK内存篇(四)
在18.11中,情况不再如此,因为内存是在运行时以逐页的粒度保留并释放的。这是有关DPDK内存管理功能系列文章的最后一篇,之前的文章集中于介绍DPDK内存管理背后的一般概念,从而深入概述了各种输入输出虚拟地址(IOVA)相关选项,并描述了DPDK 17.11中与内存相关的功能,本文涵盖了有关DPDK内存管理的所有最新的和最重要的知识。同样,不再需要事先知道应用程序的内存需求,DPDK的内存映射可以动态增加和减少,因此DPDK内存子系统可以根据需要自动增加其内存使用量,并在不再需要时将内存返回给系统。原创 2022-08-25 14:54:20 · 703 阅读 · 0 评论 -
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 · 475 阅读 · 0 评论 -
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 · 759 阅读 · 0 评论 -
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 · 170 阅读 · 0 评论 -
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 · 303 阅读 · 0 评论 -
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 · 310 阅读 · 0 评论 -
Barefoot P4加速SDN
2019年6月,英特尔宣布收购一家名为“Barefoot”的公司,旨在帮助英特尔的数据中心部门“更好的应对云数据中心客户的不断变化的各类需求”。很多读者也许并没有听说过Barefoot这个公司。事实上,它的飞速发展已经对诸如博通和英特尔等传统网络交换芯片厂商形成了逼宫之势。...原创 2022-08-26 14:39:36 · 380 阅读 · 0 评论 -
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 · 202 阅读 · 0 评论 -
网络编程的未来,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 · 431 阅读 · 0 评论 -
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 · 312 阅读 · 0 评论 -
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 · 365 阅读 · 0 评论 -
使用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 · 514 阅读 · 0 评论 -
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 · 539 阅读 · 0 评论 -
基于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 · 593 阅读 · 0 评论 -
Rocksdb加SPDK改善吞吐能力建设
为此我们考虑对blobfs原生的IO处理模型进行相应的扩展,来修复以上问题,扩展后的模型如上图右侧所示。另外在blobfs的原生实现里,文件的读取操作是需要加自旋锁来进行同步的,防止数据读取过程中发生文件修改的情况,而rocksdb是不会有该场景发生的,因其文件组织格式sst是不支持modify和append操作的,并且在文件的上层还有Reader引用计数,如果计数不为0(即有读取操作)文件是不允许被删除的,因此我们将该spin_lock从整个读取链路中做了移除。原创 2022-08-23 15:42:02 · 424 阅读 · 0 评论 -
管中窥豹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 · 391 阅读 · 0 评论 -
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 · 3700 阅读 · 0 评论 -
SPDK | 每秒8千万次I/O性能实现
欲阅读更多信息,请访问SPDK主文档页面(https://spdk.io/doc/),特别推荐阅读引言(https://spdk.io/doc/intro.html)和概念(https://spdk.io/doc/concepts.html)两章节。下图显示了SPDK NVMe驱动程序在增加CPU核数量时执行I/O操作时的I/O吞吐量的性能扩展性。此外,SPDK NVMe驱动程序呈线性IOPS可扩展性,因为没有对I/O路径添加锁,且将I/O线程固定在CPU核上,数据得以保留在访问过的CPU的核缓存上。原创 2022-08-23 15:28:03 · 214 阅读 · 0 评论 -
基于DPDK的设备虚拟化框架
有了这两种消费设备的方式后,下图右半部的复合设备框架应运而生,在这个框架下,VMM统一使用VFIO-USER客户端来消费设备,而作为VFIO-USER的服务端,设备提供者进程可以在内部组织一个复合的设备,这个设备具有可配置的数据面,管理员可以选择一个半虚拟化的软件数据面,也可以选择一个直通的硬件数据面。设备的提供者可以根据任意设备标准来定义一个软件设备,而有了这样的软件设备作辅助,virtio不兼容的设备就可以拥有很多云化特性,比如平台无关性与支持热迁移。原创 2022-08-23 15:23:58 · 200 阅读 · 0 评论 -
SPDK动态负载均衡
但是当reactor空闲时,仍会不断轮询,这就造成了资源浪费,同时,可能有别的reactor正在运行超过自身负载的大量工作,如果将忙碌状态的reactor上的一部分线程移动到空闲的reactor上,将大大提高效率。当前线程活跃占比大于SCHEDULER_LOAD_LIMIT时,当前线程的状态为busy,scheduler将会为当前线程找一个最合适的reactor,然后将其移动过去。Main core应尽量处于空闲状态,只有当线程的执行时间超过所有线程空闲时间的总和时,main core才能包含活动线程。原创 2022-08-23 15:18:49 · 205 阅读 · 0 评论 -
SPDK的BPF Tracing
例如,可以输出某个函数每次被调用时的参数,计算某个代码路径被执行的次数,甚至可以创建并显示一组数据的直方图。scripts/bpf/send_msg.bt脚本通过uprobe关键字定义了两个动态探针,分别为send_msg和for_each_channel,将每个函数的调用次数存在映射。这两个变量都提供了更便捷的方法,在不同的应用程序中可使用相同的脚本。BPF追踪由一组bpftrace程序、定义在SPDK库的USDT探针和几个脚本组成,这些脚本能够简化BPF追踪,和常规的SPDK追踪代码结合使用。原创 2022-08-23 15:11:13 · 287 阅读 · 0 评论 -
基于SPDK 加速框架的高性能PMEM Bdev
当SPDK vhost target接管的存储设备都是PCIe SSD的时候,即使主机上有很多个VM,SPDK vhost都可以很好的服务各个VM,因为当VM 要对相应虚拟磁盘进行读写的时候 (无论使用virtio SCSI/blk协议),一旦SPDK vhost接收到命令并且交给底层用户态NVMe驱动进行读写的时候,CPU使用的是异步的接口,从而CPU很快可以进行其他的工作。持久内存设备是比较昂贵的,直接作为SPDK的块设备存放数据,是比较浪费的,不一定满足所有应用的需求。这个弊端是无法建立文件系统。原创 2022-08-22 16:01:43 · 293 阅读 · 0 评论 -
SPDK Trace Log用法简介
要添加新模块的log开关,需要额外注册新的模块的名字,本质上记录和打印log最终也是调用第二章提到的linux日志系统函数。其实质是通过封装的spdk_vlog函数,来调用linux内核的syslog和fprintf函数,具体请参考第3.1.1节的spdk_vlog。我们通常在程序代码中插入一些特殊的输出代码,将程序当前的运行状态按需输出,以便于在无人值守的情况下记录信息,在事后对程序的处理过程进行分析。只有SPDK_DEBUGLOG,需要指定模块名,以便app -L的时候可以筛选该模块的log信息。...原创 2022-08-22 15:59:28 · 465 阅读 · 0 评论 -
AddressSanitizer,增强DPDK内存检测
检测工具会检测进程中的所有位置,通过影子内存的状态值来存储真实内存中的每个字节的访问是否安全,这样的影子内存需要一大块连续的虚拟地址空间,如图1所示蓝色的影子区域(shadow region),在程序初始化的时候申请好这片空间。现有的DPDK已经有内存管理的机制,是通过检测可用内存前后区域是否被修改来判断是否越界,但是现有的DPDK实现只有在rte_free的时候才做内存检测,甚至发生内存问题的时候, 非常少且有效的调试信息输出来帮助定位问题,如果问题带有一定的随机性且很难重现,让人很崩溃。原创 2022-08-22 15:53:51 · 349 阅读 · 0 评论 -
2021SPDK线上论坛 (二)| 基于调度器与中断模式的SPDK能效优化
Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?DPDK开发学习资料、教学视频和学习路线图分享有需要的可以自行添加学习交流q 君羊909332607备注(XMG) 获取。DPDK 学习资料、教学视频和学习路线图 :https://space.bilibili.com/1600631218。2、SPDK调度模块概述。原创 2022-08-22 15:49:54 · 683 阅读 · 0 评论 -
2021 SPDK线上论坛(一) | 针对BSC智能网卡的存储场景和性能分析
Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?DPDK开发学习资料、教学视频和学习路线图分享有需要的可以自行添加学习交流q 君羊909332607备注(XMG) 获取。DPDK 学习资料、教学视频和学习路线图 :https://space.bilibili.com/1600631218。3、BSC裸金属应用场景。4、BSC虚拟化应用场景。原创 2022-08-22 15:47:30 · 636 阅读 · 0 评论 -
支持非对称命名空间访问的SPDK多路径验证
RPC命令nvmf_subsystem_listener_set_ana_state:通过nvmf_subsystem_set_ana_state( )函数,先找到指定的listener,改完ANA state以后,再在每一个I/O 通道上通知更新poll group。而在failover的情况下,connect_set_failover_cb则会调用bdev_nvme_add_secondary_trid( ),将辅助路径添加到现有nvme_ctrlr路径队列用以进行故障切换,也就是一次入队操作。原创 2022-08-22 15:45:23 · 432 阅读 · 0 评论 -
Intel Scalable IOV介绍及应用实例
另一种是使用内存映射,即图中的fast path:把VDEV映射到user space,建立MMU或者EPT页表,实现HVA(Host Virtual Address)或者GPA(Guest Physical Address)到HPA(Host Physical Address)的转换。设备驱动通过VFIO的mdev_get_iommu_domain() 接口和IOMMU的iommu_aux_get_pasid()接口获得VDEV所在的IOMMU domain和VDEV绑定的PASID.原创 2022-08-22 15:40:34 · 1938 阅读 · 0 评论