对使用NVMe接口的装置同时进行的内核模式和用户模式访问的制作方法

文档序号:12837094阅读:184来源:国知局
对使用NVMe接口的装置同时进行的内核模式和用户模式访问的制作方法

本申请要求于2016年4月22日提交的申请号为62/326,459,标题为“用于提供操作系统内核模式和用户模式同时硬件队列访问的系统和方法”的美国临时专利申请以及于2016年10月19日提交的申请号为15/298,053的美国专利申请的优先权和利益,所述申请的全部内容通过引用合并于此。

本公开总体上涉及计算机硬件装置。具体地,本公开涉及一种提供对使用nvme接口的装置的同时内核模式访问和用户模式访问的系统和方法。



背景技术:

目前,大多数硬盘驱动器(hd)和固态驱动器(ssd)被构造为通过串行高级技术附件(sata)总线连接到主机计算机系统(或简称“主机”)。然而,由于技术的进步,ssd的访问速度已增加到sata总线的最大传输速度已成为瓶颈的地步。这样,现在也存在被构造为通过周边组件互连高速(pcie或pci-e)总线连接到主机计算机系统的ssd,其中,所述周边组件互连高速(pcie或pci-e)总线比sata总线提供更高的最大传输速度和带宽可扩展性。

为了更充分地对pcie总线所提供的进行利用,还开发了非易失性存储器高速(nvme)规范。nvme规范是一种为了访问通过pcie总线附接的非易失性存储介质而开发的逻辑装置接口规范。相比于针对sata总线而开发的高级主机控制器接口(ahci)规范,nvme规范提供了显著的优势,诸如更低的延迟和经过改善的多处理器核支持。在下文中,根据nvme接口规范而采用和操作的装置被称为“nvme装置”。

nvme装置提供超过启用sata的装置的改善的性能的方法是通过利用多i/o队列。然而,这些i/o队列通常贮存在主机的存储器空间的内核空间中,这意味着它们仅可通过内核模式进程被访问。所以当仅具有用户模式访问并在主机的存储器空间的指定用户空间中运行的用户应用进程不得不在nvme装置上执行输入/输出(i/o)操作(例如,读取或写入)时,用户应用进程将必须向内核空间中的一个或更多个内核模块进程提交i/o请求。也就是说,用户应用进程将必须使用内核模式访问对i/o队列进行间接访问。然而,通过内核进程对i/o队列进行访问涉及使i/o请求通过一个或更多个抽象层(例如,块i/o层)或者通过一个或更多个抽象层(例如,块i/o层)对i/o请求进行处理,并不可避免地产生延迟。



技术实现要素:

本公开提供了一种使得能够通过主机计算机系统对使用nvme接口的nvme装置同时进行内核模式访问和用户模式访问的方法,其中,主机计算机系统包括被至少划分为内核空间以及一个或更多个用户空间的主机存储器空间。根据示例实施例,所述方法包括:通过至少保留内核空间中的第一范围的存储器地址来创建第一组的一个或更多个队列;向nvme装置的控制器提供第一组队列的位置地址和大小;从主机计算机系统上运行的用户应用进程接收对于用户模式访问的请求;响应于接收到对于用户模式访问的请求执行下列操作:通过至少保留为由所述用户应用进程使用而映射的第二范围的存储器地址来创建第二组的一个或更多个队列,并向所述用户应用进程和nvme装置的控制器提供第二组队列的位置地址和大小。

本公开还提供了一种非暂时性的存储有计算机可执行指令的计算机可读介质,其中,当所述计算机可执行指令被具有被至少划分为内核空间以及一个或更多个用户空间的主机存储器空间的主机计算机系统执行时,使得能够对使用nvme接口的nvme装置同时进行内核模式访问和用户模式访问。根据示例实施例,执行所述指令使得主机计算机系统至少执行以下操作:通过至少保留内核空间中的第一范围的存储器地址来创建第一组的一个或更多个队列;向nvme装置的控制器提供第一组队列的位置地址和大小;从主机计算机系统上运行的用户应用进程接收对于用户模式访问的请求;以及响应于接收到对于用户模式访问的请求执行下列操作:通过至少保留为由所述用户应用进程使用而映射的第二范围的存储器地址来创建第二组的一个或更多个队列,并向所述用户应用进程和nvme装置的控制器提供第二组队列的位置地址和大小。

