添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/7.2_release_notes/storage

DM 恢复至版本 4.2

已将 Device Mapper (DM) 升级至上游版本 4.2,该版本提供大量针对上一个版本的程序错误修复和增强,其中包括显著 DM 加密性能更新及 DM 核心更新,以支持多队列块 I/O 查询机制(blk-mq)。

使用 blk-mq 进行多重队列 I/O 调度

Red Hat Enterprise Linux 7.2 包含了一个用于块设备(称为 blk-mq)的新多重队列 I/O 调度机制。通过允许某些设备驱动映射 I/O 请求至多个硬件或软件队列提高性能。当多线程执行在单一设备直执行 I/O 时,性能的提高来自于锁竞争的减少。更新的设备,如非易失性存储器标准(Non-Volatile Memory Express,NVMe),因为对多个硬件提交和完成队列的原生支持以及低延迟性能的特点,它们最适合于使用这个功能。但性能的提高总是取决于具体的硬件和负载。

在下列驱动程序中实施 blk-mq 功能且默认启用它:virtio-blk、mtip32xx、nvme 和 rbd。

相关功能 scsi-mq 允许小型计算机系统接口(SCSI)设备驱动程序使用 blk-mq 基础结构。scsi-mq 在 Red Hat Enterprise Linux 7.2 中是作为技术预览提供。要启用 scsi-mq,请在内核命令行中指定 scsi_mod.use_blk_mq=y 。默认值为 n (禁用)。

如果指定了 dm_mod.use_blk_mq=y 内核选项,就也可以配置使用基于请求的设备映射器(Device Mapper,DM)的 DM 多重路径目标设备使用 blk-mq 基础架构。默认值是 n (禁用)。

如果底层的 SCSI 设备也使用 blk-mq,设置 dm_mod.use_blk_mq=y 可以减少 DM 层的锁消耗。

要确定 DM 多重路径设备是否在使用 blk-mq,请查看 /sys/block/dm-X/dm/use_blk_mq ,这中的 dm-X 用实际的 DM 多重路径设备替代。这是只读文件,它反映 /sys/module/dm_mod/parameters/use_blk_mq 中的全局值是创建基于请求的 DM 多重路径设备的时间。

最近Linux的最新内核已经r el ease到Linux-3.19-rc6,根据Linus的r el ease note,大约再经过一次rc7版本就可以正式r el ease了。Linux 3.19内核在 bl ock层的最大变化就是增加了一个multi-queue bl ock layer,来更好的支持类似于NVME等支持multi-queue机制的设备。所谓的multi-queue机制就是在多核CPU的情况下 浏览器打开 在主机中,多cpu运行多个线程,每个线程都能和文件系统交互,文件系统层也是用多线程和bio层交互,但是,块设备层只有一个 队列 : 在块设备层,来自多个cpu的bio请求被放在同一个 队列 中,造成阻塞: 因此,提出了多 队列 的方法,在块设备层也做成多线程: 但是,在块设备层实现多个 队列 并不能像文件系统一样考虑,因为块设备层需要与硬件交互,这需要硬件也支持多 队列 ,最理想的情况是,硬件支持的 队列 足够多,上层的每个 队列 (基于软件的 队列 ),都有硬件 队列 和其关联。但有些时候,硬件支持的 队列 有限 浏览器打开 Flash的出现把存储的世界搅翻了天,仿佛一夜之间发现了新大陆,所有旧世界的东西都变得笨拙。NVMe驱动义无反顾地抛弃了Linux blk ,开发自己的 队列 管理。 当第一次看到NVMe重新使用Linux Bl ock 队列 管理 blk - mq 的时候,还是比较惊讶的:现在的NVMe工作的好好的,为什么要换,增加 blk - mq 会不会造成性能下降?相信很多人都有这个疑惑。刚好手上有个centos7.2环境,我们就... 浏览器打开 按照老的套路,在分析一个driver时,我们首先看这个driver相关的kconfig及Makefile文件,察看相关的源代码文件. 在开始阅读一个driver,通常都是从module_init or syscall_init函数看起。 下面让我们开始nvme的旅程吧。 首先打开driver/ bl ock下的kconfig文件,其中定义了 BLK _DEV_NVME config,如下。 浏览器打开 前面使用单个数组随机访问的方式实现了 多重 栈的基本操作,这里通过来两个数组来随机访问实现 多重 队列 ; 这里需要两个数组,因为 队列 需要添加元素和删除元素在不同的一端QueueNode front[MAX_SIZE] = {NULL}, rear[MAX_SIZE] = {NULL}; 首先是 队列 添加元素的操作: void QueueAddq(int i, el ement item) Queue 浏览器打开 通常我们只用一个 队列 来实现各种 队列 功能。但考虑这样一种 队列 ,它要求 队列 中的元素是笛卡尔坐标系里的点。即X坐标和Y坐标。 比如说,第一个进队的元素是(1,2),第二个元素为(1,1)。 接着第一个出队的元素为(1,2),再进一个元素为(3,3) 这样, 队列 浏览器打开 1,http://events.static.linuxfound.org/sites/events/files/slides/vault-2016.pdf 【Jens Axboe】 *** 2,Multi-Queue机制就是在多核CPU的情况下,将不同的 bl ock层提交 队列 分配到不同的CPU核上,以更好的平衡IO的工作负载,大幅提高SSD等存储设备的IO效率。一些高端设备目前已经支持多队... 浏览器打开 新版内核在 blk 层加入了多 队列 功能,可以尽情发挥SSD的性能,开启多 队列 可以在编译内核的时候默认开启,也可以通过启动参数配置scsi_mod.use_ blk _ mq 在/etc/default/grub中添加参数: GRUB_CMDLINE_LINUX="scsi_mod.use_ blk _ mq =1" # 1是开启 0是关闭 更新grub: sudo update-grub 或者直接编辑/boot/grub/grub.cfg在vmlinuz开头的一行结尾处添加 scsi_mod.use_ blk _ mq 浏览器打开 上一篇已经讲述了 MQ 队列 的机制,利用cpu的多核,配上多 队列 机制,并发的处理IO请求,提高效率。 本篇详细讲述下从bio下发到IO调度器中, MQ 队列 机制是如何一步步完成的。 1、 MQ 处理结构流图 从整个流程图可以看到,主要是分为三个部分:初始化硬件设备的target参数、初始化请求 队列 request_queue以及bio请求的处理过程。前面两个过程主要是完成底层存储设备向文件系统的注册,同时完... 浏览器打开