包括存储装置的系统的制作方法
未命名
07-29
阅读:100
评论:0
包括存储装置的系统
1.本技术要求2022年1月24日提交的第63/302,561号的美国临时专利申请的权益,所述专利申请出于所有目的通过引用包含于此。
技术领域
2.公开总体上涉及存储装置,并且更具体地,涉及能够实现低读取时延的包括存储装置的系统。
背景技术:
3.一些应用可能依赖于大小较大的数据。如果该数据尚未被存储在存储器中,则可从存储装置读取数据。但是从单个存储装置访问数据可形成瓶颈,减慢数据访问和由此产生的计算。
4.仍然需要提供对数据的低时延访问。
技术实现要素:
5.公开的实施例可包括系统。所述系统可包括用于存储数据的存储装置和用于从存储装置读取数据的加载模块。调度器可接收输入/输出(i/o)请求并且基于i/o请求的大小将i/o请求传送给加载模块。
6.在一个总体方面,一种包括存储装置的系统,所述系统包括:存储装置,用于存储数据;加载模块,用于至少部分地基于输入/输出(i/o)请求从存储装置读取所述数据;以及调度器,用于接收所述i/o请求并且至少部分地基于所述i/o请求的大小小于阈值来将所述i/o请求放置在队列中,以传送给加载模块。
7.在一个总体方面,一种用于包括存储装置的的系统的方法,所述方法包括:在调度器处接收输入/输出(i/o)请求;由调度器确定所述i/o请求的大小;由调度器至少部分地基于所述i/o请求的大小小于阈值来识别队列;由调度器将所述i/o请求放置在所述队列中,以传送给加载模块;以及由加载模块至少部分地基于所述i/o请求从存储装置读取数据。
8.在一个总体方面,一种制品,所述制品包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时,使得:在调度器处接收输入/输出(i/o)请求;由调度器确定所述i/o请求的大小;由调度器至少部分地基于所述i/o请求的大小小于阈值来识别队列;由调度器将所述i/o请求放置在所述队列中,以传送给加载模块;以及由加载模块至少部分地基于所述i/o请求从存储装置读取数据。
附图说明
9.以下描述的附图是可如何实现公开的实施例的示例,并且不旨在限制公开的实施例。公开的各个实施例可包括未在特定附图中示出的元件和/或可省略特定附图中示出的元件。附图旨在提供说明并且可不按比例绘制。
10.图1示出根据公开的实施例的被配置为在处理计算中支持对存储装置的低时延访
问的机器。
11.图2示出根据公开的实施例的图1的机器的细节。
12.图3示出根据公开的实施例的图1的多进程系统的细节。
13.图4示出根据公开的实施例的发给图1的多进程系统的输入/输出(i/o)请求的细节。
14.图5示出根据公开的实施例的图3的转换表的细节。
15.图6示出根据公开的实施例的图3的i/o调度器的细节。
16.图7示出根据公开的实施例的图3的加载模块的细节。
17.图8示出根据公开的实施例的图1的计算系统的细节。
18.图9示出根据公开的实施例的使用图1的多进程系统处理图4的i/o请求的示例程序的流程图。
19.图10示出根据公开的实施例的使用图1的多进程系统处理图4的i/o请求的示例程序的替代流程图。
20.图11示出根据公开的实施例的图3的i/o调度器在对图4的i/o请求进行排队时使用优先级排队的示例程序的流程图。
21.图12示出根据公开的实施例的图3的管理器将图4的i/o请求分配给图3的加载模块的示例程序的流程图。
22.图13示出根据公开的实施例的图3的加载模块从图1的存储装置读取数据的示例程序的流程图。
23.图14示出根据公开的实施例的图1的计算系统处理图8的计算请求的示例程序的流程图。
24.图15a示出根据公开的实施例的图8的计算调度器布置图8的处理元件来处理图8的计算请求的示例程序的流程图。
25.图15b继续根据公开的实施例的图8的计算调度器布置图8的处理元件来处理图8的计算请求的示例程序的图15a的流程图。
具体实施方式
26.现在将详细参照公开的实施例,公开的示例在附图中示出。在以下具体实施方式中,阐述了许多具体细节以使得能够透彻理解公开。然而,应当理解,本领域普通技术人员可在没有这些具体细节的情况下实践公开。在其他情况下,未详细描述公知的方法、程序、组件、电路和网络,以免不必要地模糊实施例的各方面。
27.将理解,尽管在此可使用术语第一、第二等来描述各种元件,但是这些元件不应受这些术语的限制。这些术语仅用于将一个元件与另一元件区分开。例如,在不脱离公开的范围的情况下,第一模块可被称为第二模块,并且类似地,第二模块可被称为第一模块。
28.在公开的描述中使用的术语在此仅用于描述特定实施例的目的,而不旨在限制公开。除非上下文另外清楚地指示,否则如在公开的描述和所附权利要求中所使用的,单数形式也旨在包括复数形式。还将理解,如在此所使用的术语“和/或”表示并且包括相关联的所列项的一个或多个的任何和所有可能的组合。还将理解,当在本说明书中使用时,术语“包括”和/或“包含”表明存在陈述的特征、整数、步骤、操作、元件和/或组件,但不排除存在或
添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。附图的组件和特征不必按比例绘制。
29.诸如深度学习推荐模型(dlrm)的一些应用可能依赖于大量数据。dlrm可依赖于嵌入表,嵌入表的大小可以是太字节。将大量数据从存储装置传送给存储器以进行处理可需要时间。因为存储装置可能具有不足以满足所请求的所有数据的带宽限制,所以如果多个应用试图处理存储在存储装置上的数据,则该问题可加剧。
30.公开的实施例通过引入存储装置的系统来解决这些问题。存储装置可以是例如固态驱动器(ssd)。数据可跨多个存储装置分布,这可减少单个存储装置上的负载以提供所有请求的数据。调度器可基于将要检索的数据的大小将i/o请求调度到一个或多个队列中。输入/输出(i/o)处理管理器可从队列检索请求,并且可识别加载模块以从存储装置检索数据。
31.图1示出根据公开的实施例的被配置为在处理计算中支持对存储装置的低时延访问的机器。在图1中,也可被称为主机或系统的机器105可包括处理器110、存储器115以及存储装置120-1和120-2(可被统称为存储装置120)。处理器110可以是任何种类的处理器。(为了便于说明,处理器110以及以下讨论的其他组件被示出在机器外部:公开的实施例可将些组件包括在机器内)虽然图1示出单个处理器110,但是机器105可包括任何数量的处理器,每个处理器可以是单核或多核处理器,每个处理器可实现精简指令集计算机(risc)架构或复杂指令集计算机(cisc)架构(以及其他可能性),并且可以以任何期望的组合混合。
32.处理器110可结合(couple)到存储器115。存储器115可以是任何种类的存储器(诸如,闪存、动态随机存取存储器(dram)、静态随机存取存储器(sram)、持久随机存取存储器、铁电随机存取存储器(fram)或非易失性随机存取存储器(nvram)(诸如,磁阻随机存取存储器(mram))等)。根据需要,存储器115可以是易失性或非易失性存储器。存储器115还可以是不同存储器类型的任何期望的组合,并且可由存储器控制器125管理。存储器115可用于存储可被称为“短期”的数据:即,预计不会被长期存储的数据。短期数据的示例可包括临时文件、由应用在本地使用的数据(可已经从其他存储位置复制)等。
33.处理器110和存储器115还可支持操作系统,在操作系统下可运行各种应用。这些应用可发出请求(也可被称为命令)来从任一存储器115读取数据或将数据写入任一存储器115。当存储装置120用于支持经由某种文件系统而读取或写入数据的应用时,存储装置120可使用装置驱动器130被访问。虽然图1示出两个存储装置120,但是机器105中可存在任何数量(一个或多个)的存储装置。存储装置120可各自支持任何期望的一个或多个协议(包括例如非易失性存储器快速(nvme)协议)。不同的存储装置120可支持不同的协议和/或接口。
34.虽然图1使用通用术语“存储装置”,但是公开的实施例可包括可受益于使用计算存储单元的任何存储装置格式,其示例可包括硬盘驱动器和固态驱动器(ssd)。以下对“ssd”的任何引用应当被理解为包括公开的这样的其他实施例。此外,可混合不同类型的存储装置。例如,存储装置120-1可以是硬盘驱动器,并且存储装置120-2可以是ssd。
35.机器105还可包括多进程系统135(multi-process system)和计算系统140。多进程系统135可基于从在处理器110上(或在图1中未示出的远程机器上的处理器上)运行的应用接收的输入/输出(i/o)请求,来管理从存储装置120读取数据。i/o请求可从存储装置120请求可在计算处理中使用的数据。也就是说,给定计算请求,可在由多进程系统135处理的
i/o请求中首先从存储装置120请求将要由计算请求处理的数据。多进程系统135可基于i/o请求的大小来调度从存储装置120读取数据,以便减少时延(完成计算处理所需的时间(包括读取数据并对数据执行适当命令所需的时间))。以下参照图3进一步讨论多进程系统135。
36.一旦数据被多进程系统135读取,计算系统140就可执行计算处理来处理数据。以下参照图8进一步讨论计算系统140。
37.如上所述,机器105可包括多个存储装置120。通过包括多于一个存储装置120,i/o请求中所请求的数据可跨多个存储装置120分布。通过将数据跨多个存储装置120分布,读取请求可由每个存储装置120处理:如果这些读取请求被并行处理,则所请求的数据可比如果所有数据仅被存储在一个存储装置120上更快地读取。但是公开的实施例可包括一个存储装置120(没有从多个存储装置120并行读取数据的潜在益处)。
38.虽然图1将机器105示出为包括多进程系统135和计算系统140,但是公开的实施例可使这些组件位于其他地方。例如,多进程系统135可被包括作为机器105的一部分,而计算系统140可以是跨网络到达的另一机器的一部分。实际上,公开的实施例可将存储装置120、多进程系统135和计算系统140各自分离在经由一些网络或通信通路连接的分离的多个机器105上。
39.图2示出根据公开的实施例的图1的机器的细节。在图2中,通常,机器105包括一个或多个处理器110,处理器110可包括存储器控制器125和时钟205,时钟205可用于协调机器的组件的操作。处理器110还可结合到存储器115,作为示例,存储器115可包括随机存取存储器(ram)、只读存储器(rom)或其他的状态保存介质。处理器110还可结合到存储装置120和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可连接到总线215,用户接口220和可使用i/o引擎225管理的输入/输出(i/o)接口端口以及其他组件可连接到总线。
40.在解释图1的多进程系统135的结构和操作之前,考虑可使用图1的机器105处理的各种请求可以是有帮助的。可在图1的处理器110上运行的示例应用是作为机器学习算法的示例的深度学习推荐模型(dlrm)。dlrm应用可已经建立了服务等级协定(sla),服务等级协定可管理处理查询应该花费多长时间。换句话说,dlrm可期望特定查询花费特定量的时间:如果查询花费的时间长于所述量的时间,则dlrm可在它继续处理之前等待比期望的时间长的时间。
41.为了执行查询,图1的机器105可需要检索所讨论的数据,然后对该数据执行计算处理。检索数据和处理计算都可花费一些量的时间。
42.如果查询相对小(例如,涉及少于256个数据点),则检索数据可相对快,并且执行查询的整个处理可满足sla。但是如果查询相对大(例如,涉及多于256个数据点),则检索数据可花费足够长的量的时间,使得sla可不被满足。由于dlrm可具有可变的查询大小,因此,可预计发生相对大的查询,并且检索存储的数据的处理可大于执行计算处理所需的时间。由于不期望图1的机器105不满足sla,因此,期望减少从图1的存储装置120检索数据所需的时间:即,实现数据检索的低时延。
43.图3示出根据公开的实施例的图1的多进程系统135的细节。在图3中,多进程系统135可包括i/o调度器305、队列310-1、310-2和310-3(可被统称为队列310)以及i/o进程/存
储池315。
44.i/o调度器305可从在图1的处理器110上运行的应用接收i/o请求。这样的请求可标识将要从存储装置120读取以用于计算请求(将要由图1的计算系统140处理的计算请求)的数据。
45.i/o调度器可确定i/o请求的大小:即,将要从存储装置120读取的将要在执行计算处理中使用的数据量。使用i/o请求的大小,i/o调度器可选择多个队列310中的用于放置i/o请求的一个队列310。
46.在图3中,示出三个队列310-1至310-3。每个队列310可用于存储不同大小的i/o请求。例如,队列310-1可用于存储用于检索大小不大于例如128个向量的数据(嵌入表的行)的i/o请求;队列310-2可用于存储用于检索大小大于例如128个向量但大小不大于例如512个向量的数据的i/o请求;并且队列310-3可用于存储用于检索大小大于例如512个向量的数据的i/o请求。以这样的方式,i/o请求可大致基于将要检索的数据量而被分组,该数据量可表示检索数据所需的时间量。
47.虽然图3示出三个队列310,但是公开的实施例可包括任何数量(一个或多个)的队列310。例如,如果使用优先级排队,则公开的实施例可包括一个队列310。如果使用优先级排队,则i/o调度器305可基于将要从存储装置120读取的数据的大小来确定i/o请求的优先级,并且可将优先级标签与队列310中的i/o请求相关联,使得i/o进程/存储池315可确定i/o请求的相对优先级。例如,如果i/o请求请求将要读取不超过128个嵌入向量(嵌入表的行)的数据,则优先级标签可指示该请求具有优先级1;如果i/o请求请求将要读取多于128个嵌入向量的数据但不多于512个嵌入向量的数据,则优先级标签可指示该请求具有优先级2;并且如果i/o请求请求将要读取多于512个嵌入向量的数据,则优先级标签可指示该请求具有优先级3。如队列310的数量一样,可使用任何数量的不同优先级:如上所述的三个优先级仅仅是优先级的示例数量。
48.在公开的一些实施例中,队列310可以是先进先出(fifo)队列。在公开的其他实施例中,可使用其他类型的队列310。
49.注意,即使只有一个队列310,队列的选择在技术上仍然可基于i/o请求的大小(即使所有i/o请求都可被放置在该队列中)。此外,如果只有一个队列,则该队列可不是fifo队列。也就是说,i/o请求可以以与它们被添加到队列不同的顺序从队列移除(例如,比优先级2i/o请求稍后添加到队列的优先级1i/o请求仍然可首先从队列移除并且首先被处理)。
50.一旦i/o调度器305已经将i/o请求放置在队列310中,i/o进程/存储池315就可从队列310检索i/o请求。通过使用多个队列310(或通过使用不同的优先级),i/o进程/存储池315可选择接下来处理哪个i/o请求。以这样的方式,i/o请求可由i/o进程/存储池315以与它们从在图1的处理器110上运行的应用被发送到多进程系统135不同的顺序来处理。
51.i/o进程/存储池315可使用任何期望的技术从队列310检索i/o请求。例如,i/o进程/存储池315可使用轮询(round robin)访问,从队列310-1检索i/o请求,然后从队列310-2检索i/o请求,然后从队列310-3检索i/o请求,然后返回队列310-1等等。(当然,如果队列310中没有i/o请求,则i/o进程/存储池315可跳过该队列310并移动到下一个队列310以检索i/o请求)
52.i/o进程/存储池315可包括管理器320,管理器320可负责从队列310检索i/o请求。
管理器320还可负责确定哪个(哪些)存储装置120存储所请求的数据(数据可被存储在单个存储装置120上,或者数据可被存储在多个存储装置120上)。一旦管理器320已经确定了哪个(哪些)存储装置120存储所请求的数据,管理器320就可将i/o请求分派给一个或多个加载模块325-1至325-4(可被统称为一个或多个加载模块325)以从一个或多个存储装置120读取数据。
53.在公开的一些实施例中,每个存储装置120可被认为与其他存储装置120分离。也就是说,存储装置120之间可不存在管理它们的使用的预定关系。例如,每个存储装置120不仅可被认为是物理上分离的存储装置,而且可被认为是逻辑上分离的存储装置(存储装置的布置可例如与其中数据存储的管理留给raid控制器的独立磁盘冗余阵列(raid)进行比较)。但是在公开的其他实施例中,存储装置120可被配置为阵列(诸如,raid)。
54.为了确定哪个(哪些)存储装置120存储i/o请求中所请求的数据,管理器320可访问表(或称为转换表)330。表330可与ssd中的闪存转换层类似地起作用。但是,代替将逻辑地址(诸如,由应用使用的数据的逻辑块地址)映射到(存储装置上的)物理地址,表330可将逻辑地址(或数据的一些其他标识符)映射到存储所请求的数据的一个或多个存储装置120的标识符。表330可被存储在一些形式的存储装置(例如,易失性存储装置(诸如,本地dram)或非易失性存储装置(诸如,固件模块或闪存存储装置))中。以下参照图5进一步讨论表330的使用。
55.一旦管理器320已经将i/o请求分派给一个或多个加载模块325,一个或多个加载模块325就可向一个或多个存储装置120访问所请求的数据。例如,如果数据被存储在存储装置120-1上,则管理器320可将i/o请求分派给加载模块325-1和/或325-2;如果数据被存储在存储装置120-2上,则管理器320可将i/o请求分派给加载模块325-3和/或325-4。在图3中,i/o进程/存储池315被示出为包括两个存储装置120和四个加载模块325,公开的实施例可包括任何数量(一个或多个)的存储装置120和任何数量(一个或多个)的加载模块325(然而对于每个存储装置120应当存在至少一个加载模块325)。
56.注意,在图3中,每个存储装置120具有可向存储装置访问数据的两个加载模块325。在公开的一些实施例中,存储装置120可支持多线程访问:即,存储装置120可支持读取数据以同时满足多个请求。例如,如果存储装置120包括多个通道,每个通道可独立于其他通道使用,则一个线程可请求沿着一个通道存储的数据,并且另一线程可请求存储在第二通道上的数据,并且两个线程同时操作。在包括可同时访问存储装置120但数据可仅由一个加载模块325访问的多个加载模块325的公开的实施例中,表330还可包括用于检索所请求的数据的特定加载模块325的标识符。并且在公开的一些实施例中,每个存储装置120可仅有一个加载模块325。公开的实施例还可包括这些可能性的组合:例如,一个存储装置120可支持多线程并且可由多个加载模块325访问,而另一个存储装置120可不支持多线程并且因此可仅由一个加载模块325访问。
57.在图3中,加载模块325可以是稀疏长度和(sls)加载模块325。以下参照图7进一步讨论sls加载模块325。
58.加载模块325可使用例如用户空间非易失性存储器快速(unvme)驱动器来访问存储装置120。虽然应用访问存储装置120的驱动器可使用文件系统,但是unvme驱动器可直接向存储装置120访问数据,并且可不使用文件系统。加载模块325还可使用由存储装置120提
供的各种应用编程接口(api)来访问数据。
59.如上面参照图1所讨论的,存储装置120可以是任何期望的各种存储装置(诸如,硬盘驱动器和ssd)。此外,也可使用这些各种存储装置的变体。例如,存储装置120可以是被优化以存储和检索数据以满足dlrm查询的ssd:这样的ssd可具有与旨在用于一般用途的ssd不同的架构。
60.在公开的一些实施例中,i/o请求中请求的数据可被存储在特定存储装置120上。因此,可能发生多个i/o请求可被发送到同一存储装置120。当向特定存储装置120访问数据时,加载模块325可使用提交队列来管理同一存储装置120的多个请求。加载模块325还可考虑请求的大小和提交队列的可用性因素,以试图对负载存储装置120进行均衡。
61.在上面的讨论中,没有讨论数据如何存储在存储装置120上。在公开的一些实施例中,存储装置120可预先加载有数据,并且可预先准备表330;在公开的其他实施例中,应用可请求将数据写入存储装置120,并且管理器330可选择将数据写入哪个(哪些)存储装置120(其中,表330被相应地更新)。
62.期望跨i/o进程/存储池315中的所有存储装置120大致相等地访问数据(这个特征可被描述为负载均衡)。但是根据数据如何被存储在多个存储装置120中以及什么应用正在向存储装置120请求数据,每个存储装置120上的负载可不被均衡。例如,虽然存储装置120-1和120-2可在大小方面存储等量的数据,但是可发生例如80%的i/o请求请求存储在存储装置120-1上的数据(并且仅20%的i/o请求请求存储在存储装置120-2上的数据)。在这样的情况中,不均衡的负载可导致比向存储装置120-1访问数据的期望时延高的时延。
63.为了针对这样的情况进行调整,i/o进程/存储池315可包括迁移模块(图3中未示出)。迁移模块可负责在存储装置120之间移动数据以实现期望的均衡。例如,一些数据可从存储装置120-1被迁移到存储装置120-2,以试图均衡向每个存储装置请求多少数据。
64.存在数据可在存储装置120之间移动的其他原因。虽然读取负载均衡可以是重要的目标,但是保持存储装置的容量大致均衡也可以是重要的(例如,以支持由可跨多个存储装置120分布的另一应用写入新数据)。或者,一些数据可被足够频繁地访问,或者被认为足够重要,以证明这样的数据被存储在多个存储装置120上,以提供冗余。
65.无论数据为何被迁移(诸如,用于存储容量均衡、读取负载均衡或冗余),迁移工具都可更新表330以反映这样的改变。也就是说,如果数据从存储装置120-1被迁移到存储装置120-2,则表330可被更新以反映数据的迁移。
66.图4示出根据公开的实施例的发给图1的多进程系统135的输入/输出(i/o)请求的细节。在图4中,示出i/o请求405。i/o请求405被示出为包括标识符410和向量415-1至415-7(可被统称为向量415)。例如,向量415可包括64个数据点,但是公开的实施例可每个向量包括任何数量的数据点。标识符410可以是向图1的多进程系统135请求的数据的标识符。例如,标识符410可以是由在图1的处理器110上运行的应用使用的数据的逻辑地址;但是公开的实施例可针对数据使用任何期望的标识符。
67.向量415可标识来自感兴趣的数据的特定向量。如上所讨论的,dlrm查询可使用来自嵌入表的数据(嵌入向量),嵌入表可能很大(大小高达数百gb或tb)。但是查询可仅取决于表内的特定数据,并且读取整个表可相对于实际需要的数据量花费很长时间。相反,i/o请求405可包括向量415,向量415可标识嵌入表中感兴趣的特定向量,并且所有其他向量可
被忽略。虽然图4示出i/o请求405中的七个向量415,但是公开的实施例可包括任何数量的向量。
68.另外,如果i/o请求405包括向量415,则图3的i/o调度器305可能够确定将要读取的数据的大小。例如,图3的i/o调度器305可通过将i/o请求405中的向量415的数量与每个向量415中的数据点的数量相乘,并且与每个向量415中的每个数据点的大小相乘来确定将要读取的字节数。如果i/o请求405中的向量415的数量例如为64,每个向量415包括例如128个数据点,每个数据点需要四个字节,则将要由i/o请求405读取的数据的大小可被确定为64(i/o请求405中的向量415的数量)
×
128(每个向量415中的数据点的数量)
×
4(每个数据点的字节数)=32,768b。
69.虽然图4将i/o请求405示出为仅包括标识符410和向量415,但是公开的实施例可包括其他数据,或者可移除示出的数据的一些。例如,代替包括向量415,i/o请求405可包括逻辑地址的偏移(在图4中,逻辑地址被用作标识符410,但是公开的实施例可区分标识符410和数据的逻辑地址,在这种情况下,逻辑地址可以是包括在i/o请求405中的单独数据)和将要读取的字节数(在这种情况下,将要读取的字节数可用于确定i/o请求405的大小)。或者,i/o请求405可包括图4中未示出的各种标签。公开的实施例可包括对i/o请求405的任何这样的变化。
70.图5示出根据公开的实施例的图3的表330的细节。在图5中,表330被示出为包括三个条目。一个条目将第一数据的标识符410-1映射到存储该数据的存储装置的标识符505-1;另一条目将第二数据的标识符410-2映射到存储该数据的存储装置的标识符505-2;并且第三条目将第三数据的标识符410-3映射到存储该数据的存储装置的标识符505-3。虽然图5将表330示出为包括三个条目,但是公开的实施例可包括任何数量(零个或更多个)条目。
71.注意,标识符505-1、505-2和505-3(可被统称为标识符505)被示为通过数字标识特定存储装置。表330可不存储实际的物理地址,因为该信息可由存储装置本身存储。标识符505可使用唯一地标识存储装置的其他信息来替换:例如,使用在发现和/或枚举期间分配给图1的存储装置120的标识符,或者通过使用图1的存储装置120的序列号以及其他可能性。
72.虽然图5表明每个标识符410可与单个唯一标识符505相关联,但是公开的实施例可将标识符410映射到一个或多个标识符505。如果与标识符410-1相关联的数据被存储在多个存储装置上(例如,以提供冗余),则表330可反映该事实。如果所讨论的数据被存储在图1的多个存储装置120上,则图3的管理器320可具有将图4的i/o请求405分配给图3的多于一个的加载模块325的选择。该选择例如对于均衡图3的i/o进程/存储池315中的图1的存储装置120上的负载可以是有用的。例如,如果图1的存储装置120-1具有相对大量的图4的i/o请求405等待被处理并且数据可从图1的存储装置120-1和120-2两者获得,则图3的管理器320可选择图3的加载模块325-3或325-4来向图1的存储装置120-2执行i/o请求405。
73.在公开的一些实施例中,图4的i/o请求405中请求的数据可被存储在图1的单个存储装置120上。在公开的这样的实施例中,标识符505可唯一地标识由标识符410表示的数据可位于何处。但是在公开的其他实施例中,数据可跨图1的多个存储装置120分布。在公开的这样的实施例中,图3的管理器320可确定图4的i/o请求405中请求的所有数据可跨图1的多个存储装置120分布,并且可将图4的i/o请求405分成多个不同的i/o请求,每个i/o请求被
发送给图3的不同加载模块325。由于表330可标识图1的哪个存储装置120存储什么数据,因此,表330可包括用于数据的不同部分的多个条目。
74.作为示例,再次考虑图4的i/o请求405。图4的i/o请求405请求来自图4的五个向量415的数据。图3的管理器320可确定图4的向量415-1和415-4被存储在图1的存储装置120-1上,并且图4的向量415-2、415-3和415-5被存储在图1的存储装置120-2上。在这种情况下,图3的管理器320可将一个i/o请求发送给图3的加载模块325-1或325-2以读取图4的向量415-1和415-4,并且可将另一i/o请求发送给图3的加载模块325-3或325-4以读取图4的向量415-2、415-3和415-5。
75.另外,回想图3的多个加载模块325可访问图1的同一存储装置120。在这种情况下,即使将要读取的数据仅被存储在例如图1的存储装置120-1上,图3的管理器320也可发送两个i/o请求:一个i/o请求到图3的加载模块325-1,另一个i/o请求到图3的加载模块325-2。以这样的方式,即使图3的单个加载模块325可能够处理从图1的存储装置120-1读取所有数据,图3的管理器320也可加速从图1的存储装置120-1读取数据。
76.图6示出根据公开的实施例的图3的i/o调度器305的细节。在图6中,i/o调度器305可包括大小计算器605、阈值610、比较器615和队列选择器620。如上面参照图3至图4讨论的,i/o调度器305可使用图4的i/o请求405的大小来选择图4的i/o请求405可被放置到的图3的队列310。图6的大小计算器605可确定图4的i/o请求405的大小。除了其他数据之外,大小计算器可使用根据图4的i/o请求405将要从数据读取的字节数,或者图4的向量415的数量结合图4的每个向量415中的数据点的数量和每数据点字节数来计算图4的i/o请求405的大小。
77.一旦大小计算器605已经确定图4的i/o请求405的大小,比较器615就可将图4的i/o请求405的大小与阈值610进行比较。阈值610可以是可以与图4的i/o请求405的大小进行比较的任何期望的阈值,并且队列选择器620可在图3的队列310之中进行选择来放置图4的i/o请求405时使用该信息。如果根据比较器615,由大小计算器605确定的图4的i/o请求405的大小小于阈值610,则队列选择器620可选择图3的一个队列310来放置图4的i/o请求405;否则,队列选择器620可选择图3的另一队列310来放置图4的i/o请求405。
78.虽然图6示出一个阈值610,但是公开的实施例可包括任何数量的阈值610,并且比较器615可将图4的i/o请求405的大小与每个阈值610进行比较,直至识别出小于图4的i/o请求405的大小的最大阈值610为止(或者可选地,直至识别出大于图4的i/o请求405的大小的最小阈值610为止)。队列选择器620然后可使用该信息来选择图3的用于放置图4的i/o请求405的队列310。
79.例如,如上面参照图3讨论的,图3的队列310-1可用于存储用于检索不大于例如128个嵌入向量的数据的i/o请求;图3的队列310-2可用于存储用于检索大于例如128个嵌入向量但不大于例如512个嵌入向量的数据的i/o请求;并且图3的队列310-3可用于存储用于检索大于例如512个嵌入向量的数据的i/o请求。对于这个示例,可使用两个阈值610:一个在128个嵌入向量处,另一个在512个嵌入向量处。因此,在公开的一些实施例中,图3的队列310的数量可比阈值610的数量大1(其中,阈值610充当图3的队列310对之间的分界线)。
80.图7示出根据公开的实施例的图3的加载模块325的细节。如上面参照图4讨论的,图4的i/o请求405可标识将要从嵌入表读取的图4的特定向量415。因为图4的i/o请求405中
的图4的向量415的数量可相对于数据中的向量的数量较小,所以大多数数据可被忽略。因此,因为大多数的值可出于满足图4的i/o请求405的目的而被忽略,所以图1的存储装置120中的数据可被认为是“稀疏的”。
81.当加载模块325是“稀疏长度和”加载模块时,加载模块325可读取在图4的i/o请求405中标识的图4的特定向量415,并且将它们加在一起以产生单个向量。然后可返回图4的标识的向量415的总和作为由图4的i/o请求405请求的数据。
82.为了作为sls加载模块325操作,加载模块325可包括读取器705和加法器710。读取器705可从图1的存储装置120读取在图4的i/o请求405中标识的图4的特定向量415。注意,在公开的一些实施例中,读取器705可以以某种方式向图1的存储装置120访问数据;在公开的其他实施例中,读取器705可向图1的存储装置120发出适当的命令,存储装置120可将数据返回给加载模块325。加法器710然后可将从图1的存储装置120检索到的向量相加,以产生响应于图4的i/o请求405而返回的数据。
83.图8示出根据公开的实施例的图1的计算系统140的细节。在图8中,计算系统140可接收计算请求805,计算请求可以是处理由图1的多进程系统135响应于图4的i/o请求405检索到的数据的请求。计算系统140可包括计算调度器810、队列815-1和815-2(可被统称为队列815)以及处理元件820-1、820-2和820-3(可被统称为处理元件820)。
84.计算调度器810可基于计算请求805的工作负载将计算请求805放置在多个队列815中的一个中。例如,计算请求805可涉及仅由多个处理元件820中的一个提供的资源,处理元件820可确定应当将计算请求805放置在哪个队列815中。如以下讨论的,计算调度器810还可在将计算请求805分配给处理元件820时考虑处理元件820有多繁忙。
85.在公开的一些实施例中,队列815可以是fifo队列。在公开的其他实施例中,可使用其他类型的队列815。
86.然后,处理元件820可从队列815移除计算请求805并处理该请求。处理元件820可以是任何期望类型的处理元件:例如,中央处理器(cpu)、图形处理器(gpu)、通用gpu(gpgpu)、神经处理器(npu)、张量处理器(tpu)或加速器(诸如,现场可编程门阵列(fpga)或专用集成电路(asic))以及其他可能性。另外,对于包括多个核的元件(例如,多核cpu),每个核可被认为是单独的处理元件820。
87.在公开的一些实施例中,每个处理元件820可具有自身的队列815,处理元件820可从该队列接收计算请求以进行处理。也就是说,处理元件820可仅处理专门分配给该处理元件的计算请求,并且可忽略分配给其他处理元件的计算请求。在公开的其他实施例中,两个或更多个处理元件可共享队列。例如,如图8中所示,处理元件820-1和820-2都可经由队列815-1接收计算请求,而处理元件820-3可经由队列815-2接收计算请求。当处理元件已经完成对计算请求进行处理时,处理元件然后可检查适当的队列以查看其他计算请求是否正在等待处理元件可处理。如果处理元件发现它可处理的计算请求在等待,则处理元件可开始处理该计算请求;否则,处理元件可变为空闲。
88.在公开的一些实施例中,处理元件可在多个队列815中寻找计算请求。例如,处理元件820-3可能够处理处理元件820-1和820-2可处理的任何计算请求,但是也可能够处理一些附加的计算请求。在这种情况下,只要队列815-2具有等待处理的计算请求,处理元件820-3就可从队列815-2检索计算请求;如果队列815-2为空,则处理元件820-3可从队列
815-1检索计算请求。
89.计算系统140还可包括就绪队列825。当处理元件820已经完成对计算请求进行处理时,处理元件820可使用就绪队列825来通知计算调度器810。以这样的方式,计算调度器810可跟踪处理元件820有多繁忙。例如,考虑到计算调度器810接收计算请求805的情况,并且假设每个处理元件820具有自身的队列815。计算调度器810可确定处理元件820-1或820-2能够处理计算请求。在没有关于处理元件820-1或820-2有多繁忙的信息的情况下,计算调度器810可随机地将计算请求805分配给与处理元件820-1或820-2相关联的队列。但是,如果计算调度器810经由就绪队列825接收到处理元件820-2已经完成其最新的计算请求(并且因此当前空闲)的信息,则计算调度器810可将计算请求805分配给处理元件820-2,而不必猜测处理元件820-1和820-2中的哪一个具有轻量的工作负载。
90.以类似的方式,虽然处理元件820-1或820-2可能是更期望的用于处理计算请求805的处理元件,但是如果处理元件820-1和820-2当前都繁忙并且处理元件820-3当前空闲,则即使不太期望处理元件805-3处理计算请求805,计算调度器810也可调度处理元件820-3来处理计算请求805。
91.计算请求805可包括标识计算请求的标签。可选地,计算调度器810可将标签分配给计算请求805,从而标识计算请求。处理元件820可在就绪队列825中使用这些标签来通知计算调度器810已经完成了什么计算请求。以这样的方式,计算调度器810可维护处理元件820待处理的工作负载的近似意图(通过将每个处理元件820已经处理了什么计算请求与已经为每个处理元件820调度了什么计算请求进行比较)。
92.图9示出根据公开的实施例的使用图1的多进程系统135处理图4的i/o请求的示例程序的流程图。在图9中,在块905处,图3的i/o调度器305可接收图4的i/o请求405。在块910处,图4的i/o请求405可从图3的i/o调度器305被传送给图3的加载模块325。最后,在块915处,图3的加载模块325可基于图4的i/o请求405从图1的存储装置120读取数据。
93.图10示出根据公开的实施例的使用图1的多进程系统处理图4的i/o请求的示例程序的替代流程图。
94.图10示出根据公开的实施例的使用图1的多进程系统135处理图4的i/o请求405的示例程序的替代流程图。在图10中,可使用相同的附图标号来分配与图9中的块类似的块。在图10中,在块905处,图3的i/o调度器305可接收图4的i/o请求405。在块1005处,图6的大小计算器605可确定图4的i/o请求405的大小。在块1010处,图6的队列选择器620可针对图4的i/o请求405选择图3的队列310。在块1015处,图3的i/o调度器305可将图4的i/o请求405放置在由图6的队列选择器620选择的图3的队列310中。最后,在块915处,图3的加载模块325可基于图4的i/o请求405从图1的存储装置120读取数据。
95.图11示出根据公开的实施例的图3的i/o调度器305在对图4的i/o请求405进行排队时使用优先级排队的示例性程序的流程图。在图11中,在块1105处,图3的i/o调度器305可基于图4的i/o请求405的大小(可由图6的大小计算器605确定)来确定图4的i/o请求405的优先级标签。在块1110处,图3的i/o调度器305可将优先级标签与图3的队列310中的图3的i/o请求405相关联。
96.图12示出根据公开的实施例的图3的管理器320将图4的i/o请求405分配给图3的加载模块325的示例程序的流程图。在图12中,在块1205处,图3的管理器320可从图3的队列
310检索图4的i/o请求405。在块1210处,图3的管理器320可识别存储数据的图1的存储装置120。如在块1215所示,这可涉及例如使用图3的表330将数据的图4的标识符410映射到存储数据的存储装置的图5的标识符505。在块1220处,图3的管理器320可识别图3的可访问图1的存储装置120的加载模块325。最后,在块1225处,图3的管理器320可将图4的i/o请求405发送给图3的加载模块325。
97.图13示出根据公开的实施例的图3的加载模块325从图1的存储装置读取数据的示例程序的流程图。在图13中,在块1305处,图7的读取器705可从图1的存储装置120读取图4的向量415。在块1310处,图7的加法器710可对图4的向量415求和。最后,在块1315处,图1的多进程系统135可将数据发送给图1的计算系统140的图8的计算调度器810,以用于处理图8的计算请求805。
98.图14示出根据公开的实施例的图1的计算系统140处理图8的计算请求的示例程序的流程图。在图14中,在块1405处,图8的计算调度器810可使用由图1的多进程系统135响应于图4的i/o请求405而读取的数据,来调度图4的计算请求805的处理。在块1410处,图8的处理元件820可从图8的计算调度器810接收图8的计算请求805。例如,在块1405中,图8的计算调度器810可将图8的计算请求805放置在图8的队列815中,并且在块1410中,图8的处理元件820可从图8的队列815检索图8的计算请求805。
99.在块1415处,图8的处理元件820可处理图8的计算请求805。最后,在块1420处,图8的处理元件820可通知图8的计算调度器810:它已经完成了图8的计算请求805的处理。例如,图8的处理元件820可将信息放置在图8的就绪队列825中,以通知图8的计算调度器810:图8的处理元件820已经完成图8的计算请求805的处理。在公开的一些实施例中,如虚线1425所示,可省略块1420(例如,如果在图8的处理元件820处仅调度图8的一个计算请求805,并且图8的计算调度器810知道图8的处理元件820应该花费多长时间来处理图8的计算请求805)。
100.图15a至图15b示出根据公开的实施例的图8的计算调度器810布置图8的处理元件820来处理图8的计算请求805的示例程序的流程图。在图15a中,在块1505处,图8的计算调度器810可选择图8的处理元件820来处理图8的计算请求805。在块1510处,图8的计算调度器810可将图8的计算请求805发送给图8的处理元件820。可选择地,在块1515处,图8的计算调度器810可将图8的计算请求805分配给图8的队列815。
101.作为块1505的替代,在块1520(图15b)处,图8的计算调度器810可识别适合于处理图8的计算请求805的图8的处理元件820的类型。在块1525处,图8的计算调度器810可将图8的计算请求805分配给适合于图8的处理元件820的类型的图8的队列815。
102.在块1505的又一替代方案中,在块1530处,图8的计算调度器810可确定图8的计算请求805的工作负载。在块1535处,图8的计算调度器810可基于图8的计算请求805的工作负载将图8的计算请求805分配给图8的队列815。
103.在图9至图15b中,示出公开的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、通过省略块或通过包括未在附图中示出的链接,公开的其他实施例也是可行的。无论是否明确描述,流程图的所有这样的变化都被认为是公开的实施例。
104.公开的实施例包括多进程系统。多进程系统可使用输入/输出(i/o)请求从i/o进程/存储池加载数据,i/o请求可基于将要使用计算请求处理的数据。可使用与i/o进程/存
储池中的存储装置相关联的加载模块来检索数据。在读取数据时,多个存储装置的使用通过利用向多个存储装置的并行数据访问实现低时延,提供优于数据被存储在单个存储装置中的技术优势。
105.不同的i/o请求可在不同的队列中排队。因为可能涉及大量或少量数据的i/o请求不被其他数据大小的多个i/o请求时延,所以多个队列的使用提供技术优势。
106.由多进程系统检索的数据可被提供给计算系统。计算系统可使用数据来调度计算请求。计算系统可基于计算请求的工作负载使用不同的队列,从而提供满足由服务等级协定承诺的每秒查询的技术优势。
107.深度学习推荐模型(dlrm)工作负载可以是输入/输出(i/o)密集型的。为了满足服务等级协定(sla)要求,可需要动态随机存取存储器(dram)来存储大的嵌入表(高达100gb或更多)。如此大量的dram可以是昂贵的。
108.对于小的查询大小,可使用具有用户空间驱动器的固态驱动器(ssd)来存储嵌入表以满足sla。但是对于合理大的查询大小(》=256),单个ssd可能难以满足sla。此外,对于单个ssd,由于ssd中潜在的输入/输出(i/o)瓶颈,可能不可并行执行查询以实现高的每秒查询(qps)。
109.基于具有多个ssd的计算的查询调度器可具有低效率并且可经历负载均衡问题(其中,一些ssd处理较大百分比的查询,而其他ssd处理较小百分比的查询)。处理大量查询的ssd可没有足够的i/o来处理查询(非常类似于单个ssd模型),并且处理少量查询的ssd可未被充分利用。
110.公开的实施例可包括用于实现qps和低时延的具有i/o调度器的多进程和多ssd系统。调度嵌入表io可用于将查询调度到不同的i/o队列。
111.i/o进程/ssd池可基于针对各种ssd的i/o请求和负载状态从i/o队列获取i/o请求。
112.在io进程/ssd池内,多个ssd可由具有各种数量的活动线程的多进程用户空间非易失性存储器快速(unvme)驱动器/应用编程接口(api)访问以满足i/o请求。
113.第二级计算调度器可用于基于计算强度进一步优化计算时延和qps。
114.以下的讨论旨在提供可实现公开的特定方面的一个或多个合适的机器的简要、一般性描述。可至少部分地通过来自常规输入装置(诸如,键盘、鼠标等)的输入以及通过从另外的机器接收到的指令、与虚拟现实(vr)环境的交互、生物特征反馈(biometric feedback)或其他输入信号来控制一个或多个机器。如在此使用的,术语“机器”旨在广泛地包括单个机器、虚拟机或通信地连接的机器、虚拟机或一起操作的装置的系统。示例性机器包括计算装置(诸如,个人计算机、工作站、服务器、便携式计算机、手持装置、电话、平板计算机等),以及运输装置(诸如,私人或公共运输工具(例如,汽车、火车、出租车等))。
115.一个或多个机器可包括嵌入式控制器(诸如,可编程或不可编程逻辑器件或阵列、专用集成电路(asic)、嵌入式计算机、智能卡等)。一个或多个机器可利用到一个或多个远程机器的一个或多个连接(诸如,通过网络接口、调制解调器或其他通信耦合(communicative coupling))。机器可通过物理和/或逻辑网络(诸如,内联网、因特网、局域网、广域网等)互连。本领域技术人员将理解,网络通信可利用各种有线和/或无线的短程或远程载波和协议(包括射频(rf)、卫星、微波、电气和电子工程师协会(ieee)802.11、
光学、红外、线缆、激光等)。
116.可通过参照或结合包括功能、程序、数据结构、应用程序等的相关联的数据来描述本公开的实施例,当这些相关联的数据被机器访问时,导致机器执行任务或者定义抽象数据类型或低级硬件上下文。相关联的数据可被存储在例如易失性和/或非易失性存储器(例如ram、rom等)中,或者被存储在其他存储装置及其相关联的存储介质(包括硬盘驱动器、软盘、光存储装置、磁带、闪存、记忆棒、数字视频磁盘、生物存储装置等)中。相关联的数据可以以包、串行数据、并行数据、传播信号等形式通过包括物理和/或逻辑网络的传输环境传送,并且可以以压缩或加密格式使用。相关联的数据可在分布式环境中使用,并且被本地和/或远程存储以供机器访问。
117.公开的实施例可包括有形的非暂时性机器可读介质,有形的非暂时性机器可读介质包括可由一个或多个处理器执行的指令,所述指令包括用于执行如在此描述的公开的元件的指令。
118.上述方法的各种操作可由能够执行所述操作的任何合适的装置(诸如,各种硬件和/或一个或多个软件组件、电路和/或一个或多个模块)来执行。软件可包括用于实现逻辑功能的可执行指令的有序列表,并且可在任何“处理器可读介质”中实现,以由指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)使用或与指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)结合使用。
119.结合在此公开的实施例描述的方法或算法和功能的块或步骤可以以硬件、由处理器执行的软件模块或两者的组合直接实现。如果以软件实现,则功能可作为一个或多个指令或代码存储在有形的非暂时性计算机可读介质上或通过有形的非暂时性计算机可读介质传输。软件模块可驻留在随机存取存储器(ram)、闪存、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可移除盘、cd rom、或本领域中已知的任何其他形式的存储介质中。
120.已经参照示出的实施例描述和示出公开的原理,将认识到,在不脱离这样的原理的情况下,可在布置和细节上修改示出的实施例,并且可以以任何期望的方式组合示出的实施例。并且,尽管前面的讨论集中于特定实施例,但是可考虑其他配置。具体地,即使在此使用了诸如“根据公开的实施例”等的表述,这些短语也旨在一般性地参考实施例可能性,而不旨在将公开限制于特定实施例配置。如在此所使用的,这些术语可表示可组合到其他实施例中的相同或不同的实施例。
121.前述说明性实施例将不被解释为限制实施例的公开。尽管已经描述了一些实施例,但是本领域技术人员将容易理解,在实质上不脱离本公开的新颖性教导和优点的情况下,可对那些实施例进行许多修改。因此,所有这些修改旨在包括在如权利要求所限定的公开的范围内。
122.公开的实施例可扩展到但不限于以下声明:
123.声明1、公开的实施例包括一种系统,所述系统包括:
124.存储装置,用于存储数据;
125.加载模块,用于至少部分地基于输入/输出(i/o)请求从存储装置读取所述数据;以及
126.调度器,用于接收所述i/o请求并且至少部分地基于所述i/o请求的大小来将i/o
请求传送给加载模块。
127.声明2、公开的实施例包括根据声明1所述的系统,其中,调度器被配置为至少部分地基于所述i/o请求的大小来将i/o请求传送给队列。
128.声明3、公开的实施例包括根据声明2所述的系统,所述系统还包括:管理器,用于从所述队列检索所述i/o请求并且将所述i/o请求分配给加载模块。
129.声明4、公开的实施例包括根据声明3所述的系统,其中:
130.所述系统还包括:
131.存储第二数据的第二存储装置;以及
132.第二加载模块,用于从第二存储装置读取第二数据;并且
133.管理器被配置为:至少部分地基于请求所述数据的所述i/o请求来将i/o请求分配给加载模块。
134.声明5、公开的一个实施例包括根据声明4所述的系统,其中:
135.所述i/o请求包括所述数据的第一标识符;并且
136.管理器包括将所述数据的第一标识符映射到存储装置的第二标识符的表。
137.声明6、公开的实施例包括根据声明3所述的系统,其中,所述系统还包括:第二加载模块,用于从存储装置读取所述数据。
138.声明7、公开的实施例包括根据声明6所述的系统,其中,管理器被配置为选择加载模块来处理所述i/o请求。
139.声明8、公开的实施例包括根据声明3所述的系统,其中:
140.所述队列包括先进先出(fifo)队列;并且
141.管理器被配置为从队列的头部访问i/o请求。
142.声明9、公开的实施例包括根据声明3所述的系统,其中:
143.所述队列包括优先级队列;
144.调度器被配置为至少部分地基于所述i/o请求的大小将优先级标签与所述队列中的所述i/o请求相关联;并且
145.管理器被配置为至少部分地基于所述优先级标签来访问来自所述队列的所述i/o请求。
146.声明10、公开的实施例包括根据声明3所述的系统,其中:
147.调度器包括阈值;并且
148.调度器被配置为至少部分地基于所述i/o请求的大小小于所述阈值来将所述i/o请求放置在所述队列中。
149.声明11、公开的实施例包括根据声明10所述的系统,其中:
150.所述系统还包括第二队列;并且
151.调度器被配置为至少部分地基于第二i/o请求的大小超过阈值而将第二i/o请求放置在第二队列中。
152.声明12、公开的实施例包括根据声明11所述的系统,其中,管理器被配置为使用轮询访问从所述队列检索所述i/o请求并从第二队列检索第二i/o请求。
153.声明13、公开的实施例包括根据声明1所述的系统,其中,加载模块包括:
154.读取器,用于从存储装置读取所述数据中的第一向量和第二向量;
155.加法器,用于将第一向量和第二向量相加。
156.声明14、公开的实施例包括根据声明1所述的系统,其中,加载模块被配置为将所述数据发送给第二调度器。
157.声明15、公开的实施例包括根据声明14所述的系统,所述系统还包括:
158.处理元件;并且
159.第二调度器被配置为调度处理元件对计算请求的处理,所述计算请求使用所述数据。
160.声明16、公开的实施例包括根据声明14所述的系统,其中,第二调度器被配置为将所述计算请求分配给队列。
161.声明17、公开的实施例包括根据声明16所述的系统,其中,第二调度器被配置为至少部分地基于所述计算请求的工作负载来将所述计算请求分配给所述队列。
162.声明18、公开的实施例包括根据声明16所述的系统,其中,处理元件被配置为从所述队列检索所述计算请求。
163.声明19、公开的实施例包括根据声明16所述的系统,其中:
164.所述队列与处理元件相关联;并且
165.第二调度器被配置为将第二计算请求分配给与第二处理元件相关联的第二队列。
166.声明20、公开的实施例包括根据声明16所述的系统,其中,所述队列与处理元件的类型相关联。
167.声明21、公开的实施例包括根据声明16所述的系统,其中,处理元件被配置为将完成状态返回给第二调度器。
168.声明22、公开的实施例包括根据声明21所述的系统,其中,处理元件被配置为将完成状态放置在第二队列中。
169.声明23、公开的实施例包括根据声明22所述的系统,其中,第二调度器被配置为从第二队列检索所述完成状态。
170.声明24、公开的实施例包括根据声明22所述的系统,其中,第二处理元件被配置为将第二完成状态放置在第二队列中。
171.声明25、公开的实施例包括一种方法,所述方法包括:
172.在调度器处接收输入/输出(i/o)请求;
173.至少部分地基于所述i/o请求的大小将所述i/o请求从调度器传送给加载模块;以及
174.由加载模块至少部分地基于所述i/o请求从存储装置读取数据。
175.声明26、公开的实施例包括根据声明25所述的方法,其中,至少部分地基于所述i/o请求的大小将所述i/o请求从调度器传送给加载模块的步骤包括:
176.由调度器确定所述i/o请求的大小;
177.由调度器至少部分地基于所述i/o请求的大小来识别队列;以及
178.由调度器将所述i/o请求放置在所述队列中。
179.声明27、公开的实施例包括根据声明26所述的方法,其中,由加载模块从存储装置读取所述数据的步骤包括:
180.由管理器从所述队列检索所述i/o请求;以及
181.将所述i/o请求从管理器发送给加载模块。
182.声明28、公开的实施例包括根据声明27所述的方法,其中,将所述i/o请求发送给加载模块的步骤包括:
183.由管理器识别存储所述数据的存储装置;以及
184.由管理器至少部分地基于可访问存储装置的加载模块来识别加载模块。
185.声明29、公开的实施例包括根据声明28所述的方法,其中,由管理器识别存储所述数据的存储装置的步骤包括:将所述i/o请求的第一标识符映射到存储装置的第二标识符。
186.声明30、公开的实施例包括根据声明28所述的方法,其中,由管理器识别存储所述数据的存储装置的步骤包括:由管理器识别存储来自存储装置的所述数据的存储装置和第二存储装置。
187.声明31、公开的实施例包括根据声明27所述的方法,其中:
188.所述队列包括先进先出(fifo)队列;
189.由调度器将i/o请求放置在所述队列中的步骤包括:
190.至少部分地基于所述i/o请求的大小来确定所述i/o请求的优先级标签;以及
191.将优先级标签与所述队列中的所述i/o请求相关联。
192.声明32、公开的实施例包括根据声明31所述的方法,其中,由管理器从所述队列检索所述i/o请求的步骤包括:由管理器至少部分地基于优先级标签从所述队列检索所述i/o请求。
193.声明33、公开的实施例包括根据声明27所述的方法,其中,由调度器至少部分地基于所述i/o请求的大小来识别所述队列的步骤包括:由调度器至少部分地基于所述i/o请求的大小小于阈值来识别所述队列。
194.声明34、公开的实施例包括根据声明33所述的方法,其中,由调度器至少部分地基于所述i/o请求的大小来识别所述队列的步骤还包括:由调度器至少部分地基于第二i/o请求的大小大于阈值来识别第二队列。
195.声明35、公开的实施例包括根据声明34所述的方法,其中,由管理器从所述队列检索所述i/o请求的步骤包括:使用轮询访问从所述队列检索所述i/o请求并且从第二队列检索第二i/o请求。
196.声明36、公开的实施例包括根据声明25所述的方法,其中,由加载模块从存储装置读取所述数据的步骤包括:
197.从存储装置读取第一向量;
198.从存储装置读取第二向量;以及
199.将第一向量和第二向量相加以生成所述数据。
200.声明37、公开的实施例包括根据声明25所述的方法,所述方法还包括:将所述数据从加载模块发送给第二调度器。
201.声明38、公开的实施例包括根据声明37所述的方法,所述方法还包括:调度处理元件以使用所述数据来处理计算请求。
202.声明39、公开的实施例包括根据声明38所述的方法,其中,调度处理元件以使用所述数据来处理计算请求的步骤包括:将计算请求分配给队列。
203.声明40、公开的实施例包括根据声明39所述的方法,其中,将计算请求分配给所述
队列的步骤包括:至少部分地基于计算请求的工作负载来将计算请求分配给所述队列。
204.声明41、公开的实施例包括根据声明40所述的方法,所述方法还包括:
205.由处理元件从所述队列检索计算请求;以及
206.由处理元件使用所述数据来处理计算请求。
207.声明42、公开的实施例包括根据声明41所述的方法,所述方法还包括在第二队列中将完成状态从处理元件返回给第二调度器。
208.声明43、公开的实施例包括根据声明39所述的方法,所述方法还包括由第二调度器从第二队列检索所述完成状态。
209.声明44、公开的实施例包括根据声明43所述的方法,所述方法还包括:由第二调度器从第二队列检索第二完成状态,第二完成状态由第二处理元件放置在第二队列中。
210.声明45、公开的实施例包括根据声明39所述的方法,其中,将计算请求分配给所述队列的步骤包括:将计算请求分配给与处理元件相关联的所述队列。
211.声明46、公开的实施例包括根据声明39所述的方法,其中:
212.调度处理元件以使用所述数据来处理计算请求的步骤还包括:至少部分地基于计算请求来识别处理元件的类型;以及
213.将计算请求分配给所述队列的步骤包括:将计算请求分配给与处理元件的类型相关联的所述队列。
214.声明47、公开的实施例包括一种制品,所述制品包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时,使得:
215.在调度器处接收输入/输出(i/o)请求;
216.至少部分地基于所述i/o请求的大小将所述i/o请求从调度器传送给加载模块;以及
217.由加载模块至少部分地基于所述i/o请求从存储装置读取数据。
218.声明48、公开的实施例包括根据声明47所述的制品,其中,至少部分地基于所述i/o请求的大小将所述i/o请求从调度器传送给加载模块的步骤包括:
219.由调度器确定所述i/o请求的大小;
220.由调度器至少部分地基于所述i/o请求的大小来识别队列;以及
221.由调度器将所述i/o请求放置在所述队列中。
222.声明49、公开的实施例包括根据声明48所述的制品,其中,由加载模块从存储装置读取所述数据的步骤包括:
223.由管理器从所述队列检索所述i/o请求;以及
224.将所述i/o请求从管理器发送给加载模块。
225.声明50、公开的实施例包括根据声明49所述的制品,其中,将所述i/o请求发送给加载模块的步骤包括:
226.由管理器识别存储所述数据的存储装置;以及
227.由管理器至少部分地基于可访问存储装置的加载模块来识别加载模块。
228.声明51、公开的实施例包括根据声明50所述的制品,其中,由管理器识别存储所述数据的存储装置的步骤包括:将所述i/o请求的第一标识符映射到存储装置的第二标识符。
229.声明52、公开的实施例包括根据声明50所述的制品,其中,由管理器识别存储所述
数据的存储装置的步骤包括:由管理器识别存储来自存储装置的所述数据的存储装置和第二存储装置。
230.声明53、公开的实施例包括根据声明49所述的制品,其中:
231.所述队列包括先进先出(fifo)队列;
232.由调度器将所述i/o请求放置在所述队列中的步骤包括:
233.至少部分地基于所述i/o请求的大小来确定所述i/o请求的优先级标签;以及
234.将优先级标签与所述队列中的所述i/o请求相关联。
235.声明54、公开的实施例包括根据声明53所述的制品,其中,由管理器从所述队列检索所述i/o请求的步骤包括:由管理器至少部分地基于优先级标签从所述队列检索所述i/o请求。
236.声明55、公开的实施例包括根据声明49所述的制品,其中,由调度器至少部分地基于所述i/o请求的大小来识别所述队列的步骤包括:由调度器至少部分地基于所述i/o请求的大小小于阈值来识别所述队列。
237.声明56、公开的实施例包括根据声明55所述的制品,其中,由调度器至少部分地基于所述i/o请求的大小来识别所述队列的步骤还包括:由调度器至少部分地基于第二i/o请求的大小大于阈值来识别第二队列。
238.声明57、公开的实施例包括根据声明56所述的制品,其中,由管理器从所述队列检索所述i/o请求的步骤包括:使用轮询访问从所述队列检索所述i/o请求并且从第二队列检索第二i/o请求。
239.声明58、公开的实施例包括根据声明47所述的制品,其中,由加载模块从存储装置读取所述数据的步骤包括:
240.从存储装置读取第一向量;
241.从存储装置读取第二向量;以及
242.将第一向量和第二向量相加以生成所述数据。
243.声明59、公开的实施例包括根据声明47所述的制品,非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,使得将所述数据从加载模块发送给第二调度器。
244.声明60、公开的实施例包括根据声明59所述的制品,非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,使得调度处理元件以使用所述数据来处理计算请求。
245.声明61、公开的实施例包括根据声明60所述的制品,其中,调度处理元件以使用所述数据来处理计算请求的步骤包括将计算请求分配给队列。
246.声明62、公开的实施例包括根据声明61所述制品,其中,将计算请求分配给所述队列的步骤包括:至少部分地基于计算请求的工作负载将计算请求分配给所述队列。
247.声明63、公开的实施例包括根据声明62所述的制品,非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,使得:
248.由处理元件从所述队列检索计算请求;以及
249.由处理元件使用所述数据来处理所述计算请求。
250.声明64、公开的实施例包括根据声明63所述的制品,所述非暂时性存储介质上存
储有另外的指令,所述另外的指令在由所述机器执行时,使得在第二队列中将完成状态从处理元件返回到第二调度器。
251.声明65、公开的实施例包括根据声明61所述的制品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,使得由第二调度器从第二队列检索所述完成状态。
252.声明66、公开的实施例包括根据声明65所述的制品,所述非暂时性存储介质上存储有另外的指令,所述另外的指令在由所述机器执行时,使得由第二调度器从第二队列检索第二完成状态,第二完成状态由第二处理元件放置在第二队列中。
253.声明67、公开的实施例包括根据声明61所述的制品,其中,将计算请求分配给所述队列的步骤包括:将计算请求分配给与处理元件相关联的所述队列。
254.声明68、公开的实施例包括根据声明61所述的制品,其中:
255.调度处理元件以使用所述数据来处理计算请求的步骤还包括:至少部分地基于计算请求来识别处理元件的类型;并且
256.将计算请求分配给所述队列的步骤包括:将计算请求分配给与处理元件的类型相关联的所述队列。
257.因此,鉴于在此描述的实施例的广泛的各种排列,该具体实施方式和所附材料仅旨在是说明性的,并且不应被视为限制公开的范围。因此,公开所要求保护的是可落入所附权利要求及其等同物的范围和精神内的所有这样的修改。
技术特征:
1.一种包括存储装置的系统,所述系统包括:存储装置,用于存储数据;加载模块,用于至少部分地基于输入/输出请求从存储装置读取所述数据;以及调度器,用于接收所述输入/输出请求并且至少部分地基于所述输入/输出请求的大小小于阈值来将所述输入/输出请求放置在队列中,以传送给加载模块。2.根据权利要求1所述的系统,所述系统还包括:管理器,用于从所述队列检索所述输入/输出请求并且将所述输入/输出请求分配给加载模块。3.根据权利要求2所述的系统,其中:所述系统还包括:第二存储装置,存储第二数据;以及第二加载模块,用于从第二存储装置读取第二数据;并且管理器被配置为:至少部分地基于请求所述数据的所述输入/输出请求来将所述输入/输出请求分配给加载模块。4.根据权利要求3所述的系统,其中:所述输入/输出请求包括所述数据的第一标识符;并且管理器包括将所述数据的第一标识符映射到存储装置的第二标识符的表。5.根据权利要求2所述的系统,其中,所述系统还包括:第二加载模块,用于从存储装置读取所述数据。6.根据权利要求5所述的系统,其中,管理器被配置为选择加载模块来处理所述输入/输出请求。7.根据权利要求2所述的系统,其中:所述系统还包括第二队列;并且调度器被配置为至少部分地基于第二输入/输出请求的大小超过阈值而将第二输入/输出请求放置在第二队列中。8.根据权利要求7所述的系统,其中,管理器被配置为使用轮询访问从所述队列检索所述输入/输出请求并且从第二队列检索第二输入/输出请求。9.根据权利要求1至权利要求8中的任意一项所述的系统,其中,加载模块包括:读取器,用于从存储装置读取所述数据中的第一向量和第二向量;加法器,用于将第一向量和第二向量相加。10.根据权利要求1至权利要求8中的任意一项所述的系统,其中,加载模块被配置为将所述数据发送给第二调度器。11.一种用于包括存储装置的的系统的方法,所述方法包括:在调度器处接收输入/输出请求;由调度器确定所述输入/输出请求的大小;由调度器至少部分地基于所述输入/输出请求的大小小于阈值来识别队列;由调度器将所述输入/输出请求放置在所述队列中,以传送给加载模块;以及由加载模块至少部分地基于所述输入/输出请求从存储装置读取数据。12.根据权利要求11所述的方法,其中,由加载模块从存储装置读取所述数据的步骤包括:
由管理器从所述队列检索所述输入/输出请求;以及将所述输入/输出请求从管理器发送给加载模块。13.根据权利要求12所述的方法,其中,将所述输入/输出请求发送给加载模块的步骤包括:由管理器识别存储所述数据的存储装置;以及由管理器至少部分地基于可访问所述存储装置的加载模块来识别加载模块。14.根据权利要求13所述的方法,其中,由管理器识别存储所述数据的存储装置的步骤包括:将所述输入/输出请求的第一标识符映射到存储装置的第二标识符。15.根据权利要求12所述的方法,所述方法还包括:由调度器至少部分地基于第二输入/输出请求的大小大于阈值来识别第二队列;以及由调度器将第二输入/输出请求放置在第二队列中,以传送给加载模块。16.根据权利要求15所述的方法,其中,由管理器从所述队列检索所述输入/输出请求的步骤包括:使用轮询访问从所述队列检索所述输入/输出请求并且从第二队列检索第二输入/输出请求。17.根据权利要求11至权利要求16中的任意一项所述的方法,其中,由加载模块从存储装置读取所述数据的步骤包括:从存储装置读取第一向量;从存储装置读取第二向量;以及将第一向量和第二向量相加以生成所述数据。18.根据权利要求11所述的方法,所述方法还包括:将所述数据从加载模块发送给第二调度器。19.一种制品,所述制品包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,所述指令在由机器执行时,使得:在调度器处接收输入/输出请求;由调度器确定所述输入/输出请求的大小;由调度器至少部分地基于所述输入/输出请求的大小小于阈值来识别队列;由调度器将所述输入/输出请求放置在所述队列中,以传送给加载模块;以及由加载模块至少部分地基于所述输入/输出请求从存储装置读取数据。20.权利要求19所述的制品,其中,由加载模块从存储装置读取所述数据的步骤包括:由管理器从所述队列检索所述输入/输出请求;以及将所述输入/输出请求从管理器发送给加载模块。
技术总结
公开了包括存储装置的系统。所述存储装置可存储数据。加载模块可至少部分地基于输入/输出(I/O)请求从存储装置读取数据。调度器可至少部分地基于I/O请求的大小小于阈值来将I/O请求放置在队列中,以传送给加载模块。以传送给加载模块。以传送给加载模块。
技术研发人员:李宗旺 玛丽
受保护的技术使用者:三星电子株式会社
技术研发日:2023.01.18
技术公布日:2023/7/26
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