本公开还提供了一种主机计算机系统,其中,所述主机计算机系统支持对使用nvme接口的nvme装置同时进行内核模式访问和用户模式访问。根据示例实施例,所述系统包括操作系统和存储器装置驱动器。所述操作系统被配置为运行用户应用进程和内核模式进程,并创建被至少划分为内核空间以及一个或更多个用户空间的主机存储器空间。所述存储器装置驱动器被配置为:通过至少保留内核空间中的第一范围的存储器地址来创建第一组的一个或更多个队列,向nvme装置的控制器提供第一组队列的位置地址和大小,从主机计算机系统上运行的用户应用进程接收对于用户模式访问的请求,并响应于接收到对于用户模式访问的请求执行下列操作:通过至少保留为由所述用户应用进程使用而映射的第二范围的存储器地址来创建第二组的一个或更多个队列,并向所述用户应用进程和nvme装置的控制器提供第二组队列的位置地址和大小。

附图说明

作为本公开的一部分而被包括的附图示出了各种实施例,并与上文给出的总体描述和下文给出的各种实施例的详细描述一起用于解释和教导此处描述的原理。

图1是描绘根据本公开的示例实施例的提供对nvme装置同时进行内核模式访问和用户模式访问的主机计算机系统的软件抽象的框图。

图2示出根据本公开的示例实施例的提供对nvme装置同时进行内核模式访问和用户模式访问的主机计算机系统的高级操作的流程图。

图3示出可用于实现本公开的实施例的示例计算机架构(例如,主机计算机系统)。

附图中的图形不一定是按比例绘制的,在整个附图中为了说明的目的,类似结构或功能的元件通常由相同的参考标号来表示。附图仅旨在帮助此处描述的各种实施例的描述,而没有描述此处公开的教导的每个方面并且不限制权利要求的范围。

具体实施方式

此处公开的每个特征和教导可被单独使用或与其他特征和教导结合使用,以提供本系统和方法。参考附图单独地且相结合地描述了利用许多这些特征和教导的代表性示例。尽管此处的详细描述向本领域的普通技术人员示出用于实践本教导的多个方面的进一步的细节,但它不限制权利要求的范围。因此,在详细的描述中公开的特征的组合是本教导的代表性示例,且没有必要在最广泛的意义上实施本教导。

本公开参考nvme装置、nvme规范和其他特定教导作为示例来示出此处的本系统和方法。然而,本系统和方法及其应用不限于这些示例,并可应用于依赖队列与主机计算机系统进行通信的其它装置。

如之前讨论的,每个用户应用进程在主机的存储器空间的指定用户空间中运行,并且通常不能对主机的存储器空间的内核空间中的存储器位置进行访问。因此,当用于与nvme装置进行通信的i/o队列贮存在内核空间中时,用户应用进程必须通过内核空间和各种抽象层来在nvme装置上执行i/o操作,从而导致延迟。本公开的实施例通过使得能够对nvme装置同时进行内核模式访问和用户模式访问而克服了延迟问题。这样,需要高性能和低延迟的用户应用进程可在内核进程保留对nvme装置进行的内核模式访问的同时对nvme装置进行用户模式访问。

图1是描绘根据本公开的示例实施例的提供对nvme装置同时进行内核模式访问和用户模式访问的主机计算机系统的软件抽象的框图。主机计算机系统(或简称为“主机”)100运行操作系统,并包括被至少划分为内核空间110以及第一用户空间120和第二用户空间130的主机存储器空间。内核空间110包括块i/o层111和nvme装置驱动器112,它们每个都包括一个或更多个内核进程。内核空间110还包括第一组队列113,诸如管理提交队列asq、管理完成队列acq、i/o提交队列isq1和i/o完成队列icq1。内核空间110还包括第二组队列132,诸如i/o提交队列isq2和i/o完成队列icq2。然而,第一组队列113和第二组队列132不限于图1示出的那些。

