作者 | 喻津

责编 | 胡巍巍

本文经授权转载自DPDK与SPDK开源社区

什么是hotplug?

Hotplug即带电插拔,它的功能就是允许用户在不关闭系统,不切断电源的情况下取出和更换设备,最常见的如USB键盘,鼠标。

为什么需要hotplug?

Hotplug已经是现代计算机中不可或缺的特性之一了,它极大的方便了计算机的使用。单纯意义上的hotplug通常指设备的插入和删除,但是它不仅仅局限于此,它还可以应用于以下几个方面:

  • 改变配置或者修复系统

  • 负载均衡

  • 动态迁移

  • 减少能耗

而在云服务领域,关闭系统所带来的经济损失是巨大的。单以存储举例,硬盘是有可能损坏的,而且,存储空间也有可能消耗到一个危险的水平。这些都要求云服务在部署的时候就考虑到了硬盘的hotplug。

SPDK和hotplug又有什么关系呢?

SPDK(Storage Performance Development Kit)是一款专注于存储的用户态开源软件,加速磁盘的读写仅仅是它的一个特点之一,更多的信息可以访问网站https://spdk.io/来发掘SPDK的更多特性。SPDK的整体架构如图(1)所示,我们在bdev (Block Device Abstraction)层提供了hotplug的支持。

图-1 SPDK Architecture

SPDK从两个方向提供了hotplug的支持,这与SPDK的架构和使用有关。SPDK可以通过config 文件在启动时指定要创建的block device或者在启动后通过RPC的方式来创建与删除block device。所以,如图(2)所示,SPDK 对hotplug的支持有两个方向:

  1. 物理设备的热插拔

  2. 通过RPC实现的block device的热插拔。

图-2 SPDK Hotplug

3.1 SPDK event framework

在说明SPDK是如何实现hotplug之前,我们需要简单介绍一下SPDK的event framework模型。如图(3)所示,SPDK运行时指定了多少个core,就会起多少个reactor。Core和reactor是一一绑定的,poller是每个reactor上的周期性服务,而message或者event是线程间同步的方法,按需分配,开销很小。

图-3 SPDK event framework

3.2 物理设备的热插拔

SPDK作为用户态程序,依赖于kernel发送的消息来处理物理设备的hot add or remove。目前SPDK支持两种driver:

  • uio_pci_generic

  • vfio-pci

图-4 SPDK UIO Hotplug handle

设备被移除后,SPDK还是有可能访问设备的空间,这个时候会引起sigbus。所以,我们需要注册了一个sigbus_handler,如图(5)所示,step  ②访问已经被移除的SSD-2的BAR空间,此时触发已注册的sigbus_handler,在sigbus_handle中我们对访问设备的虚拟地址做了新的匿名映射,同时把匿名页全置0xff,防止第二次的sigbus的出现。

图-5 SPDK sigbus handler

vfio-pci的hot remove有很大的不同,他不是通过uevent广播,而是通过request notify的方式通知用户,同时需要用户先释放自己的device,vfio-pci才能卸载。对于hot add, vfio-pci没有什么不同也是通过uevent的方式实现。目前SPDK正在实现对vfio-pci hot remove的支持,敬请期待。

3.3 RPC Command

通过RPC实现hotplug就比较直接,它相当于省略了物理设备hotplug处理中,接收和解析uevent的步骤,它的实现流程如图(6)所示。如果,我们仅仅看NVMe bdev的实现,我们就会发现,RPC和物理hotplug最后都调用到了remove_cb()(在bdev_nvme.c中)。SPDK正在逐步放弃使用config文件启动的方式,而是选择在启动后通过RPC来创建对应的设备和启动服务。

图-6 SPDK RPC hotplug

SPDK中如何测试hotplug?

4.1 RPC

通过RPC的方式测试hotplug,就不需要什么准备,启动SPDK event framework即可。所以,nvmf_tgt和bdevperf等都可以做这样的测试。

4.2 物理设备的hotplug

正如上文所说,目前只能用uio_pci_generic的driver来测试hotplug。可以运行example/nvme/hotplug来测试NVMe SSD的热插拔。也可以使用event framework,不过需要在config文件中打开hotplug的支持“HotplugEnable Yes”或者通过RPC Command “rpc.py set_bdev_nvme_hotplug”。需要注意的是,如果用nvmf_tgt或者bdevperf等测试物理设备的hotplug一定要enable hotplug,不然会导致进程无法通过ctrl+c退出。

总结

Hotplug在存储实际使用中扮演着相当重要的角色,而SPDK提供的用户态hotplug解决方案会方便用户的使用与扩展,SPDK也会基于这套方案完善更多的基于hotplug的应用。

作者简介:喻津,资深工程师,主要从事SPDK的软件开发工作。

看完就懂!这样学python最高效

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

【End】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

☞史上最强最贵 Mac Pro 诞生,iPadOS 和 iOS 分家!WWDC19 全面总结

☞Python 爬取 42 年高考数据,告诉你高考为什么这么难?

☞Flutter 是移动应用程序开发的未来?

☞从沉迷游戏到信奥冠军、保送清华,这位天才少年是如何做到的?| 人物志

☞被小公司毁掉的名校毕业生 | 程序员有话说

