编程
文章平均质量分 89
DPDK技术员
这个作者很懒,什么都没留下…
展开
-
生产环境中负载均衡产品DPDK问题的解决
但是这一个分片报文就很异常,报文的总长度是20,也就是说只有一个IP头,后面不再携带任何信息,这样的报文是没有任何意义的。值得一提的是,ULB4的高可用集群架构在本次问题的处理过程中发挥了重要作用,在一台不可用的时候,集群中其他机器也可以继续为用户提供可靠服务,有效提升了用户业务的可靠性。(从整个报文的交互来看,这一片报文本来是设置了不可分片的TCP报文,但是在经过某个公网网关后被强制设定了允许分片,并且分片出了这种异常的形式。队列满,而且后面的报文一直加不进去,说明此时队列里面的报文一直卡在那。原创 2022-09-01 19:58:55 · 523 阅读 · 0 评论 -
DPDK内存篇(一): 基本概念
对于NUMA来说,所有内存都是不同的:某一个CPU对一些内存的访问(如不在该CPU所属NUMA NODE上的内存)将比其他内存访问花费更长的时间,这是由于它们相对于执行所述内存访问的CPU所在的物理位置不同。因此,由于两个进程中的所有内容都位于相同的地址,指向DPDK内存对象的任何指针都将跨进程工作,无需任何地址转换。然而,TLB的大小有限,而且实际上非常小,和DPDK通常处理的数据量(有时高达几十GB)比起来,在任一给定的时刻,4KB 标准页面大小的TLB所覆盖的内存量(几MB)微不足道。...原创 2022-08-31 15:13:08 · 497 阅读 · 0 评论 -
在虚拟机上部署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 · 408 阅读 · 0 评论 -
DPDK以太网部分代码整理
总体流程如图所示,初始化时配置设备和队列,运行时通过rte_eth_tx_burst和rte_eth_rx_burst来收发包。原创 2022-08-31 14:48:35 · 1662 阅读 · 0 评论 -
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 · 1606 阅读 · 0 评论 -
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 · 514 阅读 · 0 评论 -
DPDK memory学习
自定向下分别是物理内存,memzone,mempool和pktmbuf。原创 2022-08-30 17:02:34 · 790 阅读 · 0 评论 -
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 · 1504 阅读 · 0 评论 -
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 · 1023 阅读 · 0 评论 -
数据面最流行的工具包dpdk的前世-现在和未来
数据平面开发套件(DPDK)软件是一组用户空间库和驱动程序,可加速在所有主要CPU架构上运行的数据包处理工作负载。由Intel大约10年前创建,现在是Linux基金会旗下的开源项目之一。从企业数据中心到公共云的环境,尤其是在电信网络中, DPDK在推动高性能通用CPU的使用方面都起了重大作用。DPDK是什么DPDK是Linux基金会托管的一个开源项目。...原创 2022-08-30 16:36:26 · 1157 阅读 · 0 评论 -
DPDK 网卡设备scan及probe流程
本文只是简单介绍了网卡设备及PMD驱动的探测,并且实例化网卡设备;利用igb_uio驱动将网卡设备的IO及中断资源映射到用户态。但是对eth_i40e_pci_probe()函数还需要深入研究.原创 2022-08-30 16:33:27 · 870 阅读 · 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 · 262 阅读 · 0 评论 -
DPDK内存篇(四)
在18.11中,情况不再如此,因为内存是在运行时以逐页的粒度保留并释放的。这是有关DPDK内存管理功能系列文章的最后一篇,之前的文章集中于介绍DPDK内存管理背后的一般概念,从而深入概述了各种输入输出虚拟地址(IOVA)相关选项,并描述了DPDK 17.11中与内存相关的功能,本文涵盖了有关DPDK内存管理的所有最新的和最重要的知识。同样,不再需要事先知道应用程序的内存需求,DPDK的内存映射可以动态增加和减少,因此DPDK内存子系统可以根据需要自动增加其内存使用量,并在不再需要时将内存返回给系统。原创 2022-08-25 14:54:20 · 608 阅读 · 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 · 234 阅读 · 0 评论 -
Barefoot P4加速SDN
2019年6月,英特尔宣布收购一家名为“Barefoot”的公司,旨在帮助英特尔的数据中心部门“更好的应对云数据中心客户的不断变化的各类需求”。很多读者也许并没有听说过Barefoot这个公司。事实上,它的飞速发展已经对诸如博通和英特尔等传统网络交换芯片厂商形成了逼宫之势。...原创 2022-08-26 14:39:36 · 310 阅读 · 0 评论 -
SPDK动态负载均衡
但是当reactor空闲时,仍会不断轮询,这就造成了资源浪费,同时,可能有别的reactor正在运行超过自身负载的大量工作,如果将忙碌状态的reactor上的一部分线程移动到空闲的reactor上,将大大提高效率。当前线程活跃占比大于SCHEDULER_LOAD_LIMIT时,当前线程的状态为busy,scheduler将会为当前线程找一个最合适的reactor,然后将其移动过去。Main core应尽量处于空闲状态,只有当线程的执行时间超过所有线程空闲时间的总和时,main core才能包含活动线程。原创 2022-08-23 15:18:49 · 144 阅读 · 0 评论 -
从SPDK Blobstore到 Blob FS
前言SPDK通过绕过内核(kernel bypass)的方案,构筑了用户态驱动,并利用异步轮询、无锁机制等,极大地提升了I/O性能。然而,正因为采用了kernel bypass的设计,使得原本内核中的文件系统不能使用。因此,SPDK提供了Blobstore用来支持上层存储服务,并基于此封装了Blob FS(Blob Filesystem)文件系统。当前Blob FS实现了对RocksDB的集成测试(对RocksDB的集成可参考[1]),由于前文[2]已经对Blobstore和Blob FS做过一些介绍,本文原创 2022-08-22 15:37:33 · 190 阅读 · 0 评论 -
用户态虚拟化IO通道实现概览及实践(下)
2)在spdk_nvmf_tgt_new_qpair的调用流程中执行nvmf_vfio_user_poll_group_add函数,该函数中主动填充了一个SPDK_NVMF_FABRIC_COMMAND_CONNECT的fabric命令的请求交给spdk_nvmf_request_exec_fabrics来处理,并在命令完成后的回调函数handle_queue_connect_rsp中注册周期轮询的poller函数vfio_user_poll_vfu_ctx,处理针对模拟设备的配置空间相关访问请求。原创 2022-08-22 15:34:40 · 503 阅读 · 0 评论 -
用户态虚拟化IO通道实现概览及实践(上)
自虚拟化技术诞生起,提升虚拟化场景中IO设备性能和驱动的兼容性、可扩展性一直是备受关注和追求的目标。随着半虚拟化技术的出现,virtio设备及驱动也很快流行并逐步变成了虚拟化应用中的主要IO通道形态。例如,virtio现已支持实现的设备涵盖了网络设备(virtio-net)、块设备(virtio-blk)、串口设备在(virtio-console)等等。其后,通过DPDK/SPDK技术加持,virtio技术全用户态化的实现也如火如荼地落地并广泛应用。不仅如此,沿着虚拟IO全用户态化的思路,vfio-user原创 2022-08-22 15:28:49 · 608 阅读 · 0 评论 -
SPDK NVMe-oF多路径结合Delay Bdev使用场景
如果NVMe bdev具有多个命名空间,则NVMe bdev的I/O通道会有一系列的多条I/O路径。SPDK通过相同的NVMe bdev设备名称多次调用bdev_nvme_attach_controller RPC,用户可以在多个不同路径上建立连接到NVMe bdev的同一个NVMe-oF子系统的连接。bdev_nvme_get_io_paths的结果如下所示,结果显示有两条路径,每条路径包含如下信息:bdev_name、cntlid、current、connected和accessible。原创 2022-08-20 14:42:54 · 541 阅读 · 0 评论 -
再探SPDK----使用方法及基础机制概览
再探SPDK----使用方法及基础机制概览 一直以来SPDK作为用户态的存储应用框架,受到了广泛的关注和跟进。本文在之前《初识SPDK》(点击斜体文字,阅读往期文章)的基础上,更进一步从使用、代码目录结构、基础机制和初始化流程的角度对SPDK做了简要的介绍,希望能给大家提供参考。编译依赖的子模块当使用git clone命令从github代码仓库中下载SPDK版本时,可以看到在下载的代码目录下会有一些名如“dpdk”、“isa-l”、“ocf”等的空白目录。无须奇怪,这些目录是SPDK工程所依赖原创 2022-08-20 14:38:23 · 1167 阅读 · 0 评论 -
DPDK Release 22.07
添加了新功能rte_mtr_color_in_protocol_set(), rte_mtr_color_in_protocol_get(), rte_mtr_color_in_protocol_priority_get(), rte_mtr_meter_vlan_table_update(),更新了struct rte_mtr_params 和 struct rte_mtr_capabilities,为了支持计量的基于协议的输入颜色选择。添加了rte_lpm_lookupx4的标量实现。原创 2022-08-20 14:34:22 · 824 阅读 · 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-20 14:26:39 · 223 阅读 · 0 评论 -
SPDK NVMe-oF TCP transport 目前优化的一些工作和方向
SPDK NVMe-oF transport 的实现自19.01正式发布以来,差不多快一年时间。在解决各种软件稳定性问题以及和Linux 内核互操作兼容的同时,也在性能优化方面不断进行一些尝试,这些尝试主要包括软件和硬件方向。在这篇文章中我们会集中讨论软件方面的一些优化方向以及目前SPDK NVMe-oF实现的一些工作(这些尝试最终会反映到SPDK github上的开源代码中)。鉴于很多SPDK NVMe-oF TCP的用户经常反馈一些性能的问题以及询问一些性能优化的方向。为此撰写这篇文章希望能回答一些众多原创 2022-08-20 14:18:47 · 339 阅读 · 0 评论 -
Intel VMD技术和SPDK VMD驱动模块介绍及使用
如果想要使用VMD技术,首先要确定处理器是英特尔至强可扩展处理器。然后就可以进入到BIOS里配置VMD。下面以英特尔的至强服务器为例子,介绍如何配置VMD。开机后,进入BIOS界面,选择Advanced configuration:然后选择PCI Configuration:然后选择Volume Management Device, 进入如下页面:在这个页面中会出现两种配置情况。原创 2022-08-20 14:08:01 · 2153 阅读 · 0 评论 -
SPDK手把手用户态驱动实践
今天给大家带来的是,2019 SPDK 中国峰会上的 SPDK 用户态驱动的实践。希望通过这个分享,可以让大家对SPDK用户态驱动有进一步的认识。原创 2022-08-20 14:03:25 · 604 阅读 · 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-19 14:24:02 · 404 阅读 · 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-19 14:21:59 · 415 阅读 · 0 评论 -
SPDK block device 及其编程的简单介绍
SPDK基于用户态,轮询、异步、无锁的NVMe驱动,封装且提供了一层关于块设备 (bdev) 的库。同时,块设备支持多层抽象与集成从而实现块设备组件 (bdev module) ,因此用户也可以根据自己的需求,编写出需要的bdev module。本文将聚焦于SPDK的块设备层 (bdev layer) 和块设备组件两个部分,并且以bdev raid module 为例,让读者更深入的认识SPDK bdev。原创 2022-08-19 14:19:54 · 616 阅读 · 0 评论 -
Fuzz方法在SPDK iSCSI的应用实例
即如果(4 * total_ahs_len)大于ISCSI_AHS_LEN时,源数据长度超过目标缓冲区长度,返回地址乱了,会导致Segmentation Fault的错误。Fuzz随机生成了一个比较狂野的bhs.total_ahs_len的值,超过了ISCSI_AHS_LEN的范围,暴露了这个问题。接下来,我们要用大量的fuzz输入用例,来模拟填充PDU的主要数据结构,这里重点是填充BHS,以及其中的操作码(opcode)。因为包处理是以PDU为对象的,缺少参数会导致意外的错误,第一步验证条件就被挡住了。原创 2022-08-19 14:15:36 · 1634 阅读 · 0 评论 -
Iostat.py: 输出SPDK Bdev IO子系统性能指标
因此,iostat.py是无法获得SPDK驱动层管理的设备的性能信息的,如果需要在SPDK用户态驱动下,硬件设备的性能指标,可以通过。因此,iostat.py是无法获得SPDK驱动层管理的设备的性能信息的,如果需要在SPDK用户态驱动下,硬件设备的性能指标,可以通过。顾名思义,统计出的是bdev子系统的数据。Iostat.py的原理并不复杂,它请求了SPDK Bdev RPC的bdev_get_iostat接口,获取了一些比较原始的数据,进行计算统计,返回结果。原创 2022-08-19 14:12:14 · 1723 阅读 · 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-19 14:09:10 · 288 阅读 · 0 评论 -
【无标题】
事实上,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-19 14:06:08 · 126 阅读 · 0 评论 -
CVL网卡的ADQ特性在SPDK的NVMF测试中的应用实例 - 下篇
示例中第一个值为786432*4/1024/1024=3G,第二个值为1019584*4/1024/1024=3.9G,第三个值为16777216*4/1024/1024=64G。Dpdk/网络协议栈/ vpp /OvS/DDos/NFV/虚拟化/高性能专家 上课地址: https://ke.qq.com/course/5066203?6.配置NVMe bdev属性执行admin queue轮询异步事件的频率(-p选项),-n指定每次I/O尝试的次数,-a指定当超时(-t选项)采取的行动。原创 2022-08-19 13:59:54 · 519 阅读 · 0 评论 -
ISA-L加速库介绍以及在SPDK中的集成
除了SIMD之外,ISA-L也支持了一些比较“另类”的指令集,比如SHANI,这是为了加速少量数据HASH而设计的,之前说过SHA256的AVX512版本一次处理16个lane的数据,但是但用户一次提交的数据数目过少,或者SIMD计算后只剩下单个或两个过长的buffer没有计算完,SHANI就可以加速这种情况。另外在ISA-L中,为了减少内存的throughput,我们尽量的避免了在算法过程中使用栈,为了代替栈的使用,我们尽量的使用寄存器作为暂存数据(当然这也带来了代码的可读性降低)。原创 2022-08-19 13:56:51 · 419 阅读 · 0 评论 -
SPDK与io_uring新异步IO机制
io_uring自2019年1月初提出后,目前已合入Linux v5.1版本,SPDK也在用户态通用块层(bdev),建立了uring bdev的设备(代码目录:spdk/module/bdev/uring)。像其他存储设备对应的bdev一样,比如HDD, NVMe SSD, Optane SSD等等,可以灵活地将uring bdev配置到对应的应用和服务中。...原创 2022-08-19 13:45:31 · 277 阅读 · 0 评论 -
在SPDK中使能E810网卡ADQ 特性
Intel 网卡中的ADQ特性是一种智能的系统级方法,旨在提高网络I/O性能。ADQ特性的目标是确保高优先级应用程序具有可预期的高性能,并显著降低抖动。ADQ的核心技术是将隔离的硬件网卡队列供某些应用程序进行专有使用。并且希望这些硬件网卡队列可以最佳地连接到所需应用程序中的不同线程。显而易见, 这种方法可以防止专有程序的网络流量与其他应用程序竞争,并且该应用程序的性能(例如,延迟)可以变得可预测。此外开启ADQ特性以后,我们仍然可以对专有应用程序在队列上提供QoS控制。...原创 2022-08-18 14:53:49 · 522 阅读 · 0 评论 -
CVL网卡的ADQ特性在SPDK的NVMF测试中的应用实例 - 上篇
英特尔®最新推出的E810系列网络适配器,通过创新通用功能提高应用程序效率和网络性能,这些功能可优化高性能服务器工作负载,例如NFV,存储,HPC-AI和混合云。本文通过介绍如何利用英特尔®E810网卡的ADQ特性来加速其在存储上的应用。二。...原创 2022-08-18 14:47:39 · 484 阅读 · 0 评论 -
SPDK配置文件从INI到JSON的转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。JSON的优点数据格式比较简单,易于读写,格式都是压缩的,占用带宽小。易于解析这种语言,客户端JavaScript可以简单的通过eval()进行JSON数据的读取(浏览器解析)。...原创 2022-08-18 14:30:44 · 559 阅读 · 0 评论 -
Rocksdb加SPDK改善吞吐能力建设
以上便是我们有关rocksdb吞吐能力建设所做的一些改进和尝试,核心内容主要围绕在如何与SPDK做有效整合,从而实现kernal旁路机制,以及如何通过异步化访问来提升整体吞吐。目前针对随机点读特性功能已成功落地,范围查询,multiget还有反向scan还在陆续开发过程中,期待后续能与大家做更多的分享。0801。...原创 2022-08-18 14:21:28 · 342 阅读 · 1 评论