金线莲的功效与作用,@程序员,别再让 Hotplug 问题难住你!-优德88手机版

admin3个月前256浏览量

作者 | 喻津

责编 | 胡巍巍

本文经授权转载自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的支撑有两个方向:

图-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:

图-4 SPDK UIO Hotplug handle

设备被移除后,SPDK仍是有或许拜访设备的空间,这个时分会引起sigbus。所以,咱们需求注册了一个sigbus_handler,如图(5)所示,step ②拜访现已被移除的SSD-2的BAR空间,此刻触发已注册的sigbus_handler,在sigbus_handle中咱们对拜访设备的虚拟地址做了新的匿名映射,一起把匿名页全置0xff,避免第2次的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的软件开发作业。

【End】

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。

最新评论