在闪存存储领域,我们可以看到无论在市场、客户还是在研发,大家都在支持NVMe标准,其很重要的一个原因是传统的SCSI已经不能满足性能需求,其变成了存储系统的一个重要性能瓶颈点。从软件层、传输协议效率、软件接口标准、芯片接口、传输链路,传统的SAS/SATA都存在很多不足的地方。今天存储老吴和大家一起分享一下SAS/SATA接口在软件层面的重要性能瓶颈点,从研发的角度来解释为什么SCSI软件层是一个重要的性能瓶颈点。

大家都比较清楚SCSI软件层的组织结构,其主要由三大部分组成:

1, SCSI上层驱动层。这层驱动主要完成SCSI设备的功能,例如磁盘的驱动、Tape的驱动,CD-ROM的驱动都在这层实现。对于磁盘驱动,通常也被称之为SD驱动,实现了一个块设备功能。对上接入块设备驱动层;对下和SCSI中间层对接。

2, SCSI中间层。中间层软件主要完成SCSI命令的处理、出错处理、超时处理等。中间层的上面是各个SCSI的功能驱动;下面是SCSI的底层驱动。

3, SCSI底层驱动。底层驱动实现了SCSI的数据传输和HBA的驱动。在底层可以实现ISCSI的发送器;可以模拟一个SCSI的HBA;当然也可以实现LSI的HBA驱动程序,并通过DMA的方式将数据提交给实际的硬件板卡。

在传统磁盘存储中,性能瓶颈点在磁盘端。CPU处理器、NUMA体系架构、软件的并发性对存储的性能影响几乎为零。存储老吴在07年研发Thin Provisioning逻辑卷系统的时候,试图通过优化锁资源竞争来提升IO性能,结果是预料之中的徒劳。对于磁盘存储来说,CPU性能一直是搓搓有余的。一个磁盘的IOPS最多只能跑到200,所以中断对CPU来说也毫无压力,在这种情况下,SCSI软件层无论如何实现对性能基本是没有影响的。所以,磁盘存储是一个实实在在的IO Intensive应用。

但是,对于闪存存储而言,一切都发生了变化,SSD的性能无论是带宽还是IOPS都非常高,因此,存储的性能瓶颈点从Disk端转移到了CPU、OS以及网络端。在这种情况下,我们再来看一看SCSI的软件栈。如下图所示,每个SCSI设备只提供了一个请求队列(request queue),那么无论系统中存在多少个处理线程,无论系统中存在多少个CPU核,所有的请求都会以竞争的方式入队列。SCSI设备的请求队列是系统的一个竞争资源。

对于SMP系统而言,竞争资源的处理都需要通过加锁的方式来实现访问。在Linux的实现中通过Spinlock的方式对请求队列进行互斥保护。由于SSD性能非常高,所以系统中的CPU都在忙于请求的处理,这些忙碌的CPU最终都需要去竞争请求队列锁,将请求放入队列。这种大量的竞争导致每个CPU的处理效率大为降低,大量时间处于自旋状态,等待获取请求队列锁。从而使得整体IO处理的效率降低,存储性能由于软件上的限制而得不到提升。

针对这个问题,我们做过实际的测试,发现当IO压力上来之后,系统中的CPU绝大部分时间都处于自旋状态,都在竞争请求队列的自旋锁。所以,SCSI层的单请求队列是一个严重的性能瓶颈点。

为了解决这个问题,Linux对SCSI的单队列做了改进,引入了Multi-queue的方式。通过多队列的方式可以减少、避免线程/CPU之间的竞争,可以充分发挥单个CPU处理IO的效率,从而整体提升IO处理的性能。SCSI引入多队列之后的示意图如下图所示:

需要注意的是,在软件上为每个SCSI设备引入多队列之后,同样需要在HBA端为软件访问提供多队列支持,否则性能将会局限在HBA卡上。闪存存储软件的设计与实现和传统存储相比,不仅数据分布、数据的组织形式发生了变化;而且软件的实现效率、CPU并发潜能的挖掘、计算机体系结构的考虑都会变得尤其重要。所以,我一直认为,闪存存储不仅玩的是存储技术,而是高性能计算技术。