如何在厕所、垃圾桶或小树林捡一枚BCH?看完后我笑了...

☞Unix风雨五十年:老兵远去,新秀崛起

☞Python从入门到精通,这篇文章为你列出了25个关键技术点(附代码)

IEEE“撑不住”了?声明解除对华为评审限制

☞敲代码时,程序员戴耳机究竟在听什么?

你点的每个“在看”,我都认真当成了喜欢

@程序员,别再让 Hotplug 问题难住你!相关推荐

  1. 程序员,岂能被网站吞吐量难住?

    作者 | 菜菜 责编 | 郭芮 YY妹:菜菜哥,有个事你还得帮我(苦笑一下).....前几天写了几个接口,领导让提高一下接口吞吐量. 菜菜:这是你技术提高的大好机会呀! YY妹:可吞吐量具体是什么?怎 ...

  2. 为什么大学计算机老师不去大公司当程序员说出来你都很难敢相信

    大学中的老师,人们的印象一般都是学识渊博.谈吐优雅的儒士,其实他们也是为了名利奔波,忙忙碌碌的.既然是为了赚钱,大学里面的计算机老师为什么不去大公司去做一名程序员呢?这样的话,赚的钱一定会比大学那点工 ...

  3. 程序员门槛再被“神器”降低:只要会英文,就能写代码!

    近日,OpenAI带着他们最新.最神自动编码神器Codex霸榜各大科技媒体头条,我们知道OpenAI是微软投资的通用人工智能平台,而GitHub是微软旗下的代码托管平台,这样微软出算力.OpenAI出 ...

  4. python程序员招聘信息-为什么企业很难招聘到好的python程序员?

    原标题:为什么企业很难招聘到好的python程序员? 近年来,Python 横扫了各大语言排行榜.在世界脚本语言排行榜中,Python 强势登顶;在 TIOBE 编程语言排行榜中,Python地位也在 ...

  5. 8年老码农现身说法:大龄程序员找工作,为什么这么难?

    背景 临近年底,公司还在招人,可筛选的人才真是越来越少,这可能是因为大家都在等年终奖吧.于是在简历筛选时,将学历和年龄都适当的放松了.正因为如此,面试了不少大龄的程序员. 网络上一直有讨论大龄程序员找 ...

  6. Java开发四年的程序员想再学习一门语言,该选着C还是Python呢?

    首先,对于已经从事Java开发工作四年的同学来说,如果想再开一门编程语言,应该结合自己的发展规划来选择C或者是Python,如果未来想进入大数据.人工智能领域发展,选择Python会更方便一些,而且P ...

  7. 我是程序员,每一天都太难了!

    互联网圈子里有一个神奇的群体--程序员.他们每天穿着格子衫,背着双肩包挤地铁,一到公司就陷入了"打代码-喝水-上厕所-打代码-喝水-上厕所"的死循环.热(jia)爱(ban)工(y ...

  8. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】

    "丛林法则"从未离我们远去,"适者生存"仍然是支配社会运行的一般法则.对于一群社会性动物而言,所谓"适者",不只是体格的强壮,更重要的是能参 ...

  9. 从程序员到项目经理(九):程序员加油站 -- 再牛也要合群

    "丛林法则"从未离我们远去,"适者生存"仍然是支配社会运行的一般法则.对于一群社会性动物而言,所谓"适者",不只是体格的强壮,更重要的是能参 ...

最新文章

  1. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
  2. Java开发手册——嵩山版(清幽现云山,虚静出内功)
  3. zabbix_fetion_alter
  4. 抽象线程之Parallel类
  5. ROS底盘控制节点 源码分析
  6. mysql中语句块当事务,MySQL事务与隔离级别
  7. 普通的人改变结果,优秀的人改变原因,顶级优秀的人改变模型
  8. 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
  9. codewhy 深入JavaScript高级语法(资源视频全)
  10. 【thm】windows内网提权之Windows PrivEsc Arena
  11. ROS教程之使用UVC摄像头
  12. TestStand-编辑VI
  13. 日记侠:你的文章为什么阅读量会那么高?
  14. 百度女程序员半夜打车被司机嘲讽:加班到一点,收入不如我,图啥
  15. asp服务器管理系统,ASP服务器软件
  16. 如何修改第三方DLL文件名
  17. Davinci DM6446开发攻略——DSP开发工程建立
  18. 怎么给word插入页码,详细图文教学,轻松学会
  19. Fiddler简单的使用教程
  20. 艾司博讯:拼多多诱导非官方交易有哪些处理?

热门文章

  1. 混淆矩阵与精确度、召回率、F1 Score
  2. linux环境下编译llvm源码
  3. sqlite 迁移 oracle,Oracle 数据导入 Sqlite
  4. mysql join 原理 简书_mysql-join
  5. mysql 计算时区差_在MySQL中计算时区的偏移量
  6. Dart与系统进程交互
  7. 中国数码摄像机市场趋势报告、技术动态创新及市场预测
  8. 中国邻苯二甲酸二环己酯(DCHP)行业市场供需与战略研究报告
  9. 2021年中国单一麦芽的威士忌市场趋势报告、技术动态创新及2027年市场预测
  10. 做游戏,学编程(C语言) 18 瑞克快跑