基于USB转PCIe bridge的SSD复判工具设计与实现文献综述

 2022-10-24 21:44:06
  1. 文献综述(或调研报告):

在信息技术和存储技术的发展过程中,存储的速率成为计算机系统的瓶颈,传统的机械硬盘由于机械的设置有较长的寻道延迟,不能满足高性能的读写要求。固态硬盘的出现使这个问题得到了改善。基于NAND Flash的固态硬盘具有低能耗、非易失、高随机读写等良好的特性[1]。但是专为硬盘设计的AHCI标准不能适应低延迟的SSD[2]。易失性存储器标准 (Non-Volatile Memory Express,NVMe[3]),是使用PCI-E通道的一种规范,NVMe的设计之初充分利用到PCIe SSD的低延时以及并行性,以及当代处理器、平台与应用的并行性。SSD的并行性可以充分被主机的硬件与软件充分利用[4]相比与现在的AHCI标准,,NVMe标准可以带来多方面的性能提升[5]

由于NVMe的设备变得普及,存储设备速度越来越快,一般的存储设备相对于NVMe来说,在整个IO事务中消耗的时间百分比就显得太多[6]。这是因为存储软件协议栈的性能和效率在存储整体系统中占有越来越重要的地位。为了克服这个问题, 许多研究人员试图通过使用轮询机制来减少内核开销,并消除不必要的上下文切换[7]

然而,内核级的I/O优化有几个限制,难以满足用户应用程序的需求。首先,内核为应用程序提供了一个抽象层,管理所有硬件资源[8]。因此,很难在不损失一般性的情况下优化内核。其次,由于内核应该提供应用程序之间的公平性,无法支持任何支持某个应用程序的策略。最后, 内核的频繁更新需要持续的修改升级来支持这种特定于应用程序的优化。

通过对NVMe相关的论文阅读分析,总结了基于PCIe以下相关技术背景:

  1. NVMe

NVM Express是一个基于PCIe SSD的高性能、可扩展的存储协议。NVMe的特点是使用多I /O队列传输命令。每个队列最多能够传输64 K个命令,且每个NVMe 设备最多能有64 K 个设备。主机在存储过程中,将存储的命令放到NVMe 队列中,然后通过调整NVMe 队列头的位置来通知NVMe Controller 读取执行命令,读取写入的数据通过PRP(physical regionpage)进行传输,NVMe操作完之后,将结果写入完成队列并通过中断通知主机。NVMe有两种队列: Admin 队列和I /O队列。每种队列又分为两种: 提交队列(SQ)和完成队列(CQ),提交队列和完成队列大都一对一存在。Admin队列只有一对,而I/O队列有多个。Admin命令负责创造/删除I/O队列,I /O队列可以对设备进行读写操作。

  1. UIO

UIO[9](Userspace I /O)是运行在用户空间的I /O技术。Linux系统中一般的驱动设备都运行在内核空间,在用户空间用应用程序调用即可。UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能。使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题。UIO技术架构如图1所示。

图1 UIO技术架构

Linux上的驱动设备一般都是运行在内核态的,提供接口函数给用户态函数调用即可。而新引入的UIO技术,则是将驱动的大部分事情移到了用户态。Probe 函数可以记录设备的资源,即PCI设备BAR空间的物理地址、大小等信息记录下来传给用户态然后使用字符设备驱动中的mmap( )函数将内存映射到用户态去。除了记录BAR空间资源信息,UIO框架还会在内核态实现中断处理相关的初始化工作。

  1. IOMMU

图2所示为IOMMU架构。要在64位系统上支持32位设备,例如网卡,如果没有IOMMU,就需要在物理内存底端(32位设备能够访问到的地方)设置一个叫作“bounce buffers”的缓冲区,如果设备要访问高端内存,操作系统需要在高端内存和“bounce buffers”之间做一份拷贝。带来的性能影响显而易见。如果有了IOMMU,性能影响的问题便迎刃而解。设备驱动在做DMA绑定时,系统返回给驱动的不再是物理地址,而是内核空间的某个地址(有的书上叫作总线地址),传输时,这个内核空间地址会经由IOMMU单元,IOMMU将这个地址转换为物理地址[10]

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。