SCSI软件层对性能的影响相关推荐

  1. 深度学习DL调参隐藏层节点数对网络性能的影响

    这次用于实验隐藏层节点数对网络性能的影响,训练集用的是mnist的训练集的0和1,测试集用的mnist的测试集的0和1,学习率固定位0.1,batchsize=20,训练集不加噪音.得到的数据 网络结 ...

  2. ssd测试软件和实际 速度,测出真相!实测CPU/内存对SSD性能的影响

    1解析CPU,内存和硬盘三者关系 [PConline 评测]不同于传统的机械硬盘,固态硬盘的组成很"简单",主控+闪存+PCB+外壳(缓存有些SSD直接省去).那实际影响SSD性能 ...

  3. CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?

    作者 | 路一直都在 出品 | AI科技大本营(ID:rgznai100) Paper link: https://arxiv.org/pdf/1904.02701.pdf Code link: ht ...

  4. tcpdump抓包对性能的影响

    from:http://blog.csdn.net/dog250/article/details/52502623?ref=myread 一直以来,提到这个话题,大家更多的关注的是tcpdump抓包本 ...

  5. 神经网络调参---权重对分类性能的影响

    首先制作一个二分类minst0和2的网络,将minst 28*28的图像缩小到9*9,采用1个3*3的卷积核网络的结构是49*30*2. 画成图 这个网络由两部分组成,左右两边分别向1,0和0,1收敛 ...

  6. 数据库设计对性能的影响

    数据库结构设计和数据库优化呢,是我们后面几张主要的内容,所以我们这里先简单的看几个和数据库的设计,和SQL优化有关的对数据库性能产生影响的一些易犯的错误,我们现在对如何高性能的数据库设计,和SQL优化 ...

  7. 揭开Vmware 虚拟软件层的秘密

    [电脑商网专稿]虚拟软件究竟是什么软件, 是让所有的软件都"虚拟"执行吗, 虚拟软件层究竟是怎样的一层软件? 为什么现在这么多的公司和个人都在使用这种软件, 虚拟软件能代替操作系统 ...

  8. DAO层接口性能监控

    DAO层接口性能监控 ####简介: 笼统来讲讲,任何系统都可以抽象为数据+算法.而数据库作为数据的存储系统,其响应快慢直接影响着系统的整体性能. 目前很多大公司内部都有一些定制的监控系统,可以多维度 ...

  9. zt:tcpdump抓包对性能的影响

    https://blog.csdn.net/dog250/article/details/52502623 一直以来,提到这个话题,大家更多的关注的是tcpdump抓包本身的性能,比如能不能应付几十万 ...

最新文章

  1. input按钮的事件处理大全
  2. Atheros无线网卡芯片全介绍
  3. c3p0 0.9.1.2 配套mysql_连接数据库,使用c3p0技术连接MySQL数据库
  4. java技术学习内容_Java开发主要都学些什么内容?
  5. attention机制中的注意力图怎么画_注意力机制 | 图卷积多跳注意力机制 | Direct multihop Attention based GNN...
  6. iphone模拟器_应用日报 | Xcode 现身 5.4 英寸 iPhone 模拟器,和平精英上线特斯拉皮肤...
  7. 前端中台化,把格局做大:Node.js与测试服务探索
  8. 拼多多商家无货源,如何批量铺货?
  9. 需求分析岗的一点总结
  10. Python-Pandas基础
  11. android视图动画(ViewAnimation动画)
  12. 流程图制作原则与示例
  13. Usb ssh 管理android,Android USB VID PID 及 ADB
  14. COOKIE与SESSION比较
  15. SDRAM芯片中的DQM信号的理解
  16. AI如何挑战传统翻译
  17. GNS3 思科(Cisco)PIX虚拟防火墙简单配置
  18. Linux 中的 netcat 网络工具简介
  19. CRSLab:构建会话推荐系统的开源工具包
  20. 互联网协议 — PPP 与 PPTP 点对点协议

热门文章

  1. Win7开机密码破解
  2. .NET :如何对数组进行排序
  3. ren`guang-boss面试
  4. gil php,网络编程之多线程——GIL全局解释器锁
  5. python爬虫requests实战_Python_爬虫_requests小实战
  6. 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?
  7. mysql+dump+选项_mysqldump 备份常用选项以及备份脚本
  8. 2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or (差分+位运算)
  9. 容斥 + 爆搜打表 ---- 2020年南京icpc H.Harmonious Rectangle
  10. php双向链表,双向链表的GO语言实现