Flash的出现把存储的世界搅翻了天,仿佛一夜之间发现了新大陆,所有旧世界的东西都变得笨拙。NVMe驱动义无反顾地抛弃了Linux blk,开发自己的队列管理。

当第一次看到NVMe重新使用Linux Block队列管理blk-mq的时候,还是比较惊讶的:现在的NVMe工作的好好的,为什么要换,增加blk-mq会不会造成性能下降?相信很多人都有这个疑惑。刚好手上有个centos7.2环境,我们就来一探究竟:

上图是我按NVMe是否使用blk-mq做的简单测试,可以看到,从Latency和IOPS两个方面都没有较大变化,说明blk-mq的引入带来的overhead非常小。那么blk-mq是怎么做到的呢?

就从blk-mq的那篇paper说起吧。在<Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems>中,作者着重强调了之前single-queue的缺陷(多核竞争访问引入锁,跨NUMA中断处理,跨NUMA内存访问),非常不适合为现代的多路服务器高性能介质服务。痛定思痛,在blk-mq中对这方面大做修改。

blk-mq引入了两层Queue的概念,Software Queue和 Hardware Queue。这样的设计有多个目的:

1,在Software Queue中把Queue的数量设置死(与Core数量相等或者与MUMA 数量相等),这样就不会产生竞争了

2,Hardware数量由底层驱动决定,可以是一个或者多个;这也是为了尽快和之前的SATA SAS使用的单队列兼容

3,在software Queue里把 I/O Scheduling等Block积累几十年的Feature用起来,与底层驱动的联系由Hardware Queue负责。

那Software Queue和Hardware Queue的数量应该是多少呢?作者用实验给出了答案:如下在每个Core上发送相同数量的I/O,然后测试不同Hardware Queue和Software Queue的数量对性能产生的影响。

单个Software Queue的情况下,无论Hardware Queue是多少,性能都很差!

每个Core配一个Software Queue的情况下,Hardware Queue与Software Queue相等的情况下最好(core少的情况下跟NUMA一样也取得不错的性能)!

当然,这个测试也有一定的局限性,就是在单个Queue的情况下,测了最差的情况(所有的Core都去访问一个Queue)。


由于NVMe本身就是Multi-Queue的设计,跟这种队列配合起来还是比较容易的。只要将Hardware Queue和NVMe Queue一一对应就行。要移植NVMe到blk-mq最主要的工作就是定义下面的结构体。

第一个成员queue_rq指定blk-mq向驱动提交request的函数,第二个map_queue定义如何将software queue和hardware queue对应,第三个init_hctx是hardware Queue创建时调用(可以在这里将NVMe Queue与Hardware Queue绑定),init_request是在分配Request时调用,timeout是发生timeout时的调用。这些函数都是供blk-mq使用的。

blk-mq通过一个blk_mq_tag_set结构体来定义队列组合(可以指定timeout值,iodepth和hardware queue的个数等)。NVMe驱动在每一个设备加载时就定义一个这样的对象,然后在分配namespace的时候使用ns->queue = blk_mq_init_queue(&dev->tagset)给每个Namespace分配一个队列(request_queue 类型,包含hardware queue和software queue信息)。

下面是NVMe驱动定义的Hardware Queue初始化时的调用函数,可以看到将NVMe Queue赋给了Hardware Queue的driver_data。

当blk-mq下发Request的时候,会传递Hardware Queue对象,通过取出hardware Queue的driver_data,就可以得到Request对应的nvme queue了。

所以,用了blk-mq,NVMe驱动再也不用管request要放到哪个NVMe Queue了,而且I/O timeout,I/O统计这些都可以交给blk干。最重要的,还能够享受blk的IO scheduling 等功能。并入blk-mq后,NVMe驱动轻松了很多,性能有很好,对于开发者来说,何乐而不为?

参考文献

Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems

提示

本文选自公众号《存储技术最前线》,欢迎关注获取最新文章。

往期NVMe驱动文章回顾

NVMe驱动解析-注册设备

NVMe驱动解析-关键的BAR空间

NVMe驱动解析-DMA传输

NVMe驱动解析-响应I/O请求

转载于:https://www.cnblogs.com/rodenpark/p/6225929.html