isq1将i/o命令(例如,读取命令和写入命令)转发到nvme装置200,icq1将那些i/o命令的完成状态转发回主机100。按照类似的方式,asq将管理命令转发到nvme装置200,icq1将那些管理命令的完成状态转发回主机100。管理命令的示例包括用于创建和删除i/o提交/完成队列的命令。nvme装置驱动器112可通过保留内核空间中的一范围的存储器地址并向nvme控制器201提供第一组队列113的位置地址和大小(例如,通过向asq进行写入)来创建第一组队列113。

运行在第一应用空间120中的第一应用进程121可通过使用内核模式访问对第一组队列113进行间接读取和写入来在nvme装置200上执行i/o操作。同时,在第二应用空间130中运行的第二应用进程131可通过使用用户模式访问对第二组队列132进行直接读取和写入来在nvme装置200上执行i/o操作。第二用户应用进程131能够通过用户模式访问直接访问第二组队列132,这是因为nvme装置驱动器112已将第二组队列132映射到第二用户空间130,使得第二用户应用进程131能够在无需内核介入的情况下访问队列。

第一应用进程121可通过将i/o请求提交到块i/o层111来在nvme装置200上执行i/o操作,其中,块i/o层111随后对i/o请求进行处理并将i/o请求转发到nvme装置驱动器112。尽管没有在图1中示出,但i/o请求在到达nvme装置驱动器112之前可被其他层或子系统处理。

nvme装置驱动器112可响应于接收到i/o请求将相应的i/o命令写入isq1的尾部位置。nvme装置驱动器112还可对与isq1对应的isq1尾部门铃寄存器(taildoorbellregister)的值进行更新。新的值可以是指向经过更新的isq1的尾部位置的指针。isq1尾部门铃寄存器可以是nvme控制器201中的多个寄存器202中的一个,并可通过存储器映射的i/o(mmio)通信而被nvme装置驱动器112访问。更新isq1尾部门铃寄存器的值或按响门铃的操作使mvme控制器201知道新的i/o命令已在isq1中排队。

nvme控制器201可在isq1的头部位置开始从isq1获得i/o命令并处理i/o命令。虽然nvme控制器201可从isq1按照从头部到尾部的顺序获得i/o命令,但是它可以以任何顺序执行那些命令。在完成i/o命令的执行后,nvme控制器201可将完成状态写入icq1的尾部位置,并对主机100产生例如msi-x中断。

nvme装置驱动器112可在icq1的头部位置开始从icq1获得完成状态。在获得与来自第一应用进程121的i/o请求对应的完成状态后,nvme装置驱动器112可对请求的i/o操作的完成进行处理并使完成状态穿过块i/o层111(以及图1中未示出的可能的其他层或子系统)传回第一应用进程121。nvme装置驱动器112还可对与icq1对应的icq1头部门铃寄存器的值进行更新。新的值可以是指向经过更新的icq1的头部位置的指针。icq1头部门铃寄存器可以是nvme控制器201中的多个寄存器202中的一个寄存器,其中,所述一个寄存器可经由mmio通信而被nvme装置驱动器112访问。

如前所述,当第一应用进程121通过内核模式访问对第一组队列113进行间接访问时,第二应用进程131可通过用户模式访问对第二组队列132进行访问。然而,如第一组队列113,第二组队列132可能需要在使用前被创建。例如,第二应用进程131可向nvme装置驱动器112提交针对用户模式访问的请求,其中,所述请求可包括用于创建第二组队列132的请求。该请求可通过输入/输出控制(ioctl)系统调用而被发送到例如nvme装置驱动器132。

nvme装置驱动器112可通过保留被映射到第二用户空间130的内核空间110中的一范围的存储器地址并将第二组队列的位置地址和大小通过ioctl系统调用提供给第二应用进程112并通过对asq的命令提供给nvme控制器201来创建第二组队列132。例如,nvme装置驱动器112可向asq写入第一命令以创建isq2,并向asq写入第二命令以创建icq2。nvme装置驱动器112还可更新与asq对应的asq尾部门铃寄存器的值。新的值可以是指向asq的尾部位置的指针。asq提交尾部门铃寄存器可以是nvme控制器201中的多个寄存器202中的一个。

