SPDK块设备

news2024/10/2 1:41:17

SPDK视角每个App由多个子系统(subsystem)构成,同时每个子系统又包含多个模块(module),子系统和模块的注入都是可插拔的,通过相关的宏定义声明集成到SPDK组件容器里(其中子系统的注入可通过声明SPDK_SUBSYSTEM_REGISTER,块设备模块的注入可通过声明SPDK_BDEV_MODULE_REGISTER)

目前SPDK已支持的子系统包括:accel、bdev、iscsi、nbd、nvmf、scheduler、scsi、sock、vhost、vmd,其中块设备子系统需要依赖accel、sock和vmd

在块设备子系统内部,每个模块都代表了一种块设备类型,目前已支持的块设备类型有:aio、compress、crypto、delay、error、ftl、gpt、iscsi、lvol、malloc、null、nvme、opal、ocf、passthru、pmem、raid、rbd、split、uring、virtio_blk、virtio_scsi、bdev_zoned_block,这里主要看的是NVMe块设备。

子系统及模块的初始化是在App启动阶段进行的(代码参考spdk_app_start及bootstrap_fn),需要初始化的子系统和模块可通过json形式进行声明,比如这里想要引入NVMe块设备

{"subsystems": [{"subsystem": "bdev", 
   "config": [{
      "method": "bdev_nvme_attach_controller",
      "params": {
         "name": "Nvme0",
         "trtype": "pcie",
         "traddr": "0000:0a:00.0"
       }
   }]
}]}

App启动加载完成之后,便可以对NVMe块设备进行访问(基于NVMe用户态驱动)

IO设备注册

SPDK的整个IO链路中,大部分组件都是以IO设备的方式对外提供服务的,为了便于对IO设备进行访问,SPDK提供了spdk_get_io_channel函数来建立与设备的通信管道,同时在管道内部维护了与设备相关的上下文信息(可通过spdk_io_channel_get_ctx获取),通过该上下文对象可辅助完成相关的IO动作。为此我们需要先把功能组件注册成IO设备(通过spdk_io_device_register)

块设备子系统在初始化过程中会将spdk_bdev_mgr注册成IO设备,以便通过其IO Channel来获取对应的spdk_bdev_mgmt_channel实例(作为上下文对象提供thread_local粒度的对象池功能,用于缓存spdk_bdev_io)

同时,NVMe bdev模块还会将nvme_bdev_ctrlrs注册成IO设备,通过其IO Channel可获取对应的nvme_poll_group实例,其内部维护了一个poller来轮询指定分组绑定的qpair集合。

除此之外,其他IO设备则是在驱动绑定的时候进行注册的(代码可参考connect_attach_cb回调函数)

相关IO设备的说明如下:

  1. nvme_ctrlr
    nvme_ctrlr主要用于描述设备控制器信息,其会注册一个poller函数(bdev_nvme_poll_adminq)来对adminq做周期性轮询。
    除此之外,通过其所提供的IO Channel还可获取每个NS对应的qpair实例,并将其加入指定的轮询分组(通过spdk_nvme_poll_group_add)
  2. nvme_bdev
    nvme_bdev是在对NS进行populate过程中创建的(代码参考nvme_ctrlr_populate_namespace),通过其所提供的IO Channel可获取每个NS对应的nvme_io_path信息,进而定位具体的IO QPair
  3. spdk_bdev
    spdk_bdev也是在此期间构建的,并注入到spdk_bdev_mgr对应的集合中(代码参考spdk_bdev_register)

块设备使用

块设备的使用主要遵循以下3个操作步骤

  1. 获取块设备描述符
    对此,SPDK提供了spdk_bdev_open_ext功能函数来对目标块设备进行open,并返回其对应的设备描述符spdk_bdev_desc
  2. 建立通信管道
    拿到设备描述符之后,可通过spdk_bdev_get_io_channel建立与目标块设备的通信管道,其会对图片中的每个IO设备形成访问,来创建用于IO通信的qpair实例,并通过指定的poller对其进行轮询。
  3. 通过管道对块数据进行读写
    对此,SPDK提供了spdk_bdev_write和spdk_bdev_read函数以便于向目标块设备提交对应的BIO请求。

 原文链接:https://zhuanlan.zhihu.com/p/461512223  

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G小基站行业市场空间将持续释放 2024年或将迎来建设高峰期

5G小基站行业上游包括硬件资源供应商、软件资源供应商、配套资源供应商;中游主体包括5G小基站设备厂商、5G小基站解决方案服务商;下游则主要是大型写字楼、购物中心、机场等。 数据来源:中国5G小基站市场发展趋势分析与未来前景研究报告&…

弥漫的烟圈-Abaqus涡环仿真与空气大炮

今天简单地讨论一下这个有趣的流体现象-烟圈,并使用Abaqus欧拉分析对它的形成过程进行仿真,揭示其中的力学奥秘。 烟圈 喷气圈的海豚 在流体力学里面,烟圈和水下气圈有个共同的名字,叫做Vortex Ring,即涡环或环形涡流…

腾讯云服务器选购新手教程(新版流程超级详细)

腾讯云服务器选购新手教程(新版流程超级详细),来详细说下腾讯云服务器购买流程图文详解及购买渠道说明。 腾讯云服务器购买流程 购买腾讯云服务器很简单,首先你需要注册一个腾讯云账号,使用微信或QQ注册即可,很简单。账号注册后&…

git clone 拉取远程仓库

