机202确定并从联合主机202发送至主机系统102。
[0054]队列的存储器分配可小心选择将一个或多个队列操作映射至实际由联合主机202控制的资源的参数。特别地,一个队列需要存储器保持队列条目,需要目标上的“门铃”BAR地址通知该目标新的条目在提交队列中可用或者已经从完成队列消耗掉,以及需要目标的中断向量通知该队列的拥有者新的条目何时已被该目标添加至完成队列。最后,在该队列中表示的真正命令可需要来回传输一些存储以执行该命令操作。
[0055]为了在此实例中提交命令,联合主机202可为I/O提交队列208 (例如,在BAR存储器中)在存储器中填充一个提交条目。在I/O提交队列208中提交一个条目后,联合主机202可发出对等存储器写入以更新该队列的目标的门铃寄存器。例如,如果联合主机202为目标116实例化存储命令,联合主机202可更新目标116的存储器地址(例如,在BAR空间中),它由主机系统102提供至联合主机202。然后联合主机202可等待命令完成。目标116可检测门铃写入并可通过发出适当的存储器读取从联合主机202的I/O提交队列208获取命令,而且可处理该命令。如图2所示,I/O提交队列208在联合主机202的存储器中。根据一些实施例,I/O提交队列可保持在系统存储器128中或可能在其他位置中,举例来说诸如在另一固态设备(例如,连接至相同PC1-Express构造的PCIe设备)的存储器空间中。队列或其他数据结构诸如数据缓存的位置可依赖于一个或多个因素,包括但并不限于,联合主机上可用的存储器数量、主机设备上可用的存储器数量、主机设备的利用水平、联合主机的利用水平、在高速外围组件互联(PCIe)开关和主机设备之间可用的带宽量、以及在高速外围组件互联(PCIe)开关和联合主机之间可用的带宽量。在队列或其他数据结构保持在与主机相关的存储器(例如,系统存储器128)中的实施例中,性能增益仍可通过委托命令至联合主机并减少主机CPU利用率来实现。
[0056]—旦完成命令,目标(例如,目标116)将发出存储器写入以填写I/O完成队列(例如,I/O完成队列210)中的完成条目。然后目标可发出存储器写入至信号完成。对于消息信号中断扩展(MS1-x)兼容的目标,该目标可使用联合主机202的存储器写入至已配置的MS1-X中断。由于该中断的地址也位于联合主机的BAR空间中,存储器写入可通过PCIExpress开关108被直接路由至联合主机,而不是主机系统102。
[0057]如果目标并不支持MS1-X中断方案,主机系统102可用于将遗留的(轮询、INTX或MSI)中断酌情从目标中继至联合主机202。这可能将主机CPU104的争用增加为一种性能限制,但通过对等数据传输可允许增加的带宽。在该配置过程中,主机系统102可意识到目标并不支持MS1-X中断并且自己可做好准备以为联合主机202调解可用的中断方案。联合主机202可安排为意识到所述传达,但这并不必要。当主机系统102为联合主机202中继中断时,主机系统102可按照原始的NVMe方案解码中断。使用已解码的信息,主机系统102可确定该中断可能已经为了由联合主机202拥有的委托的队列而被发送。在一些实施例中,归因于在多个队列间共享的中断导致解码的不确定性,主机系统102可作出保守决策以通知联合主机202即使可能还不存在需要联合主机去做的工作。这是一种兼容选项并且其他配置可用于性能场景。在通知后,联合主机202现在知道完成条目可用并可在它空闲时从完成队列中将其读出。
[0058]为了进一步减少对外部设备的依赖,联合主机可使用更多分配的存储器空间(例如,BAR空间)以存储可能包括命令、分散-聚集列表或用于处理命令的物理区域页面(PRP)的数据缓存(例如,数据缓存206)。分散-聚集列表和物理区域页面(PRP)可描述额外数据缓存(它可能与分散-聚集列表或物理区域页面(PRP)位于相同或不同存储器区域)的存储器位置。在这些实施例中,目标可发出直接路由至联合主机202而不是主机系统102的存储器读取和写入。
[0059]这些技术的应用可允许PC1-Express设备或存储子系统实现显著的性能提升。实施例可用于上述很多应用并超出了仅仅存储和检索数据,举例来说诸如以加速高性能计算平台或实现高带宽流媒体的实时捕获。
[0060]实施例可使用未修改形式的NVM协议(即,任何系统可共享位于主机和联合主机之间的现有NVM驱动元件)。
[0061]图3描述了根据本公开一个实施例的用于对等PCIe存储传输的示例模块。如图3所示,对等传输模块310可包括队列创建模块312、队列管理模块314以及命令处理模块316。
[0062]队列创建模块312在一些实施例中可驻留于主机上或者与主机相关的存储媒体上,并可包括用于创建和删除队列的逻辑。这可包括识别和分配存储器空间(例如,在与主机相关的系统存储器中,在联合主机的BAR空间中,在与联合主机相关的其他存储器空间中,或者在与通信地耦合至联合主机的固态设备诸如PCIe设备相关的存储器空间中)。
[0063]队列管理模块314在一些实施例中可驻留在联合主机或者与联合主机相关的存储媒体上,并可包括用于处理命令的指令。队列管理模块314还可存储由与队列、门铃、中断、数据缓存、或其他数据结构相关的主机提供的一个或多个存储器位置。
[0064]命令处理模块316在一些实施例中可驻留在联合主机或在与联合主机相关的存储媒体上并可包括用于产生命令的指令。
[0065]图4描述了根据本公开一个实施例的说明了对等PCIe存储传输的流程图。然而该过程400仅为示例。该过程400可被改变,例如,通过增加、改变、删除或重新安排各个阶段。在阶段402,该过程可开始。
[0066]在阶段404,可确定队列存储是否将位于联合主机上还是其他位置。在一些实施例中,队列可被分配在单独的PCIe设备上。队列或其他数据结构诸如数据缓存的位置可依赖于一个或多个因素,包括但并不限于,联合主机上可用的存储器数量、主机设备上可用的存储器数量、主机设备的利用水平、联合主机的利用水平、高速外围组件互联(PCIe)开关和主机设备之间的可用带宽量以及高速外围组件互联(PCIe)开关和联合主机之间的可用带宽量。在队列或其他数据结构保持在与主机相关的存储器(例如,系统存储器128)中的实施例中,性能提升仍可通过将命令委托至联合主机和减少主机CPU利用率实现。如果要在联合主机上创建队列,该方法可在阶段410继续。如果要在主机上创建队列,该方法可在阶段406继续。
[0067]在阶段406,队列(例如,I/O提交队列和I/O完成队列)可被创建在与主机相关的系统存储器(例如,图1的系统存储器128)中。根据一些实施例,主机可创建队列并可提供存储器分配细节至联合主机。根据一个或多个实施例,联合主机确定存储器分配信息并提供存储器分配信息至主机。
[0068]在阶段408,一存储命令可被从联合主机提交至主机I/O提交队列。这一提交可能并不减少在PCIe Express开关之上产生的带宽瓶颈,但可能仍然减少了主机CPU利用率。
[0069]在阶段410,队列(例如,I/O提交队列和I/O完成队列)可被创建在与联合主机相关的系统存储器(例如,BAR存储器)中。根据一些实施例,主机可创建队列并可提供存储器分配细节至联合主机。根据一个或多个实施例,联合主机确定存储器分配信息并提供该存储器分配信息至主机。
[0070]在阶段412,一存储命令可被从联合主机提交至联合主机I/O提交队列。这一提交可能在完全没有主机参与的情况下发生并可能减少PCIe Express开关之上的流量以及主机CPU利用率。
[0071 ] 在阶段414,一门铃命令可被联合主机提交至目标设备的已分配存储器空间。目标设备上门铃的已分配存储空间可预先由主机提供至联合主机。
[0072]在阶段416,可确定队列位于主机还是联合主机上。在一些实施例中,队列可被分配在独立的PCIe设备上。如果队列位于主机上该方法400可在阶段418继续。如果队列位于联合主机上该方法400可在阶段420继续。
[0073]在阶段418,一获取命令可被从目标设备发送至PCI Express开关并转发至主机。
[0074]在阶段420,一获取命令可被从目标设备发送至PCI Express开关并转发至联合主机。
[0075]在阶段424,可确定物理区域页面(PRP)或分散-聚集列表是否存在于主机上的数据缓存中或者联合主机存储器中的数据缓存中。如果PRP或分散-聚集列表存在于主机上的数据缓存中,该方法可在阶段428继续。如果PRP或分散-聚集列表存在于联合主机的数据缓存中,该方法可在阶段426继续。
[0076]在阶段426,可使用联合主机的数据缓存将数据在联合主机和目标设备之间传输。
[0077]在阶段428,可使用主机的数据缓存将数据在联合主机和目标设备之间传输。
[0078]在阶段430,该方法400可结束。
[0079]图5描述了根据本公开一个实施例的说明了对等PCIe存储传输的流程图。然而该过程500是示例性的。该过程500可被改变,例如通过阶段的增加、修改、删除或重新安排。在阶段502,该过程500可开始。
[0080]在阶段504,可确定队列位于主机还是联合主机上。在一些实施例中,队列可被分配在单独的PCIe设备上。如果队列位于主机上,该方法500可在阶段506继续。如果队列位于联合主机上,该方法500可在阶段508继续。如果队列位于主机上,在阶段506 —完成指示可被写入主机I/O完成队列。如果队列位于联合主机上,在阶段508,一完成指示可被写入联合主机I/O完成队列。
[0081]在阶段510,可确定目标设备是否支持MS1-X中断。如果目标设备支