nvme控制201可在asq的头部位置开始从asq获得管理命令并处理管理命令。虽然nvme控制器201可从asq按照从头部到尾部的顺序获得管理命令,但是它可以以任何顺序执行那些命令。在完成管理命令的执行后,nvme控制器201可将完成状态写入acq的尾部位置,并对主机100产生例如msi-x中断。

nvme装置驱动器112可在acq的头部位置开始从acq获得完成状态。在获得与来自第二应用进程131的队列创建请求对应的完成状态后,nvme装置驱动器112可通过ioctl调用将完成状态传回第二应用进程131,其中,所述完成状态可伴随着第二组队列132的位置地址和大小。nvme装置驱动器112还可对与acq对应的acq头部门铃寄存器的值进行更新。新的值可以是指向经过更新的acq的头部位置的指针。acq头部门铃寄存器可以是nvme控制器201中的多个寄存器202中的一个。

在第二组队列132被创建后,第二应用进程131可通过用户模式访问对第二组列队132进行直接读取和写入,从而在nvme装置200上执行i/o操作,同时绕过内核进程(诸如在块i/o层111中的那些)。第二应用进程121可通过将对应的i/o命令写入isq2的尾部位置而在nvme装置200上执行i/o操作。nvme装置驱动器112还可对与isq2对应的isq2尾部门铃寄存器的值进行更新。新的值可以是指向经过更新的isq2的尾部位置的指针。isq2尾部门铃寄存器可以是nvme控制器201中的多个寄存器中的一个。对isq2尾部门铃寄存器的值进行更新的操作使nvme控制器201知道新的i/o命令已在isq2中排队。

nvme控制器201可在isq2的头部位置开始从isq2获得i/o命令并处理i/o命令。虽然nvme控制器201可从isq2以从头部到尾部的顺序获得i/o命令,但是它可以以任何顺序执行那些命令。在完成i/o命令的执行之后,nvme控制器201可将完成状态写入icq2的尾部位置,并对主机100产生例如msi-x中断。

第二应用进程131可在icq2的头部位置开始从icq2获得完成状态。在获得与请求的i/o操作对应的完成状态之后,第二应用进程131可对请求的i/o操作的完成进行处理,并对与icq2对应的icq2头部门铃寄存器的值进行更新。新的值可以是指向经过更新的icq2的头部位置的指针。icq2头部门铃寄存器可以是nvme控制器201中的多个寄存器202中的一个。

因此,根据本系统和方法的示例实施例的主机100提供对nvme装置的同时的内核模式访问和用户模式访问。这样,使用对nvme装置进行的用户模式访问来提供需要高性能和低延迟的用户应用进程,同时内核进程保留对nvme装置的内核模式访问。

图2示出根据本公开的示例实施例的提供对nvme装置同时进行内核模式访问和用户模式访问的主机计算机系统的高级操作的流程图。用户模式访问可包括:在nvme装置上执行i/o操作,同时绕过主机计算机系统的内核空间中的块i/o层。主机计算机系统与nvme装置之间的通信可遵守nvme规范。

虽然主机计算机系统和nvme装置的一个或更多个组件在下面被描述为执行所公开的操作,但是本系统和方法不局限于此,主机计算机系统和nvme装置的其他组件可执行那些操作或相结合地执行那些操作。存储器装置驱动器通过至少保留内核空间中的第一范围的存储器地址来创建第一组的一个或更多个队列(在201)。第一组队列可至少包括:管理提交队列、管理完成队列、i/o提交队列和i/o完成队列。存储器装置驱动器向nvme装置的控制器提供第一组队列的位置地址和大小(在202)。

存储器装置驱动器从主机计算机系统上运行的用户应用进程接收对于用户模式访问的请求(在203)。存储器装置器驱动器响应于接收到对于用户模式访问的请求,通过至少保留为由用户应用进程使用而映射的第二范围的存储器地址来创建第二组的一个或更多个队列(在204)。第二组队列可至少包括i/o提交队列和i/o完成队列。存储器装置驱动器还响应于接收到对于用户模式访问的请求向用户应用进程和nvme装置的控制器提供第二组队列的位置地址和大小(在205)。