1. git clone 拉取仓库 2. 以 HTTPS 方式拉取仓库 3. 以 SSH 方式拉取仓库 1. git clone 拉取仓库 拉取远程库的默认分支 git clone <repositories> 拉取远程库的指定分支 -b, --branch git clone -b <branch> <repositories> 将远程库拉取到指定目录 git c…

产品销量一直上不去,怎么办,试试这种模式?

裂变营销的本质是以存量带增量&#xff0c;让已有消费者帮你寻找潜在消费者&#xff0c;从而达到快速获客的目的。这种方法成本低、影响持久、效率高&#xff0c;已经成为传统企业转型不可或缺的重要战略&#xff1b;时至今日&#xff0c;许多传统企业&#xff0c;在引流方面碰…

【图像去噪】PM模型图像降噪【含Matlab源码 2107期】

⛄一、PM模型图像降噪简介 为了提高去除噪声和保留细节信息的算法的性能,Peroha等提出以热学中扩散方程式为基础的扩散算法即为PM模型。该模型主要是在经典各向异性扩散方dgi,j,t/dtdiv(d∇g)上提出将其中的扩散系数d用函数控制的扩散系数替代。PM模型为 其中,f(|∇gi,j,t|)是…

ISO 15765-2协议分享(三)—寻址方式详解

文章目录 前言一、Normal addressing二、Extended addressing三、Mixed addressing总结前言 2021年下半年的第一天,愿大家都安好。 对于自己的未来,做一个规划,不要让自己每天沉溺于肤浅信息带来的感官愉悦。 喜欢《沉思录》中一句话: 要学会深思,洞察事物之间的相互转…

轻量级聊天应用VoceChat

本文是应网友 猪猪侠的要求折腾的&#xff1b; 什么是 VoceChat &#xff1f; VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上&#xff0c;部署简单&#xff0c;很少需要维护。前端可以内嵌到自己的网站下&#xff0c;数据完全由用户…

探花交友_第8章_搜附近(新版)

探花交友_第8章_搜附近(新版) 文章目录探花交友_第8章_搜附近(新版)1.1 需求分析需求说明数据库表1.2 探花推荐列表查询接口文档tanhua-modeltanhua-app-server**TanHuaController**TanHuaService配置文件tanhua-dubbo-interfacetanhua-dubbo-mongo1.3 左滑右滑接口文档tanhua-…

2022-前端实现电子签名(web、移动端)通用组件

前端实现电子签名&#xff08;web、移动端&#xff09;通用组件 前言 在现在的时代发展中&#xff0c;从以前的手写签名&#xff0c;逐渐衍生出了电子签名。电子签名和纸质手写签名一样具有法律效应。电子签名目前主要还是在需要个人确认的产品环节和司法类相关的产品上较多。…

可视化大数据分析系统

可视化大数据分析系统有很多&#xff0c;如果系统级都是收费的&#xff0c;如果大家想要了解可视化大数据分析系统&#xff0c;私信我就行。下面聊下5个常用的大数据可视化分析工具。 1、FineReport FineReport是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一…

Linux环境变量配置

在自定义安装软件的时候&#xff0c;经常需要配置环境变量&#xff0c;下面列举出各种对环境变量的配置方法。 下面所有例子的环境说明如下&#xff1a; 系统&#xff1a;Ubuntu 14.0 用户名&#xff1a;uusama 需要配置MySQL环境变量路径&#xff1a;/home/uusama/mysql/bi…

Servlet转发与重定向

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

【设计模式】代理模式——静态动态代理

【设计模式】代理模式——静态&动态代理 文章目录【设计模式】代理模式——静态&动态代理一&#xff1a;代理模式概述二&#xff1a;代理模式结构三&#xff1a;静态代理四&#xff1a;JDK动态代理1&#xff1a;简介2&#xff1a;步骤五&#xff1a;CGLIB动态代理六&am…

Python -- 元组、字典、集合

目录 1.元组的使用 1.1 访问元组 1.2 修改元组 1.3 count,index 1.4 定义只有一个数据的元组 2.字典的基本使用 2.1 字典的增删改查 2.2 字典的遍历 3.集合的使用 4.通用方法 1.元组的使用 Python的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。元组使…

测试人必备的Linux常用命令大全...【全网最全面整理】

Linux常用命令大全&#xff08;非常全&#xff01;&#xff01;&#xff01;&#xff09; 最近都在和Linux打交道&#xff0c;感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制&#xff0c;当然&#xff0c;这也是很多人喜欢linux的原因&#xff0c…

基于BP神经网络的数字识别系统仿真,带GUI界面

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 OCR&#xff08;Optical Character Recognition&#xff09;即光学字符识别技术&#xff0c;是通过扫描仪把印刷体或手写体文稿扫描成图像&#xff0c;然后识别成相应的计算机可直接处理的字符。…

SoapUI、Jmeter、Postman三种接口测试工具的比较分析

推荐阅读&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 前段时间忙于接口测试&#xff0c;也看了几款接口测试工具&#xff0c;简单从几个角度做了个比较&#xff0c;拿出来与…

水库信息化监测系统有哪些?水库信息化监测解决方案

一、背景分析 全国现有水库9.8万余座&#xff0c;小型水库占95.3%。小型水库数量最多&#xff0c; 主要分布山东、安徽、江西、广东、湖南、湖北、四川和云南&#xff0c;每个省小型水库数量超过5000座 全国中小型水库9万余座&#xff0c;其中4万余座存在病险&#xff0c;195…

图解设计模式:动动手玩转适配器模式

前言 &#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️点开就是缘分认识一下&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;…