完成对象输入输出的方法和系统与流程

文档序号:26101270发布日期:2021-07-30 18:12阅读:115来源:国知局
本公开的实施例的一个或多个方面总体上涉及优化键值存储装置的输入/输出(“io”)性能。
背景技术
::近年来,键值固态驱动器(“kv-ssd”)已经在越来越多的各种应用中使用。增强kv-ssd的io性能来增强吞吐量并减少延迟可以是有益的。然而,因为kv-ssd处理会以相同的方式处理大对象io和小对象io两者,所以当kv-ssd遇到大对象io和小对象io两者的混合时,io性能可能降低。其结果是,kv-ssd处理可偏爱大对象io,这导致小对象io具有更高的延迟。可选地,kv-ssd处理可偏爱小对象io,这导致大对象io具有较低的吞吐量。技术实现要素:本公开的实施例的各方面涉及自适应地适应小对象io和大对象io两者以增强io性能的系统和方法。根据本公开的一个实施例,提供了一种完成对象io的方法,所述方法包括:接收用于目标存储装置的第一组对象io;将第一组对象io调度到第一区的第一缓冲器,第一缓冲器被配置为用作第一日志缓冲器;连接第一组对象io以在第一缓冲器中形成第一对象组;将第一对象组记录到日志装置;将第一缓冲器的功能从第一日志缓冲器修改为第一冲刷缓冲器;以及将第一对象组传送到目标存储装置。所述方法还可包括:接收用于目标存储装置的第二组对象io;将第二组对象io调度到第一区的第二缓冲器,第二缓冲器被配置为:响应于第一缓冲器用作第一冲刷缓冲器而用作第二日志缓冲器;连接第二组对象io以在第二缓冲器中形成第二对象组;将第二对象组记录到日志装置;将第二缓冲器的功能从第二日志缓冲器修改为第二冲刷缓冲器;以及将第二对象组传送到目标存储装置。所述方法还可包括:接收用于目标存储装置的第三组对象io;将第三组对象io调度到第二区的第三缓冲器,第三缓冲器被配置为:用作第三日志缓冲器;连接第三组对象io以在第三缓冲器中形成第三对象组;将第三对象组记录到日志装置;将第三缓冲器的功能从第三日志缓冲器修改为第三冲刷缓冲器;以及将第三对象组传送到目标存储装置,其中,第三组对象io包括高优先级数据,其中第一组对象io或第二组对象io包括低优先级数据。所述方法还可包括:调节超时窗口、将保存在第一日志缓冲器中的第一组对象io的最大数量或第一对象组的阈值大小,超时窗口对应于用于将第一组对象io中的一个存储在第一日志缓冲器的最大时间量,其中,基于超时窗口、将保存在第一日志缓冲器中的对象io的最大数量或第一对象组的阈值大小,将第一对象组记录到日志装置。可根据反馈算法来执行调节超时窗口、第一组对象io最大数量或阈值大小。所述方法还可包括使用现场可编程门阵列来处理存储在第一缓冲器中的数据。所述方法还可包括:接收大对象io;将大对象io与第一组对象io分开;以及将大对象io直接传递到目标存储装置。将第一对象组传送到目标存储装置的步骤可包括:搜索包括链接在一起的脏对象io的链表;以及将所述脏对象io传送到目标存储装置,所述脏对象io属于第一对象组。根据本公开的另一实施例,提供了一种在用于完成对象io的系统上实现的非暂时性计算机可读介质,所述非暂时性计算机可读介质具有计算机代码,所述计算机代码当在处理器上被执行时实现完成对象io的方法,所述方法包括:接收用于目标存储装置的第一组对象io;将第一组对象io调度到第一区的第一缓冲器,第一缓冲器被配置为用作第一日志缓冲器;连接第一组对象io以在第一缓冲器中形成第一对象组;将第一对象组记录到日志装置;将第一缓冲器的功能从第一日志缓冲器修改为第一冲刷缓冲器;以及将第一对象组传送到目标存储装置。所述计算机代码在被处理器执行时还可通过以下步骤来实现完成对象io的方法:接收用于目标存储装置的第二组对象io;将第二组对象io调度到第一区的第二缓冲器,第二缓冲器被配置为:响应于第一缓冲器用作第一冲刷缓冲器而用作第二日志缓冲器;连接第二组对象io以在第二缓冲器中形成第二对象组;将第二对象组记录到日志装置;将第二缓冲器的功能从第二日志缓冲器修改为第二冲刷缓冲器;以及将第二对象组传送到目标存储装置。所述计算机代码在被处理器执行时还可通过以下步骤来实现完成io的方法:接收用于目标存储装置的第三组对象io;将第三组对象io调度到第二区的第三缓冲器,第三缓冲器被配置为用作第三日志缓冲器;连接第三组对象io以在第三缓冲器中形成第三对象组;将第三对象组记录到日志装置;将第三缓冲器的功能从第三日志缓冲器修改为第三冲刷缓冲器;以及将第三对象组传送到目标存储装置,其中,第三组对象io包括高优先级数据,其中,第一组对象io或第二组对象io包括低优先级数据。所述计算机代码在被处理器执行时还可通过以下步骤来实现完成io的方法:调节超时窗口、将保存在第一日志缓冲器中的第一组对象io的最大数量或第一对象组的阈值大小,超时窗口对应于用于将第一组对象io中的一个存储在第一日志缓冲器的最大时间量,其中,基于超时窗口、将保存在第一日志缓冲器中的对象io的最大数量或第一对象组的阈值大小,将第一对象组记录到日志装置。可根据反馈算法来执行调节超时窗口、第一组对象io的最大数量或阈值大小。所述计算机代码在被处理器执行时还可通过使用现场可编程门阵列来处理存储在第一缓冲器中的数据来实现完成io的方法。所述计算机代码在被处理器执行时还可通过以下步骤来实现完成io的方法:接收大对象io;将大对象io与第一组对象io分开;以及将大对象io直接传递到目标存储装置。将第一对象组传送到目标存储装置的步骤可包括:搜索包括链接在一起的脏对象io的链表;以及将所述脏对象io传送到目标存储装置,所述脏对象io属于第一对象组。根据本公开的又一实施例,提供了一种用于完成对象io的系统,所述系统包括日志装置、目标存储装置和存储器高速缓存,其中,所述系统被配置为:接收用于目标存储装置的第一组对象io;将第一组对象io调度到第一区的第一缓冲器,第一缓冲器被配置为用作第一日志缓冲器;连接第一组对象io以在第一缓冲器中形成第一对象组;将第一对象组记录到日志装置;将第一缓冲器的功能从第一日志缓冲器修改为第一冲刷缓冲器;以及将第一对象组传送到目标存储装置。所述系统还可被配置为:接收用于目标存储装置的第二组对象io;将第二组对象io调度到第一区的第二缓冲器,第二缓冲器被配置为:响应于第一缓冲器用作第一冲刷缓冲器而用作第二日志缓冲器;连接第二组对象io以在第二缓冲器中形成第二对象组;将第二对象组记录到日志装置;将第二缓冲器的功能从第二日志缓冲器修改为第二冲刷缓冲器;以及将第二对象组传送到目标存储装置。所述系统还可被配置为:接收用于目标存储装置的第三组对象io;将第三组对象io调度到第二区的第三缓冲器,第三缓冲器被配置为用作第三日志缓冲器;连接第三组对象io以在第三缓冲器中形成第三对象组;将第三对象组记录到日志装置;将第三缓冲器的功能从第三日志缓冲器修改为第三冲刷缓冲器;以及将第三对象组传送到目标存储装置,其中,第三组对象io包括高优先级数据,其中,第一组对象io或第二组对象io包括低优先级数据。所述系统还可被配置为:调节超时窗口、将保存在第一日志缓冲器中的第一组对象io的最大数量或第一对象组的阈值大小,超时窗口对应于用于将第一组对象io中的一个存储在第一日志缓冲器的最大时间量,其中,基于超时窗口、将保存在第一日志缓冲器中的对象io的最大数量或第一对象组的阈值大小,将第一对象组记录到日志装置。因此,本公开的实施例的系统能够通过自适应地适应小对象io和大对象io两者来改善io性能,从而增加大对象io的吞吐量,同时减少小对象io的平均延迟。附图说明参照以下附图描述本实施例的非限制性和非穷举性实施例,其中,除非另有指定,否则贯穿各个视图,相同的参考标号表示相同的部分。图1是描绘根据本公开的一个或多个实施例的用于改善io性能的网络的框图。图2是描绘根据本公开的一个或多个实施例的分组方案的框图。图3是示出根据本公开的一个或多个实施例的基于日志冲刷(log-flush)缓冲器周期的io路径的流程图。贯穿附图的多个视图,相应的参考标号指示相应的组件。本领域技术人员将理解,附图中的元件是为了简洁和清楚而示出的,并且不一定按比例绘制。例如,附图中的一些元件、层和区域的尺寸可相对于其他元件、层和区域被夸大,以帮助提高清楚性和帮助对各种实施例的理解。此外,可能未示出与实施例的描述无关的共同的但易于理解的元件和部分,以便于对这些各种实施例的更少的阻碍并使描述清楚。具体实施方式通过参照实施例的具体实施方式和附图,可更容易地理解发明构思的特征和实现发明构思的方法。在下文中,将参照附图更详细地描述实施例。然而,描述的实施例可以以各种不同的形式来实现,并且不应被解释为仅限于在此示出的实施例。相反,这些实施例作为示例被提供,使得本公开将是彻底和完整的,并且将向本领域技术人员充分传达本发明构思的方面和特征。因此,对于本领域普通技术人员而言为了完全理解本发明构思的方面和特征不是必需的处理、元件和技术可不被描述。贯穿附图和书面描述,除非另有说明,否则相同的参考标号表示相同的元件,因此,将不再重复其描述。此外,为了使描述清楚,可能未示出与实施例的描述无关的部分。在附图中,为了清楚,元件、层和区域的相对大小可被夸大。在具体实施方式中,出于解释的目的,阐述了许多具体细节以提供对各种实施例的全面理解。然而,清楚的是可在没有这些具体细节或在一个或多个等同布置的情况下实现各种实施例。在其他实例中,以框图形式示出公知的结构和装置,以避免不必要地使各种实施例模糊。将理解,尽管术语“第一”、“第二”、“第三”等可在此用于描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应受这些术语限制。这些术语仅用于将一个元件、组件、区域、层或部分与另一元件、组件、区域、层或部分区分开。因此,在不脱离本公开的精神和范围的情况下,下面描述的第一元件、第一组件、第一区域、第一层或第一部分可被称为第二元件、第二组件、第二区域、第二层或第二部分。在此使用的术语仅出于描述特定实施例的目的,而不意在限制本公开。如在此所使用的,除非上下文另外清楚地指示,否则单数形式意在也包括复数形式。还将理解,当在本说明书中使用术语“包括”、“具有”和“包含”时,说明存在陈述的特征、整体、步骤、操作、元件和/或组件,但并不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组。如在此所使用的,术语“和/或”包括相关联的所列项中的一个或多个的任何组合和所有组合。如在此所使用的,术语“基本上”、“约”、“大约”和类似术语用作近似的术语而不是程度的术语,并且意在考虑本领域普通技术人员将认可的测量值或计算值的固有偏差。如在此所使用的,“约”或“大约”包括陈述的值,并且表示在由本领域普通技术人员考虑到所讨论的测量和与特定量的测量相关的误差(即,测量系统的限制)的情况下所确定的特定值的可接受偏差范围内。当特定实施例可被不同地实现时,可以以描述的顺序不同地执行特定的处理顺序。例如,两个连续描述的处理可被基本上同时执行或者以与描述的顺序相反的顺序被执行。根据在此描述的本公开的实施例的电子或电气装置和/或任何其他相关装置或组件可利用任何合适的硬件、固件(例如,专用集成电路)、软件或软件、固件和硬件的组合来实现。例如,这些装置的各种组件可形成在一个集成电路(ic)芯片上或分开的ic芯片上。此外,这些装置的各种组件可被实现在柔性印刷电路膜、载带封装(tcp)、印刷电路板(pcb)上,或者形成在一个基底上。此外,这些装置的各种组件可以是在一个或多个计算装置中的一个或多个处理器上运行的、执行计算机程序指令并与其他系统组件交互以执行在此描述的各种功能的进程或线程。计算机程序指令被存储在存储器中,可使用标准存储器装置(诸如,例如,随机存取存储器(ram))在计算装置中实现该存储器。计算机程序指令还可被存储在其他非暂时性计算机可读介质(诸如,例如,cd-rom、闪存驱动器等)中。此外,本领域技术人员应认识到:在不脱离本公开的实施例的精神和范围的情况下,各种计算装置的功能可被组合或集成到单个计算装置,或者特定计算装置的功能可被分布在一个或多个其他计算装置上。如在此所使用的,术语“第一缓冲器”、“第二缓冲器”、“第三缓冲器”等用于描述可服务于特定功能(例如,日志缓冲器功能或冲刷缓冲器功能)的缓冲器范围,并且可根据下面更详细描述的特定条件而改变或修改。因此,在一个或多个实施例中,术语“第一缓冲器”、“第二缓冲器”、“第三缓冲器”等可表示单个缓冲器的不同部分,而在一个或多个其他实施例中,术语“第一缓冲器”、“第二缓冲器”、“第三缓冲器”等可表示多于一个缓冲器。除非另有定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与本发明构思所属领域的普通技术人员通常理解的含义相同的含义。还将理解,除非在此清楚地如此定义,否则术语(诸如通用词典中定义的术语)应被解释为具有与它们在相关领域的上下文和/或本说明书中的含义一致的含义,并且不应当以理想化或过于形式化的含义来解释。图1是描绘根据本公开的一个或多个实施例的网络的框图。参照图1,根据本公开的一个或多个实施例的网络100遵循nvmeof(通过网络的非易失性存储器快速标准)架构。在一个或多个实施例中,网络100包括主机102、网络交换机104(例如,nvmeof交换机)、目标106(例如,nvme目标)和目标存储装置108(例如,基于nvme的键值ssd或kv-ssd)。参照图1,一个或多个主机102可根据数据处理应用或软件生成一个或多个io请求。io请求可包括用于基于对象的存储(例如,用于键值存储)的io操作(诸如,“放置”、“获得”、“删除”等)。io请求可包括不同的io大小(例如,小对象io和/或大对象io)。一个或多个主机102可将一个或多个io请求转发或发送到网络交换机104(诸如,将计算机网络上的装置连接在一起的多端口网桥)。网络交换机104可使用硬件地址来处理和转发数据。因此,网络交换机104可将一个或多个io请求发送到一个或多个目标之中的合适的目标106。一个或多个目标106之中的目标106可包括调度器(dispatcher)110、存储器高速缓存(例如,动态随机存取存储器(dram)高速缓存)、以及日志装置117(例如,低延迟日志装置)。调度器110可以是用于从网络交换机104接收一个或多个io并将一个或多个io调度到存储器高速缓存的多个部分的kvio调度器。存储器高速缓存可包括用于接收和处理来自调度器110的小对象io的一个或多个区(zone)116(例如,区0、区1、区2、区3),一个或多个区116可由存储器高速缓存中的分区形成。一个或多个区116可包括接收从调度器110调度的一个或多个小对象io的日志缓冲器(logbuffer)112。例如,至少两个区可均包括接收从调度器110调度的一个或多个相应的小对象io的日志缓冲器。调度器110可将一个或多个io(被称为“一组io”)调度到多个区中的对应的日志缓冲器。日志缓冲器112可将从调度器110接收的对象io记录或存储在日志装置117中。作为示例,出于崩溃恢复目的,日志装置117可以是非易失性双列直插式存储器模块(nvdimm)或低延迟ssd。日志装置117可将日志保持(maintain)在持久存储器中,使得日志可在系统崩溃之后被检查以确定相应的io是否完成。如果一个或多个io尚未完成,则系统可基于日志确定哪些附加步骤(如果有的话)可适合于完成任何未完成的io。日志装置117可适当地使用比目标存储装置108的存储容量少的存储容量(例如,以节省成本)。区116可包括冲刷缓冲器(flushbuffer)114,冲刷缓冲器114将对象io冲刷(例如,将冲刷缓冲器114的内容(例如,(键8,值)、(键6,值)、(键4,值)、(键1,值)、(键7,值)、(键9,值)等)写入或传送到目的地(诸如,目标存储装置))到目标存储装置108(例如,到kv-ssd)以完成io。目标存储装置108的其他实施例可包括能够存储对象的任何硬件和/或软件系统。根据从网络交换机104接收的对象io的大小,目标106可确定对象io的路径。例如,目标106可包括第一路径(例如,正常路径)118,由目标106接收的一个或多个大对象io可通过第一路径118被直接传递到目标存储装置108而不被日志缓冲器112接收。大对象io可以是处于或大于阈值大小的对象io,其中,在一个或多个实施例中,阈值大小可以是可调节的。目标106还可包括第二路径(例如,分组路径(groupingpath))120,调度器110通过第二路径(例如,分组路径)120接收一个或多个小对象io。小对象io可以是低于阈值大小的对象io。在第二路径120上,调度器110可将一个或多个小对象io调度或发送到相应的区116(例如,区116的日志缓冲器112)。根据本公开的一个或多个实施例,根据分组模式,第二路径120上的一个或多个小对象io可在日志缓冲器112中连接(concatenate)以形成对象组115或片段(clip,或称为剪辑)。在一个示例中,对象组115包括:(键0,值)、(键2,值)、(键3,值)、空槽等。因此,如上所述,根据公开的分组方案,对象io可通过可调节的阈值大小来筛选(screen)或分开,并且大对象io可遵循第一路径118,而小对象io遵循第二路径120。尽管目标106在此被描述为对应于针对一个或多个对象io的一个或多个路径,但是在一个或多个其他实施例中,其他合适的模块或装置可用于基于大小来确定针对一个或多个对象io的一个或多个路径。此外,大对象io可不被筛选或分开,并且大对象io可出于任何合适的目的被调度到区。例如,代替绕过将在下面描述的日志冲刷缓冲器周期,第一路径118上的大对象io可被直接调度到冲刷缓冲器,以被直接冲刷到目标存储装置108。在这种情况下,用作与日志缓冲器112相同功能的另一系统(例如,具有冗余副本的分布式系统)可用于在系统崩溃期间恢复数据。尽管目标存储装置108在图1中被描绘为与目标106分开,但是目标存储装置108的分类不限于此,在其他实施例中,目标存储装置108可被认为是目标106的一部分。此外,虽然在图1中示出了三个主机102、两个目标106和两个目标存储装置108,但是在对一个或多个主机102、目标106和目标存储装置108的输入和输出进行合适的修改的情况下,任何合适数量的主机、目标和目标存储装置可被使用。因此,网络交换机104可将io请求发送到与一个或多个目标存储装置108相关联的多个目标106。因此,nvmeof架构可将多个kv-ssd(例如,容纳在专用的仅存储服务器中的数千个或更多个kv-ssd)连接到主机。图2是描绘根据本公开的一个或多个实施例的分组方案的框图。参照图2,分组模式200包括调度器202(例如,kvio调度器)、一个或多个区204、日志装置206和目标存储装置(例如,持久性存储装置(诸如,kv-ssd))208。目标(例如,图1的目标106)可包括用于在每个区中进行查找的哈希表(hashtable)(或称为查找表)210和脏对象(dirtyobject)io(例如,尚未完成的对象io)的链表。在一个示例中,查找表210的内容可包括:h(k1)、h(k3)、h(k6)、h(k7)、h(k0)、h(k9)、空、h(k8)、h(k4)和h(k2)。调度器202可基于从包括在一个或多个区204中的每个的哈希表210确定的哈希键(hashkey)来确定一个或多个区204中的哪个区发送小对象io的键值。目标可包括保持脏对象io的顺序的链表(例如,在先到先服务的基础上将对象io顺序地排序的链表)。存储器高速缓存可使用链表来标识存储器高速缓存中的脏对象io。在一个或多个实施例中,链表可被保存在存储器高速缓存中。因此,与搜索整个哈希表210相反,脏对象io的链表可用于将脏对象io链接在一起,以通过标识脏对象io来有效地冲刷脏对象io。标识脏对象io可通过从链表的顶部扫描到链表的尾部来实现。因此,确定哈希表210的哪些桶(bucket)具有脏对象io的有效方式可避免不必要地在哈希表210中搜索将被冲刷的脏对象io。多个区204的使用使得能够针对不同的各种目的指定不同的区。例如,区204可被指定以用于具有不同吞吐量和延迟要求的不同类型的数据。调度器202可基于与io相关联的优先级来确定用于接收调度的io的相应的区204。例如,高优先级数据可被发送到用于高优先级数据的第一区,而低优先级数据可被发送到用于低优先级数据的第二区。第一区和第二区可具有不同的阈值参数、流量和/或数据处理特性,以分别地适应高优先级数据和低优先级数据。相应地,因为具有较高优先级的数据可与具有较低优先级的数据区分开,使得不同的数据可被调度器202发送到相应的合适的区,所以io性能可被优化或改善。多个区204的使用使得能够通过对非共享线程中的对象进行分区来实现无锁(lockless)io进程。换句话说,区204可以是专用的,使得例如对相同对象的请求被映射到相同的对应的区204。作为示例,区204可被指定为使用允许区204保持处理请求和完成的一种类型的命令(例如,“读取”命令)。因此,无锁实现可避免同一对象的“读取”或“写入”命令同时发生或在同一事件中发生。在一个或多个实施例中,如果对象io具有足够高的优先级(例如,“最高”优先级),则无论对象io的大小如何,对象io都可遵循第一路径(例如,图1的第一路径118),并且可跳过日志冲刷缓冲器周期被直接传递到目标存储装置208。通过跳过日志冲刷缓冲器周期,对象io经过正常io路径(例如,图1的第一路径118),而不被保存在日志装置206中,并且不经过日志缓冲器212。因此,各个高优先级对象io的延迟被减小。因此,本公开的系统和方法可被配置为基于优先级来筛选或分开对象io,以将对象io放置在不同的相应的区204中和/或使对象io通过不同的各个路径。用于从调度器202接收键值的区204可被定制。作为示例,在io被完成之前(例如,在数据被冲刷到目标存储装置208之前),一个或多个区204可被指定以用于重复数据删除、压缩等。在一个或多个实施例中,可使用nvme命名空间或键的前缀以标识服务或应用来完成对用于重复数据删除、压缩等的区204的指定。然而,本公开的实施例不限于此,并且根据本公开可使用指定区204用于特定类型的数据处理的其他合适的方法。此外,作为示例,可通过现场可编程门阵列(fpga)执行进一步的数据处理(诸如,重复数据删除、压缩等)。然而,根据本公开,任何合适的装置可用于处理区204中的数据,并且任何其他合适形式的数据处理可被执行。根据一个或多个实施例,一个或多个区中的每个可包括存储器高速缓存,存储器高速缓存包括一个或多个缓冲器。例如,区204可包括第一缓冲器(例如,日志缓冲器)212和第二缓冲器(例如,冲刷缓冲器)214。然而,应注意,第一缓冲器212和第二缓冲器214可自由地改变功能(例如,从日志缓冲器到冲刷缓冲器和/或从冲刷缓冲器到日志缓冲器),并且功能可根据在目标存储装置208上运行的软件模块来设置。日志缓冲器(例如,图2中所示的第一缓冲器212)可接受传入的(incoming)小对象io请求作为第二路径(例如,图1的第二路径120)的一部分。日志缓冲器可通过将接收的小对象io分组在一起来准备小对象io。换句话说,第一缓冲器212可将每个小对象io与一个或多个其他小对象io连接以形成对象组或片段216。日志缓冲器可继续接收小对象io,直到条件或触发(例如,直到对象组大小超过阈值大小或最大大小,直到最大数量的小对象io已经形成到对象组216中,和/或直到超时窗口已经消失,其中,在一个或多个实施例中,阈值、最大数量和/或超时窗口是可调节的)被达到。超时窗口是指小对象io被日志缓冲器接收或在日志缓冲器内接收的时间段。例如,可根据对象组216和/或区204根据小对象io的延迟和吞吐量适用性来设置该时间段。例如,超时窗口的时间段可至少基于对象组216中的对象io的优先级(例如,基于对象io的数量和/或自高优先级对象io被接收以来经过的时间)来调节,和/或可基于区相关条件(例如,基于被指定为高优先级区或低优先级区)来调节。日志缓冲器的接收时段的结束可取决于单个条件。然而,在一个或多个实施例中,接收时段的结束可取决于超过一个条件。例如,接收时段的结束可取决于首先满足的任何设置的条件或触发,或者可取决于组合(诸如,以对象组大小、组中的小对象io的数量、优先级和/或经过的时间的加权组合为例)。然而,应注意,以上被提供为非限制性示例。在一个或多个实施例中,可根据自适应反馈算法来执行对目标条件、日志缓冲器条件和/或冲刷缓冲器条件的自适应调节。作为示例,自适应反馈算法基于使用例如初始缓冲器大小、对象io阈值大小、每个对象组的对象数量和/或超时窗口的io的输出性能。基于这些初始参数的性能,自适应反馈算法可调节缓冲器大小、对象io阈值大小、每个对象组的对象数量和/或超时窗口。例如,因为日志缓冲器在达到超时窗口之前达到全容量,所以自适应反馈算法可随着入站io的大小和频率改变(例如,随着入站io模式改变)来监视输出性能,并且可确定缓冲器大小可被适当地增大,或者超时窗口可被适当地减小。可选地,因为超时窗口太频繁地到达,所以自适应反馈算法可确定缓冲器大小可被适当地减小,或者超时窗口可被适当地增大。可基于哪个参数提高了每秒完成的对象io(iops)的数量来确定是否调节超时窗口、缓冲器大小和/或日志缓冲器中的对象数量。因此,自适应反馈算法可直观地设置对象io阈值大小、缓冲器大小、每个对象组的对象数量和/或超时窗口。尽管在整个说明书中使用了术语“对象组”,但是如果在接收时段内日志缓冲器仅接收到单个小对象io,并且没有接收到其他小对象io,则连接可能不会发生,并且对象组216可仅包括单个小对象io。因此,在日志缓冲器212中形成包括一个或多个小对象io的对象组或片段216。出于将小对象io写入存储装置(诸如,日志装置206)和目标存储装置208(诸如kv-ssd)的目的,连接的对象组216可(由于连接)被视为单个大对象io。以这种方式,因为小对象io被视为单个大对象io,所以小对象io的平均延迟和吞吐量可被增强。在一个或多个实施例中,日志缓冲器将对象组216保持或记录到日志装置206,出于崩溃恢复目的,日志装置206可以是具有持久存储器的装置。例如,如果在对象io完成之前(例如,在对象io被冲刷到目标存储装置208之前)发生系统崩溃,则记录的数据可用于帮助恢复先前在日志缓冲器中的对象io。因此,系统可确定记录的io是否完成,并且还可确定哪些步骤(如果有的话)将适当地完成记录的io。在一个或多个实施例中,日志缓冲器可被配置为在将小对象io记录到日志装置206之后改变角色以用作冲刷缓冲器。例如,冲刷缓冲器(例如,图2中所示的第二缓冲器214)可在其中存储包括小对象io的对象组或片段218。如果多个日志缓冲器改变角色以用作冲刷缓冲器(例如,从而形成更大尺寸的单个冲刷缓冲器),则冲刷缓冲器可包括多个对象组218。在达到特定条件(诸如,阈值冲刷缓冲器大小和/或阈值空闲时段(例如,基于对象io存在于冲刷缓冲器中的经过时间))时,冲刷缓冲器可将冲刷缓冲器的内容冲刷(例如,可将对象组218冲刷)到目标存储装置208。然后,当冲刷缓冲器被清空并且对象io完成时,冲刷缓冲器的内容可被标记为删除以清除冲刷缓冲器的内容,从而释放存储器高速缓存中的空间。在冲刷缓冲器被清空之后,冲刷缓冲器可用于改变角色以用作日志缓冲器,从而实现单个日志冲刷周期。在一个或多个实施例中,第一缓冲器212和第二缓冲器214可并发地(例如,基本上同时地)重复多个日志冲刷周期。此外,阈值冲刷缓冲器大小和/或阈值空闲时段可以是可调节的(例如,通过算法、应用编程接口、配置文件或任何其他合适的方法)。因此,就公开的系统内的功能而言,第一缓冲器212和第二缓冲器214可具有相反的角色。例如,第一缓冲器212可用作日志缓冲器,而第二缓冲器214可用作冲刷缓冲器。如上所述,当第一缓冲器212改变角色以用作冲刷缓冲器时,第二缓冲器214改变角色以用作日志缓冲器。换言之,io可从调度器202调度到用作日志缓冲器的第二缓冲器214(例如,将传入的io连接以形成第二对象组216,并且将传入的io的内容(诸如,第二对象组216)记录到日志装置206),而第一缓冲器212用作冲刷缓冲器(例如,当第一缓冲器212将第一对象组218冲刷到kv-ssd208时)。随后,第一缓冲器212可返回到用作日志缓冲器,而第二缓冲器214返回到用作冲刷缓冲器。因此,因为存在用于并发地处理数据的活动日志缓冲器和活动冲刷缓冲器,所以io吞吐量和低io延迟可被保持。在一个或多个实施例中,日志缓冲器和/或冲刷缓冲器的大小可被动态地改变以适应来自自适应反馈算法的调节。例如,基于将被调度的对象io大小并且基于调度到日志缓冲器的先前io,调度器202可确定适当大小的日志缓冲器适合于容纳将被调度的对象io。因此,日志缓冲器的大小可被调节以能够接收附加的对象io。此外,调度器202可基于区204中的日志缓冲器的可用空间或存储器将对象io调度到对应的区204。图3是示出根据本公开的一个或多个实施例的基于日志冲刷缓冲器周期的io路径的流程图300。参照图3,目标可接收传入的对象io,并且可确定对象io是否低于或处于或大于设置大小(302)。设置大小可以是可由应用编程接口或配置文件调节的可调节阈值大小。因此,阈值大小可用于确定传入的对象io是小对象io还是大对象io。如果对象io处于或大于阈值大小,则对象io可跳过日志冲刷缓冲器周期,并且对象io可被直接传递到目标存储装置(304)以被存储在持久性存储器中。例如,通过跳过日志缓冲器周期,大对象io可通过正常io路径进行操作,而不需要被保存在低延迟日志装置中,并且不通过日志缓冲器或冲刷缓冲器传递。因此,因为大对象io不会遭受原本与小对象io相关联的延迟问题,所述延迟问题通过如上所述对小对象io进行分组来减少,所以可能不存在或几乎不存在通过对大对象io进行分组来将大对象io保存到低延迟日志装置获得的益处。然而,如果对象io低于设置大小,则对象io(或小对象io)可被发送或调度到用作日志缓冲器的目标的第一缓冲器(306)。在这个时间点,如果日志缓冲器为空(308),则对象io可被存储在日志缓冲器中,并且超时窗口可被重置(310)。此后,超时时段可开始。如果在日志缓冲器将对象io存储到日志装置之前达到超时窗口(312),则当前在日志缓冲器中的对象io可被记录到日志装置(314)。随后,日志缓冲器(例如,第一缓冲器)可停止用作日志缓冲器,并且此后可用作冲刷缓冲器(316)。在一个或多个实施例中,当一个或多个日志缓冲器交换或改变功能以充当冲刷缓冲器时,冲刷缓冲器保持一个或多个对象组。换句话说,冲刷缓冲器的大小扩展或增加以包含一个或多个日志缓冲器的内容。冲刷缓冲器中的一个或多个对象组可经历进一步的数据处理,或者可在冲刷缓冲器中保持空闲,直到冲刷缓冲器条件被满足为止(317)。例如,冲刷缓冲器条件可对应于空闲检测和/或存储器高速缓存大小。空闲检测可基于可调节的空闲超时(例如,空闲超时窗口),可调节的空闲超时可基于对象io的优先级和/或自最后一个对象组被添加到冲刷缓冲器以来的时间。在一个或多个实施例中,存储器高速缓存大小可基于存储器高速缓存中剩余的可用空间的可调节阈值(例如,基于dram高速缓存中剩余的用于冲刷缓冲器和日志缓冲器的可用空间或存储器)。在满足冲刷缓冲器条件(317)之后,冲刷缓冲器可开始将存储在冲刷缓冲器中的键值冲刷或清空到目标存储装置(诸如,kv-ssd)(318)。在一个或多个实施例中,目标可包括执行与由第一缓冲器执行的功能相反的功能的第二缓冲器。例如,当第一缓冲器用作日志缓冲器时,第二缓冲器用作冲刷缓冲器,并且当第二缓冲器用作日志缓冲器时,第一缓冲器用作冲刷缓冲器。因此,对象io能够继续被调度到第一缓冲器或第二缓冲器,同时另一缓冲器正在冲刷数据或正将数据传送到目标存储装置。在冲刷缓冲器的内容存储在目标存储装置上之后(318),冲刷缓冲器的键值可被标记使得冲刷缓冲器的键值可从存储器被删除,并且冲刷缓冲器可再次改变角色以充当日志缓冲器(320),从而完成日志冲刷缓冲器周期。在一个或多个实施例中,在kv-ssd上运行的软件模块可触发角色从日志缓冲器到冲刷缓冲器以及从冲刷缓冲器到日志缓冲器的改变或修改。在一个或多个实施例中,对象io可在超时窗口内被调度到日志缓冲器,并且日志缓冲器可能已经包括一个或多个对象io。也就是说,可确定缓冲器不为空(308)。在这种情况下,可对对象io执行连接以在日志缓冲器中形成对象组或片段(324)。例如,每个传入的小对象io可被单独连接以在日志缓冲器中形成越来越多的对象组。因此,小对象io可在被连接以在日志缓冲器中形成组之前在日志缓冲器中累积。因此,对象组可包括多个小键/值对象。日志缓冲器可接收附加的小对象io以包括在对象组中,直到一个或多个条件被满足或触发(326)。例如,条件可包括以下中的一个或多个:对象组大小超过可调节的阈值大小、可调节数量的小对象io形成为对象组和/或超时窗口消失。可通过软件输入和/或自适应反馈算法来调节一个或多个条件。因此,可取决于一个或多个条件的变化来影响小对象io的延迟和吞吐量。可考虑对象组大小、组中的小对象io的数量和/或经过的时间的组合。虽然单个对象io的完成由于诸如连接、等待时段和将对象组记录在低延迟日志装置中的动作而具有更长的延迟,但是因为对象组被有效地视为单个大键值,所以与一次一个地完成小对象io相比,与对象组相关联的平均延迟可减少。换句话说,日志冲刷缓冲器周期可导致存储在日志缓冲器中的第一小对象io的较高io延迟。然而,日志冲刷缓冲器周期通常可导致对象组的较低平均io延迟。例如,分组方式可将io的延迟减少大约一半,并且大约可使小对象io的突发的吞吐量加倍。因此,如在此所公开的,本公开的实施例通过将小对象io分组以将小对象io视为单个大对象io来改善小对象io的平均延迟和吞吐量。此外,本公开的实施例自适应地适应大对象io和小对象io的混合,以在大对象io上保持相对高的吞吐量并且在小对象io上保持相对低的延迟,从而增强io性能。虽然已经参照本公开的一些示例实施例具体地示出和描述了本公开,但是本领域普通技术人员将理解,在不脱离权利要求和它们的等同物中阐述的本公开的精神和范围的情况下,可在形式上和细节上进行各种改变。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1