强势回归,Linux blk用实力证明自己并不弱!相关推荐

  1. 驰为v10刷linux,V10HD强势回归 3G双系统聚划算首发

    四月疯狂的电影月,<战狼>.<咱们结婚吧>国内电影纷纷开花,海外大片也是强势来袭,<速度与激情7>5天突破10亿,接着范爷的<万物生长>等也接踵而来.四 ...

  2. 老牌破解神器L0phtCrack强势回归 口令破解速度提升500倍

    7年了,随着完全改版的第7版发布,Windows系统下老牌著名破解器L0phtCrack终于强势回归. 该口令破解器首次发布是在19年前,当时迅速风靡黑客圈,并导致微软不得不改变其处理口令安全的方式. ...

  3. 百度燎原计划2018强势回归 开放深度学习工程师评价标准

    人工智能时代风口在燃烧,百度希望让每个人都能用上AI.4月20日,百度"燎原计划2018"暨百度AI开发者实战营第二季强势回归,首站北京即放送三大满足各类开发者需求的"超 ...

  4. 2012,字王强势回归

    2012,字王强势回归 在互动百科"字体"词条里面,字王的"智能字模"技术,被认为是行业三大字型设计模式之一.     这标志着,字王提出"智能字模& ...

  5. 全面布局5G 三星欲强势回归中国市场?

    作者 | 崔玉贤 出品 | 网易科技<态℃>栏目组 "2019年三星将带着创新的技术和产品强势回归."这是三星电子大中华区总裁权桂贤在年初的誓言."言必行,行 ...

  6. 4月书讯 | 阔别十年,一大波经典好书强势回归!

    四 月 April 你的朋友圈是不是这样的? ▲向上滑动 罗小然 <emoji> 小白哥 三餐四季,山南水北. 王总 感悟生活中真正的自在与快乐. 李阿姨 拥抱春天,永远年轻! 春暖花开的 ...

  7. edittext无法获取焦点_小黑鞋强势回归,用帅气拉回时尚焦点

    近年来,小白鞋可以说是市面上最流行的鞋款,也是女生特别喜欢的穿搭鞋款.而在今年黑色的鞋款逐渐的流行起来,有种要逆袭的小白鞋地位的趋势,下面就让小编来给大家盘点一下今年帅炸的小黑鞋. BALENCIAG ...

  8. 吴忌寒革职詹克团,强势回归被称“矿圈乔布斯”

    近日,矿圈热闹非凡,嘉楠耘智筹备上市.亿邦国际获得巨额订单,竞对们利好不断,而曾站在聚光灯下"戏最多"的比特大陆却久无声响. 直到今天一出"政变回归"的大戏,将 ...

  9. Android回归Linux核心怀抱

    众所皆知,Android是基于Linux而来的行动平台版本,但因Google在开发过程中修改并新增部分功能,产生如何恰当地在Linux中处理Android特有代码方面有很多争论,争论的结果是Linus ...

最新文章

  1. javascript用感
  2. Linux web服务安装apache 思路 (源码编译,自己定义服务)
  3. 树莓派DVR猫眼监控,贴广告的人看你往哪跑!
  4. oracle中如何插入
  5. [css] 你是怎样对css文件进行压缩合并的?
  6. 司爱侠计算机英语教程第五版翻译,计算机英语教程 教学课件 作者 司爱侠 张强华 参考译文.doc...
  7. 网络爬虫-获取网页中的数据加伪装头,伪装成浏览器多次访问,避免单次访问导致ip被封
  8. Java 多线程 —— wait 与 notify
  9. java hdu2012素数判定
  10. JDK 1.6环境变量的设置
  11. 【ZT】可行性研究报告编写规范
  12. mysql queries 很大,mysql优化通常使用的几种方法
  13. Protel DXP 2004 SP3_SP4 注册机
  14. html把div做成透明背景,DIV半透明层 CSS来实现网页背景半透明
  15. VMware14 kali linux安装教程
  16. python时间函数纳秒_在Python中以秒和纳秒获取POSIX / Unix时间?
  17. 纳米软件推出的新一代的网络分析仪软件你了解了吗?
  18. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(2):VPU
  19. 2023.02.14草图大师 卧室房间 效果图
  20. [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版javascript

热门文章

  1. VUE表单编辑重新赋值之后校验不生效的问题
  2. 【风险评估】利用AI技术实现智能安全风险评估与预警
  3. think php上传图片,thinkphp5怎么上传图片
  4. 下载MySQL阿里云镜像方法
  5. mac系统python读取文件路径_Python小技巧:3个处理文件路径的简单方法
  6. 数据特征分析之帕累托分析以及python实现
  7. 从菜鸟到大佬(四格漫画)
  8. 我的世界神级种子Java_《我的世界》老玩家珍藏的10个“神级”种子,你一定没去过系列!...
  9. 【OpenGL】OpenGL引擎开发视频教程
  10. stm32定时器定时中断