在第一组队列和第二组队列被创建后,主机计算机系统上运行的用户应用进程可对第二组队列中的i/o提交队列执行i/o命令的虚拟存储器写入操作,并对与第二组队列中的i/o提交队列对应的提交尾部门铃寄存器的值进行更新。同时,内核模式进程可对第一组队列中的i/o提交队列执行i/o命令的虚拟存储器写入操作,并对与第一组队列中的i/o提交队列对应的提交尾部门铃寄存器的值进行更新。换言之,用户应用进程和内核模式进程可分别并行地执行以下操作:对第二组队列中的i/o提交队列的虚拟存储器写入操作和对第一组队列中的i/o提交队列的虚拟存储器写入操作。

图3示出可用于实现本系统和方法的实施例的示例计算机架构。该示例性计算机架构可用于实现本公开中描述的一个或更多个组件,包括但不限于主机计算机系统。架构300的一个实施例包括:系统总线320,用于传送信息;处理器310,与总线320连接以对信息进行处理。架构300还包括与总线320连接的随机存取存储器(ram)或其他动态存储装置325(此处称为主存储器),用于存储信息和将由处理器310执行的指令。主存储器325还可用于在由处理器执行指令期间中存储临时变量或其他中间信息。架构300还可包括与总线320连接的只读存储器(rom)和/或其他静态存储装置326,用于存储静态信息和由处理器310使用的指令。

数据存储装置321(诸如磁盘或光盘)及其对应驱动器也可连接到架构300以存储信息和指令。架构300还可通过i/o接口330连接到第二i/o总线350。多个i/o装置可与i/o总线连接,包括:显示装置343、输入装置(例如,字幕数字输入装置342、光标控制装置341和/或触摸屏装置)。

通信装置340允许通过网络访问其他计算机(例如,服务器或客户端)。通信装置340可包括一个或更多个调制解调器、网络接口卡、无线网络接口或其他接口装置(诸如用于连接到以太网、令牌环网或其他类型的网络的接口装置)。

此处的详细描述的一些部分是以对计算机存储器中的数据位的操作的算法和符号表示的形式呈现的。这些算法描述和表示是数据处理领域技术人员用来最有效地将他们的工作的实质传达给其他本领域技术人员的手段。此处的算法通常被认为是导致所需结果的自洽的序列的步骤。所述步骤是那些需要物理量的物理操作的。通常(虽然不必),这些物理量采用能够被进行存储、传输、组合、比较和其他操作的电信号或磁信号形式。主要出于通用的原因,将这些信号称为位、值、元素、符号、字符、术语、数字等已被多次证明是方便的。

然而,应该记住的是,所有这些及类似的术语将与适当的物理量关联,并仅仅是应用于这些量的方便标签。除非另有特别指出,否则正如从下面的描述显而易见,可以理解的是贯穿描述始终,使用诸如“处理”或“计算”或“运算”或“确定”或“显示”等的术语的讨论是指计算机系统或类似电子计算装置的动作和处理,其中,所述计算机系统或类似电子计算装置对表示为计算机系统的寄存器和存储器内的物理(电子)量的数据进行操作并将其转换为类似地表示为计算机系统存储器或寄存器或其他这样的信息存储器、传输或显示装置内的物理量的其他数据。

本公开还涉及一种用于执行此处操作的设备。该设备可以是专门为所需的目的而构造的,或者它可包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这样的计算机程序可存储在计算机可读存储介质(诸如但不限于,任何类型的盘(包括软盘、光盘、cd-rom和磁光盘)、只读存储器(rom)、随机存取存储器(ram)、eprom、eeprom、磁卡或光卡、或任何类型的适合于存储电子指令的介质,并且均被连接到计算机系统总线)中。

此处呈现的算法本质上不涉及任何具体的计算机或其他设备。各种通用系统、消息服务器或个人计算机可根据此处的教导使用程序,或构造更专用的设备来执行所需的方法步骤可能被证明是更方便。各种这些系统所需的结构出现在上面的描述中。各种编程语言可用于实现如此处描述的公开的教导。

此外,代表性示例和从属权利要求的各种特征可以以没有被具体且明确列举出的方式结合,以提供本教导的另外的实施例。图中所示的组件的尺寸和形状被设计为帮助理解本教导如何被实践,并且不限制在示例中示出的尺寸和形状。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1