CN109783012A - 基于闪存的储存器及其控制器 - Google Patents

基于闪存的储存器及其控制器 Download PDF

Info

Publication number
CN109783012A
CN109783012A CN201811357660.XA CN201811357660A CN109783012A CN 109783012 A CN109783012 A CN 109783012A CN 201811357660 A CN201811357660 A CN 201811357660A CN 109783012 A CN109783012 A CN 109783012A
Authority
CN
China
Prior art keywords
thread
function
request
flash memory
flash
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201811357660.XA
Other languages
English (en)
Inventor
郑溟随
权美玲
张�杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yi Rui Co
Industry Academic Cooperation Foundation of Yonsei University
Original Assignee
Yi Rui Co
Industry Academic Cooperation Foundation of Yonsei University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yi Rui Co, Industry Academic Cooperation Foundation of Yonsei University filed Critical Yi Rui Co
Publication of CN109783012A publication Critical patent/CN109783012A/zh
Withdrawn legal-status Critical Current

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请公开了基于闪存的储存器及其控制器。提供了一种基于闪存的存储设备,其包括闪存介质和该闪存介质的包括多个处理器核心的控制器。控制器的闪存固件被分解成多个功能,该多个功能由多个处理器核心上的多个线程实现,多个功能中的不同功能由多个线程中的不同线程实现,并且多个线程中的至少一个线程被映射在多个处理器核心之一上。

Description

基于闪存的储存器及其控制器
相关申请的交叉引用
本申请要求于2017年11月15日提交的韩国专利申请号为10-2017-0152433和2018年6月14日提交的申请号为10-2018-0068359的优先权和权益,这些申请的全部内容通过引用并入本文。
背景
(a)领域
所描述的技术大体上涉及基于闪存的存储设备及其控制器。
(b)相关技术的描述
闪速存储器被用作半导体存储器中的非易失性存储器。闪速存储器提供了某些优势,诸如快速读取速度、低功耗和非常密集的数据存储容量。因此,基于闪速存储器的存储设备被广泛用于替换硬盘。最近,基于闪存的存储设备(如固态硬盘(SSD))被用于不同计算域中的时间关键型应用,诸如高速缓存、数据库和引导驱动器。
此外,诸如非易失性存储器标准(NVMe)的存储器接口被设计成使得基于闪存的存储设备能够充分利用并行性。尽管新的存储器接口带来了诸多好处,但对于单个存储设备来说单独并行管理大量的I/O请求是有意义的。具体地,高性能的基于闪存的存储设备可以并行处理每秒一百万个I/O请求(MIOPS)。
概述
本发明的实施例提供了一种基于闪存的存储设备及其控制器,用于能够在短时间内处理许多I/O请求。
根据本发明的实施例,提供了一种基于闪存的存储设备,其包括闪存介质和该闪存介质的包括多个(a plurality of)处理器核心的控制器。控制器的闪存固件被分解成多个功能,该多个功能由多个处理器核心上的多个线程实现,多个功能中的不同功能由多个线程中的不同线程实现,并且多个线程中的至少一个线程被映射在多个处理器核心之一上。
基于闪存的存储设备还可以包括内部存储器。多个功能可以包括解析来自主机的队列的输入/输出(I/O)请求的第一功能、将I/O请求的逻辑地址转换成对于闪存介质的物理地址的第二功能、以及基于I/O请求的物理地址构成对于闪存介质的闪存事务的第三功能。多个线程可以包括用于实现第一功能的至少一个第一线程、用于实现第二功能的至少一个第二线程、以及用于实现第三功能的至少一个第三线程。可以由多个线程在第一线程和第三线程之间形成用于处理多个I/O请求的多个路径。
至少一个第一线程可以包括多个第一线程。队列可以包括提交队列,并且控制器可以将其中存储有多个I/O请求的提交队列的条目复制到在内部存储器中创建的提交队列缓冲器。每个第一线程可以解析来自提交队列缓冲器的多个I/O请求中的相应一个。
多个第一线程可以并行解析多个I/O请求。
每个第一线程可以用相应的I/O请求的结果更新在内部存储器中创建的完成队列缓冲器。控制器可以将完成队列缓冲器的条目复制到主机的完成队列。
多个第一线程可以按照无序方式用多个I/O请求的结果更新完成队列缓冲器。
至少一个第二线程可以包括多个第二线程。在第一线程中使用的逻辑地址空间可以被划分成分别对应于多个第二线程的N个地址块,其中N是第二线程的数目。I/O请求的逻辑地址可以由多个第二线程中的第二线程转换成物理地址,该第二线程具有对应于在N个地址块中该逻辑地址所属的地址块的索引。
至少一个第二线程可以包括多个第二线程。I/O请求的逻辑地址可以由多个第二线程中的第二线程转换成物理地址,该第二线程具有对应于通过加扰逻辑地址获得的结果的索引。
逻辑地址可以被分成多个位组,每个位组由n个位组成,其中n是第二线程的数目(N)的二进制对数(log2N)。索引可以对应于通过对多个位组执行逐位XOR运算而获得的结果。
至少一个第二线程可以包括多个第二线程。对于闪存介质的地址空间的多个物理块可以以块交织被分配给多个第二线程。每个第二线程可以将I/O请求的逻辑地址转换为对应于分配的物理块的物理地址。
多个功能还可以包括第四功能,该第四功能获取用于排除对I/O请求的逻辑地址的其他I/O请求的锁。多个线程还可以包括用于实现第四功能的至少一个第四线程。
至少一个第一线程可以包括多个第一线程。第四线程可以从多个第一线程中的目标第一线程接收针对I/O请求的逻辑地址的锁获取请求,并且当没有已经获取了针对逻辑地址的范围的锁的第一线程时,获取针对该逻辑地址的范围的锁。
当另一个第一线程已经获取了针对逻辑地址的范围的锁时,目标第一线程可以将I/O请求转发给该另一个第一线程。
多个功能还可以包括第四功能,当I/O请求满足预定条件时,该第四功能通过内部存储器处理I/O请求。多个线程还可以包括用于实现第四功能的至少一个第四线程。当I/O请求不满足预定条件时,第一线程可以绕过第四线程将I/O请求传送到第二线程。
第一线程可以查找内部存储器的高速缓存映射表,以确定I/O请求是否满足预定条件,该高速缓存映射表包括映射到物理地址的逻辑地址被写入其中的第一条目和其逻辑地址被逐出到闪存介质的第二条目。预定条件可以包括I/O请求的逻辑地址被写入第一条目或第二条目的条件。
多个功能还可以包括执行垃圾收集的第四功能和执行日志记录的第五功能。多个线程还可以包括用于实现第四功能的至少一个第四线程和用于实现第五功能的至少一个第五线程。第四线程和第五线程可以独立于第一线程、第二线程和第三线程来执行。
当没有活动的第一线程时,第四线程可以执行垃圾收集。
多个线程可以是独立的。
根据本发明的另一实施例,提供了包括闪存介质和内部存储器的基于闪存的存储设备的控制器。控制器包括多个处理器核心。控制器的闪存固件被分解成多个功能,该多个功能由多个处理器核心上的多个线程实现,多个功能中的不同功能由多个线程中的不同线程实现,并且多个线程中的至少一个线程被映射在多个处理器核心之一上。多个功能包括解析来自主机的队列的输入/输出(I/O)请求的第一功能、将I/O请求的逻辑地址转换为对于闪存介质的物理地址的第二功能、基于I/O请求的物理地址构成对于闪存介质的闪存事务的第三功能、获取用于排除针对I/O请求的逻辑地址的其他I/O请求的锁的第四功能、以及当I/O请求满足预定条件时通过内部存储器处理I/O请求的第五功能。多个线程包括用于实现第一功能的至少一个第一线程、用于实现第二功能的至少一个第二线程、用于实现第三功能的至少一个第三线程、用于实现第四功能的至少一个第四线程、用于实现第五功能的至少一个第五线程。由多个线程在第一线程和第三线程之间形成用于处理多个I/O请求的多个路径。
多个功能还可以包括执行垃圾收集的第六功能和执行日志记录的第七功能。
根据又一实施例,提供了包括控制器、闪存介质和内部存储器的基于闪存的存储设备。
根据本发明的实施例,闪存固件的功能可以分解成多个功能,并且每个功能可以由多个处理器核心上的线程实现,使得许多I/O请求可以在短时间内被处理。
附图说明
图1是根据本发明的实施例的计算设备的示意性框图。
图2和图3是根据本发明的实施例的用于解释SSD控制器中的数据路径的图。
图4A是示出根据闪存芯片的数量在带宽和执行延迟之间的关系的图。
图4B是示出根据核心数量的SSD性能的图。
图5是根据本发明的实施例的SSD的示意性框图。
图6是根据本发明的实施例的SSD控制器的示意性框图。
图7是示出根据本发明的实施例的用于在SSD控制器中将FTL核心分解成功能的架构的图。
图8和图9是示出了根据本发明的实施例的SSD控制器中的线程的操作的图。
图10是根据本发明的实施例的用于解释SSD控制器中的NVMQ的操作的图。
图11是根据本发明的实施例的用于解释SSD控制器中的关于NVMQ的静态分配的图。
图12是根据本发明的实施例的用于解释SSD控制器中的I/O冲突的图。
图13是根据本发明的实施例的用于解释SSD控制器中的CACHE的操作的图。
图14是根据本发明的实施例的用于解释SSD控制器中的TRANS的操作的图。
图15是根据本发明的实施例的用于解释SSD控制器中的FCMD的操作的图。
图16和图17各自示出了具有16个通道的闪存主干(flash backbone)的低级性能。
图18是示出根据本发明的实施例的线程被分配给SSD控制器中的SSD平台的图。
图19是示出根据本发明的实施例的SSD控制器中的每个线程的所需频率的图。
图20是根据本发明的另一实施例的用于解释SSD控制器中的关于NVMQ的DIOS的图。
图21是根据本发明的另一实施例的用于解释SSD控制器中的ILOCK的操作的图。
图22是根据本发明的另一实施例的用于解释SSD控制器中的CACHE的旁路的图。
图23是根据本发明的另一实施例的用于解释SSD控制器中TRANS的地址随机化的图。
图24A、图24B、图24C和图24D是用于比较具有从4KB到32KB变化的I/O大小的SSD平台的吞吐量的图。
图25A和图25B是示出根据ILOCK设计的活动NVMQ线程的数量的图。
图26A是示出根据ILOCK设计的SSD平台的性能的图。
图26B是示出根据ILOCK设计的延迟的图。
图27是示出根据CACHE线程的数量的SSD平台的性能的图。
图28是示出根据TRANS设计的SSD平台的性能的图。
图29是示出根据TRANS设计的SSD平台的性能的图。
图30是示出LOG线程和BGC线程的活动的图。
图31是示出根据线程数量的SSD平台的性能的图。
图32是示出线程的分布的图。
实施例的详细描述
在以下详细描述中,仅通过例证的方式只显示和描述了本发明的某些示例性实施例。如本领域技术人员将会认识到,所描述的实施例可以以各种不同的方式进行修改,而全都不偏离本发明的精神或范围。因此,附图和描述被认为是本质上说明性的而不是限制性的。在整个说明书中,相同的参考数字表示相同的元件。
图1是根据本发明的实施例的计算设备的示意性框图。
参考图1,本发明的实施例的计算设备包括主机110、基于闪存的存储设备120和存储接口130。图1是可能的计算设备的示例,并且本发明的实施例可以由各种不同的计算设备实现。
在一些实施例中,计算设备可以是各种类型的计算设备中的任何一种。各种类型的计算设备可以包括例如移动设备(诸如智能电话和平板计算机)、膝上型计算机、台式计算机、多媒体播放器、游戏控制台、电视、各种物联网(IoT)设备等。
主机110连接到基于闪存的存储设备120,并处理基于闪存的存储设备200的数据。在一些实施例中,主机110可以包括中央处理单元(CPU)111、系统存储器112以及连接CPU111和系统存储器112的系统总线113。系统存储器112可以是例如动态随机存取存储器(DRAM)。
基于闪存的存储设备120是基于闪速存储器的存储设备。基于闪存的存储设备可以包括例如固态硬盘(SSD)、安全数字(SD)卡或通用串行总线(USB)闪存驱动器。在下文中,在本发明的实施例中,SSD被描述为基于闪存的存储设备120的示例。
存储接口130连接主机110和SSD 120。在一些实施例中,存储接口130可以使用基于块的存储接口。例如,存储接口130可以使用外围部件互连标准(PCIe)、小型计算机系统接口(SCSI)、串行连接SCSI(SAS)、串行AT附件(SATA)或嵌入式多媒体卡(eMMC)。在下文中,存储接口130被描述为PCIe接口。
SSD 120包括闪存介质121和闪存介质的控制器122,即SSD控制器122。闪存介质121包括闪存芯片。特别地,闪存介质121可以包括多个闪存芯片以提供大容量。SSD控制器122通过主机接口(未示出)连接到存储接口130以与主机110通信,并且通过闪存接口(未示出)与闪存介质121通信。SSD控制器122抽象化闪存介质121以将闪存介质121作为按块可读或可写的块设备暴露给主机110。
接下来,描述SSD控制器中的数据路径。
图2和图3是根据本发明的实施例的用于解释SSD控制器中的数据路径的图。为了方便起见,在图2和图3中示出了闪存介质包括NAND闪存芯片,PCIe接口由NVMe协议管理,并且闪存接口由开放式NAND闪存接口(ONFi)协议管理。
参照图2,主机210通过主机接口连接到SSD控制器220。
在NVMe协议中,主机210的系统存储器包括各种队列,并且SSD控制器220包括各种门铃寄存器(doorbell register)221a和221b。在一些实施例中,门铃寄存器221a和221b可以在主机接口上实现。在一些实施例中,各种队列可以包括提交队列211和完成队列212,并且各种门铃寄存器可以包括尾部门铃寄存器221a和头部门铃寄存器221b。
为了执行输入/输出(I/O)请求,在步骤S201处,主机210的应用或操作系统(OS)向提交队列(SQ)211提交命令,例如NVMe命令,并且在步骤S202处,通过将新的尾部索引写入相应的门铃寄存器221a来通知SSD请求到达。该命令可以是例如写命令或读命令。提交队列211可以形成在主机210的系统存储器(图1的112)上。
SSD控制器220的闪存固件(称为闪存转换层(FTL))在步骤S203处将命令从提交队列211中提取到内部队列(未示出)中,并且在步骤S204处处理该命令,例如解析该命令的I/O操作、元数据和实际数据位置。因此,FTL可以处理主机命令。
然后,在步骤S205处,FTL将主机210的逻辑地址(例如,逻辑块地址(LBA)或逻辑页号(LPN))转换成对于闪存介质的物理地址,例如物理页地址(PPA)。例如,逻辑地址可以包括起始LBA和块号。与此同时,FTL也可以协调关于写的数据传输。因此,FTL可以执行地址转换。
在一些实施例中,LPN可以是LBA被转换成的页中的逻辑地址,并且从主机传输的LBA可以被稍后描述的NVMQ线程转换成LPN。在下文中,为了方便起见,逻辑地址被描述为LPN,并且物理地址被描述为PPA。
接下来,在步骤S206处,FTL管理闪存事务。一旦地址转换完成,FTL就会基于I/O定时约束将数据引入闪存介质和从闪存介质引出数据。I/O定时约束可以由ONFi协议定义。
在闪存事务之后,在步骤S208处,FTL通过在步骤S207处生成消息信号中断(MSI)向主机210通知队列完成。在步骤S208处,FTL可以将结果写入完成队列(CQ)212,以通知主机210队列完成。完成队列211可以与提交队列211配对,并且可以在主机210的系统112中形成。然后,主机210可以在步骤S209处完成I/O处理,并在步骤S210处通过将新的头部索引写入相应的门铃寄存器221b来确认MSI。
参照图3,如参照图2所述,FTL 320在应用310和闪存介质330之间操作,并且可以执行步骤S203至S208的操作。具体地,FTL 320通过处理相应的门铃寄存器来根据应用310处理主机命令321。此外,FLT 320执行地址转换322。然后,FTL 320管理对于闪存介质330的存储器事务323,并向闪存介质330写入数据或从闪存介质330读取数据。
虽然传统技术将主机命令处理321和闪存事务管理323分别区分为主机接口层(HIL)和闪存接口层(FIL),但是最近,模块321和323都被实现为单片固件。
FTL 320可以管理用于地址转换322的逻辑块空间322a和物理闪存空间322b。此外,FTL 320可以管理SSD的内部存储器空间321b,并且访问用于主机命令处理321的主机系统存储器空间321a,并且可以管理用于闪存事务管理323的闪存接口协议323a。例如,FTL320可以管理SSD的内部存储器,用于高速缓存输入的I/O请求和相应的数据,并且可以将SSD的内部存储器用于元数据和队列(例如,提交队列和完成队列)。此外,FTL 320可以访问主机系统存储器空间321a以通过存储接口(例如,PCIe接口)传输实际数据。
SSD可能需要大量闪存芯片和队列来处理每毫秒超过一千个请求。处理时间可能不在关键路径上,因为闪存延迟比一个CPU时钟周期长几个数量级。然而,当增加闪存芯片的数量时,FTL可能需要强大的计算能力,不仅要跨许多闪存芯片传播I/O请求,还要并行处理I/O命令。在这种情况下,设计不当的单片固件可能会增加计算延迟。特别地,随着闪存芯片和队列的数量的增加,计算延迟可能会占用总I/O处理时间的大部分时间。
此外,由于单片设计在没有任何约束和保护机制的情况下参与对存储器的访问,因此数据不一致和非相干可能会因同时访问而发生。因此,SSD的共享存储器空间可能需要适当的并发控制和资源保护机制。
为了理解扩展SSD固件的主要挑战,参考图4A和图4B描述了具有用于扩展基线SSD架构的60个核心和240个硬件线程的英特尔MIC的测试结果。
图4A是示出根据闪存芯片的数量的在带宽和执行延迟之间的关系的图,以及图4B是示出根据核心数量的SSD的性能的图。
图4A示出了当4KB数据被顺序写入具有单核的SSD时总延迟被分解成如下项的结果:i)NVMe管理(图4A的I/O解析和I/O提取)、ii)I/O高速缓存(图4A的I/O高速缓存)、iii)包括闪存事务处理的地址转换(图4A的地址转换)、vi)NVMe数据传输(图4A的DMA)以及v)闪存I/O操作(图4A的闪存)。如图4A所示,SSD的性能(即,带宽(GB/s))在0.5GB/s处饱和,其中128个闪存芯片连接在16个通道上,并且即使添加了超过一千个芯片性能也不会提高更多。具体来说,在SSD利用数十个闪存芯片的情况下,闪存操作是总执行时间的主要组成(总延迟的87.6%)。然而,随着闪存芯片的数量的增加(例如,超过一百个),固件操作成为瓶颈。也就是说,在由于许多闪存芯片导致的饱和区域中,NVMe管理和I/O高速缓存占总执行时间的36%,地址转换占总执行时间的30%,而闪存I/O操作仅消耗总执行时间的12%。
闪存固件位于SSD中的关键路径上有两个原因。首先,NVMe队列可以提供许多I/O资源,这些资源可以利用SSD内部并行性,但是单核SSD的计算能力不足以飞速(on thefly)提取所有请求。其次,跨许多闪存芯片使I/O访问并行化比执行所有请求的地址转换更快。这些挑战可能会使单片固件难以充分利用内部SSD并行性。
为了使闪存固件脱离关键路径,可以使用通过添加更多核心和拥有更多固件实例来增加计算能力的方法。这种方法可以每队列分配一个核心,并启动与核心数量一样多的多个固件实例。图4B示出了随着核心数量的增加SSD的实际性能(图4B的自然(naive))和SSD的预期性能(图4B的预期)之间的比较。SSD的实际性能是以每秒I/O请求(IOPS)来衡量的,SSD的预期性能是通过将核心数量乘以单核SSD的IPOS来计算的。如图4B所示,SSD即使有32个核心实际上也只能实现338KIOPS(千IOPS),与预期性能相比这表现出84.2%的性能降低。这是因为对于存储器空间的争用和一致性管理会带来大量同步开销,并且FTL排序并序列化I/O请求以在并行处理许多队列的同时避免冲突。
基于上述分析,本发明的实施例可以使用多个核心来增加FTL的计算能力,并将多个核心集成在新的架构(例如软件架构)中,从而提供MIOPS。例如,可以使用十个或更多个核心。
图5是根据本发明的实施例的SSD的示意性框图,并且图6是根据本发明的实施例的SSD控制器的示意性框图。
参照图5,SSD 500包括闪存介质510、SSD控制器520以及连接闪存介质510和SSD控制器520的通道530。
闪存介质510包括多个闪存芯片511。每个闪存芯片511可以是包括具有预定存储容量的闪速存储器的闪速存储器封装。闪速存储器可以包括例如NAND闪速存储器或NOR闪速存储器作为非易失性存储器。在下文中,闪速存储器被描述为NAND闪速存储器。每个闪存芯片511可以包括一个或更多个管芯(例如,两个管芯),并且每个管芯可以包括多个平面。每个平面可以包括多个块,并且每个块可以包括多个页。
通道530可以包括多个通道。在这种情况下,每个通道530可以连接到预定数量的闪存芯片511,例如八个闪存芯片511。此外,多个通道530并联连接到SSD控制器520。每个通道530将闪存事务传送到相应的闪存芯片511。在一些实施例中,可以使用比现有SSD中使用的八个通道更多的通道。
SSD控制器520执行主机和闪存介质510之间的接口连接,并且管理SSD 500的闪存介质510,使得主机可以在将闪存介质510视为块设备的情况下执行读/写操作。为此,SSD控制器520包括闪存转换层(FTL)。FTL将主机的文件系统中生成的逻辑地址映射到闪存介质510的物理地址。因此,FTL可以基于从主机传输的逻辑地址来执行针对闪存介质510的读/写操作的地址转换。
SSD控制器1020可以包括多个处理器核心,即用于提供高性能的FTL核心(未示出)。在一些实施例中,处理器核心可以是CPU。
SSD 500还可以包括内部存储器540。内部存储器540可以是例如DRAM。
参照图6,SSD控制器600包括多个FTL核心610、闪存接口、主机接口630、存储器接口640和互连总线650。
SSD控制器600通过通道连接到闪存介质510。在一些实施例中,SSD控制器600可以通过多个通道连接到闪存介质510。在一个实施例中,预定数量的闪存芯片可以连接到一个通道。
闪存接口620经由多个通道连接到闪存介质510。主机接口630连接到主机,并且可以是例如PCIe接口。存储器接口640连接到SSD的内部存储器(图5的540)。SSD控制器600还可以包括用于通过存储器接口640控制内部存储器540的存储器控制器。
SSD控制器600还可以包括用于内部存储器和闪存介质510之间的数据移动的直接存储器存取(DMA)引擎。
SSD控制器600还可以包括用于存储元数据信息的便笺式存储器。
互连总线650连接FTL核心610、闪存接口620、主机接口630和存储器接口640。
接下来,参考图7至图9描述根据本发明的实施例的用于在SSD控制器中将FTL核心分解成功能组的架构。
图7是示出根据本发明的实施例的用于在SSD控制器中将FTL核心分解成功能的架构的图,以及图8和图9是示出根据本发明的实施例的SSD控制器中的线程的操作的图。
传统的FTL设计无法将许多处理器核心带来的计算能力完全转换为存储性能,因为它们将所有FTL任务放入软件栈的单个大块中。在根据本发明的实施例的SSD控制器中,如图7所示,单片FTL被分解成多个不同的功能组。
参照图7,多个不同的功能组包括队列处理710、索引锁(ILOCK)720、数据高速缓存(CACHE)730、地址转换(TRANS)740以及闪存命令和事务调度(FCMD)750。队列处理710可以是例如NVMe队列处理(NVMQ)。在下文中,队列处理710被描述为NVMQ 710。在一些实施例中,多个不同的功能组还可以包括日志记录实用程序(LOG)760。在一些实施例中,多个不同的功能组可以包括后台垃圾收集实用程序(BGC)770。
在一些实施例中,每个功能可以由固件的线程实现。固件是一组线程,即请求处理网络中的一组模块。所有线程可以完全独立。每个线程可以有SSD任务实例,并且线程可以通过复制到多个并行实例(称为层)来扩展。一个FTL核心可以具有一个或更多个线程。
在一个实施例中,可以将层分组为采集阶段、应用阶段和分散阶段。采集阶段可以解析NVMe请求并将它们收集到内部存储器(例如,DRAM),并且可以包括NVMQ和ILOCK。应用阶段可以缓冲数据和转换地址,并且可以包括CACHE和TRANS。分散阶段可以跨闪存芯片传播请求,以及并行管理后台SSD内部任务,并且可以包括FCMD、LOG和BGC。
如图8和图9所示,在采集阶段中,在步骤S501处,NVMQ线程从提交队列中提取I/O请求并解析I/O请求。在一些实施例中,在步骤S502处,NVMQ线程可以向ILOCK线程发送消息,以请求针对I/O请求的地址范围的锁获取。因此,在步骤S503处,ILOCK线程确定另一NVMQ线程是否已经获取了针对I/O请求的地址范围的锁,并且在步骤S504处获取针对地址范围的锁并且向NVMQ线程通知锁获取。在一个实施例中,如果另一个NVMQ线程已经获取锁,则在步骤S505处,NVMQ线程可以将I/O请求传送到已经获取锁的NVMQ线程。
在应用阶段中,在步骤S506处,NVMQ查找CACHE线程的映射表,以确定是将I/O请求传送到CACHE线程,还是通过绕过CACHE线程将I/O请求传送到TRANS线程。在步骤S507处,当将I/O请求传送到CACHE线程时,CACHE线程从突发缓冲器读取数据或将数据写入突发缓冲器。在这种情况下,CACHE线程可以将I/O请求的完成通知给NVMQ线程。此外,NVMQ线程可以向ILOCK线程传送锁释放的请求。此外,当逐出存储在突发缓冲器中的数据时,CACHE线程可以将请求传送到TRANS线程。
当绕过CACHE线程时,在步骤S508处,NVMQ线程将I/O请求传送到TRANS线程。在这种情况下,NVMQ线程可以传送多个TRANS线程中的对应于I/O请求的逻辑地址的TRANS线程。在步骤S509处,TRANS线程通过参考地址映射表将逻辑地址转换为物理地址。
在分散阶段处,FCMD线程在步骤S510处将由TRANS线程传输的物理地址解析成闪速存储器的目标资源号,并在步骤S511处构成闪存事务。根据闪存事务可以将写数据写入闪速存储器的目标资源,或者可以从闪速存储器的目标资源读取读数据。一旦数据的读/写完成,FCMD线程就可以将I/O请求的完成通知给NVMQ线程。此外,NVMQ线程可以向ILOCK线程传送锁释放的请求。
在一些实施例中,一旦完成数据写入,FCMD线程可以将闪存写入信息传输到LOG线程,以请求更新元数据。因此,LOG线程可以更新地址映射表的元数据。
在一些实施例中,LOG线程可以执行日志记录,用于周期性地将内部存储器转储到指定的闪存空间,并跟踪尚未转储的更改。换句话说,LOG线程可以周期性地读取内部存储器中的所有元数据,将它们存储到闪速存储器中,并在后台中构建检查点。
在一些实施例中,当没有活动的NVMQ线程时,BGC线程可以执行垃圾收集以回收块。
SSD控制器的上述闪存固件架构可以实现可扩展和灵活的计算以及高度并行的I/O执行。
在一些实施例中,所有线程都可以完全独立,且I/O请求可以在图9中所示的线程网络中从右向左处理。因此,可以减少由管理各种存储器空间带来的硬件争用和一致性问题。例如,如图9所示,两个独立的I/O请求可以由两条不同的网络路径处理,这两条网络路径分别用虚线和实线突出显示。因此,固件可以同时为输入的I/O请求提供固件可以创建的尽可能多的网络路径。
在一些实施例中,与网络上的其他线程不同,BGC和LOG线程与输入的I/O请求异步,因此它们可以创建自己的网络路径(例如,图9中虚线表示的路径),这可以在后面执行SSD内部任务。
在一些实施例中,可以通过基于系统架构师或设计者的需求添加更多线程来简单地扩展固件架构。
接下来,参考图10至图15描述了每个功能。
首先,参考图10和图11描述根据本发明的实施例的SSD控制器中的NVMQ。
图10是根据本发明的实施例的用于解释SSD控制器中的NVMQ的操作的图,以及图11是根据本发明的实施例的用于解释SSD控制器中的关于NVMQ的静态分配的图。
参照图10,NVMQ线程执行与命令和队列管理相关的任务。一旦主机在步骤S1010处向提交队列SQ0提交了对应于请求的命令(例如NVMe命令),并且在步骤S1020处写入了对应的SQ尾部门铃寄存器,则在步骤S1030处,NVMQ线程从提交队列SQ0中提取该命令,并且在步骤S1040处,通过参考物理区域页(PRP)来解码系统存储器(图1的112)上的目标数据地址。PRP对应于系统存储器112中的分散和采集列表。
在一个实施例中,由于请求中的数据长度可以变化,因此目标数据可以由多个数据帧传送,每个数据帧通常为4KB。虽然命令信息可以由设备级寄存器和提交队列获取,但是与单个I/O请求相关联的多个数据帧的内容可以跨系统存储器112中的非连续存储器地址存在。因此,在步骤S1050处,NVMQ线程可以解析PRP并针对每个请求的多个数据帧启动直接存储器存取(DMA)。一旦与数据帧相关联的I/O服务完成,NVMQ线程可以通过完成队列(CQ)通知主机完成。
由于PRP的所有目标数据地址都指向主机的系统存储器112,多个NVMQ线程同时访问同一PRP并处理DMA,因此数据可能不一致。因此,如图11所示,一些实施例可以每NVMQ线程分配一个队列。换句话说,当提供多个NVMQ线程(NVMQ0-NVMQn)时,可以将专用提交队列SQi分配给每个NVMQ线程(NVMQi)。这里,i是从0到N的整数。此外,可以将专用完成队列分配给每个NVMQ线程NVMQi。这种队列分配被称为静态队列分配。
在静态队列分配中,每个NVMQ线程(NVMQi)基于由主机写入的门铃寄存器的队列索引从相应的提交队列SQi提取请求,并将相应的数据从主机的系统存储器112带到SSD的内部存储器。在这种情况下,每个NVMQ线程(NVMQi)仅处理专用提交队列(SQi)和专用完成队列,因此不存在由无序方式同时进行的PRP访问或队列处理引起的争用和冲突。
在一些实施例中,NVMQ线程可以将I/O请求分成多个子请求,并且从NVMQ线程传送到另一个线程的请求可以是子请求。例如,NVMQ线程可以将I/O请求分成4KB大小的子请求。
接下来,参考图12描述根据本发明的实施例的SSD控制器中的ILOCK。
图12是根据本发明的实施例的用于解释SSD控制器中的I/O冲突的图。
即使多个线程可以并行处理I/O请求,这些线程也可能同时参与闪存管理,因此并发性可能会在物理闪存空间处引入I/O冲突或一致性问题。如图12所示,启动两个I/O进程的写请求req0和读请求req1可以指向闪存介质的同一个物理页地址(在图12中所示的示例中为0x08)。由于这两个请求req0和req1是由不同的提交队列和不同的NVMQ线程提取的,因此读请求req1可以比写请求req0稍早从与目标物理地址相关联的闪存中供给。然后,写请求req0可以被暂停,并且读请求req1可以被提供过时的数据。
为了解决这个问题,可以使用ILOCK来获取锁以排除其他I/O请求。ILOCK可以提供锁定机制来保证I/O请求之间的数据一致性。在一些实施例中,对应于物理地址空间的逻辑地址空间可以被划分成多个碎片,这些碎片的访问粒度大于页面,并且锁标识符(ID)可以被分配给每个碎片。
ILOCK线程从NVMQ线程接收包括NVMQ ID、I/O请求的逻辑地址和锁请求信息的消息。锁请求信息可以指示锁获取或锁释放中的任何一个。锁请求可以是逻辑地址中按页锁请求。
ILOCK线程基于对应于锁请求的目标地址(逻辑地址)的锁ID(即,分配给逻辑地址所属碎片的锁ID)来标识所有者ID。所有者ID可以是已经获得锁ID的NVMQ ID。当锁请求是锁获取并且锁ID的所有者ID不存在时,ILOCK线程获取对于锁请求的NVMQ ID的锁。因此,ILOCK线程可以阻止具有的地址范围与逻辑地址的地址范围重叠的另一个I/O请求。当锁请求是锁获取并且锁ID的所有者ID存在时,ILOCK线程会阻止I/O请求服务。当锁请求是锁释放并且锁ID的所有者ID存在时,ILOCK线程会删除锁ID的所有者ID。
在一些实施例中,对于灵活的存储器管理,锁线程可以将锁机制实现为二叉树,例如红黑(RB)树。ILOCK线程可以检查树上是否存在包括锁ID和所有者ID的节点。
接下来,参考图13描述了根据本发明的实施例的SSD控制器中的CACHE。
图13是根据本发明的实施例的用于解释SSD控制器中的CACHE的操作的图。
尽管高性能SSD享有起源于大量(例如数百或数千)闪存芯片的巨大内部并行性,但对于每个闪存芯片的延迟比DRAM的延迟更长。例如,虽然一次写入的DRAM延迟可能是10~70ns,但闪存写入可能需要323us~5ms。对于闪存芯片的延迟可能会暂停NVMQ的I/O处理。因此,为了适当处理NVMe的深队列并实现超过1MIOPS,高效利用SSD的内部存储器可能很重要。
在一些实施例中,通过将I/O请求的逻辑地址直接映射到SSD的内部存储器的物理地址(例如,物理DRAM地址),CACHE线程可以将SSD的内部存储器(例如,DRAM)具体化为突发缓冲器。因此,当写数据没有被写入闪速存储器时,I/O请求的完成可以通过缓冲到SSD内部存储器的写数据来通知主机。因此,可以隐藏写入的长延迟。由CACHE线程缓冲的数据可以通过利用并行性在许多闪存芯片上使请求分条(striping)来排出。
参照图13,CACHE线程中的每个具有映射表1311或1312,用于将逻辑地址映射到内部存储器(例如,DRAM)1320的物理地址(例如,物理DRAM地址)。不同的CACHE线程可以控制逻辑地址空间的不同区域。映射表可以包括条目(高速缓存的LPN),映射到物理DRAM地址的逻辑地址被写入该条目。在一个实施例中,CACHE线程可以使用直接映射高速缓存来减少表查找或高速缓存替换的负担。然而,由于对于每个I/O请求,多个NVMQ线程与CACHE线程通信,因此可能引入线程间通过传递消息所造成的额外延迟。此外,考虑到CACHE计算需求,CACHE线程比NVMQ线程更少,因此输入的I/O请求可能会使CACHE线程保持忙碌,这形成关键路径。为了解决这个问题,可以将高速缓存功能的一部分(例如,高速缓存标记查询方法)放入NVMQ线程中,并且CACHE线程可以单独处理高速缓存命中和逐出。使用高速缓存标记查询方法,NVMQ可以创建旁路路径,这可以消除通信开销。
接下来,参考图14描述了根据本发明的实施例的SSD控制器中的TRANS。
图14是根据本发明的实施例的用于解释SSD控制器中的TRANS的操作的图。
SSD控制器可以使FTL的地址转换(用于将逻辑地址映射到物理地址)足够简单,并且通过将地址转换与系统管理活动(诸如FTL中的垃圾收集或日志记录(例如,日志记录))分离来提供可扩展选项。执行此简化地址转换的线程称为TRANS线程。TRANS线程使用存储逻辑地址和物理地址之间的映射的地址映射表将逻辑地址转换为物理地址。在一些实施例中,地址映射表可以存储在内部存储器中。
在一些实施例中,为了并行转换地址,逻辑地址空间和物理地址空间都可以被划分,并且分区可以被适当地分配给多个TRANS线程。
参照图14,在一个实施例中,在NVMQ线程(NVMQ0-NVMQn)中使用的逻辑地址空间可以被划分成m个地址块。这里,m是TRANS线程的数量,并且地址在到达m时通过环绕来映射。例如,逻辑地址(LPN)可以在TRANS线程中被转换,该TRANS线程具有对应于对逻辑地址(LPN)进行模m运算(LPN mod m)的结果(即,m个地址块中逻辑地址所属的地址块)的索引。此外,为了利用通道级并行性,可以将单个物理地址空间分成k个碎片,其中k是通道CH1-CHk的数量。物理地址(PPA)可以用模k运算映射到相应的通道。
每个碎片可以用模k运算映射到相应的TRANS线程。
因此,TRANS线程(TRANS 1-TRANS m)中的每一个可以通过参考地址映射表将分配的逻辑地址转换为物理地址。
接下来,描述根据本发明的实施例的SSD控制器中的BGC和LOG。
用于垃圾收集的数据路径可能是实现高带宽的另一个关键路径,因为垃圾收集会在回收闪存块的同时暂停许多I/O服务。在一些实施例中,可以通过分配单独的核心(即BGC线程)并行执行垃圾收集的块回收。BGC线程记录了将来当TRANS线程处理输入的I/O请求时没有更多条目可写的块号。然后,BGC线程合并这些块,并在I/O处理中更新相应TRANS线程的地址映射表。
由于在BGC线程的块回收期间TRANS线程可以处理地址转换,因此它会在地址映射表更新中引入一致性问题。因此,当没有活动的NVMQ线程时,BGC线程可以创建网络路径(例如,图8中的虚线)并回收块,并且一旦相应的TRANS线程完成地址转换任务,BGC线程可以更新地址映射表。
由于存在许多线程,每个线程可以有它们自己的本地元数据(诸如地址映射表),因此可以执行日志记录,其周期性地将内部存储器转储到指定的闪存空间,并跟踪尚未转储的更改。单片固件可能需要日志记录,这会给管理持久性数据的一致性和连贯性带来负担。在一些实施例中,日志记录可以被分离并且被分配给单独的核心,即LOG线程。LOG线程可以周期性地读取内部存储器中的元数据,将其存储到闪存中,并在后台中构建检查点。
在一些实施例中,BGC线程和LOG线程可以独立于后台中的其他线程来执行。
接下来,参考图15描述了根据本发明的实施例的SSD控制器中的FCMD。
图15是根据本发明的实施例的用于解释SSD控制器中的FCMD的操作的图。
在FTL结束时,FCMD线程可以针对闪存接口定时构成闪存事务,并通过闪存物理层(PHY)跨不同的闪存资源调度它们。
如图15所示,FCMD线程将由TRANS线程(TRANS0或TRANSk)转换的(或由BGC线程BGC0或LOG线程LOG0生成的)物理地址解析成闪速存储器中的多个目标资源。例如,FCMD线程可以将物理地址解析成目标通道、芯片、管芯和平面号。图15中示出了一个示例,FCMD线程将物理地址#1解析为通道号CH0和管芯号Die0,将物理地址#2解析为通道号CH0和管芯号Die0,并将物理地址#2解析为通道号CH1和管芯号Die1。然后,FCMD线程可以检查目标资源的可用性,并通过遵循闪存接口协议来构成闪存事务。闪存事务内的存储器定时可以按DMA前的操作(pre-dma)、存储器操作(mem-op)和DMA后的操作(post-dma)进行分类。pre-dma可以包括操作命令、地址和数据传输(用于写),以及post-dma可以包括完成命令和另一数据传输(用于读)。mem-op可以包括闪速存储器中的存储器操作。然后,FCMD线程可以将构成的事务分散在多个资源上。在一些实施例中,许多pre-dma、mem-op和post-dma的活动可以以交错的方式调度,使得通道和闪存资源的利用率可以最大化。由该事务调度处理的多个I/O请求的完成顺序可以自发地是无序的。
在一些实施例中,FCMD线程可中的每一个静态地映射到一个或更多个通道,并且可以基于SSD供应商的需求(和/或计算能力)来确定分配给FCMD线程的通道数量。
图16和图17各自示出了具有16个通道的闪存主干的低级性能,图16示出了写性能,以及图17示出了读性能。每个通道都有不同数量的闪存芯片,范围从1到256。在评估中,测试了采用不同闪存技术的带宽,如单级单元(SLC)、多级单元(MLC)和三级单元(TLC)。
如图16所示,基于SLC的闪存主干的写性能在256个芯片的情况下饱和,但是基于TLC的闪存主干的写性能在2048个芯片的情况下达到1MIOPS。此外,如图17所示,基于SLC的闪存主干的读性能在32个芯片的情况下饱和并达到1MIOPS,但是基于MLC和TLC的闪存主干的读性能在64个芯片的情况下达到1MIOPS。因此,考虑到读和写带宽以及各种闪存技术,使用了基于多核的SSD,其将基线扩展成具有2048个闪存芯片,并测量了1MIOPS的时钟频率要求。
如图18所示,上述所有线程都被分配给基于多核的SSD平台。在本测试中,每个NVMQ、TRANS和FCMD分配了16个线程,每个ILOCK和CACHE分配了4个线程,并且两个线程分配给LOG和BGC。为了确定实现1MIOPS的计算需求,图19中示出了评估SSD平台上时钟频率的结果。在图19中,时钟频率是仅使用单个核心时所需计算能力的度量。
尽管从I/O活动的角度来看,记录元数据和执行后台垃圾收集(BGC)是耗时的任务,但是它们的计算资源只需要读取内部存储器(DRAM)、周期性地将数据转储到闪存介质以及更新元数据。因此,LOG线程和BGC线程分别消耗1GHz。虽然地址映射由TRANS线程执行,但是FCMD线程在运行时调度许多闪存事务并控制闪存接口的所有定时约束,这需要分散阶段线程中的最高频率。在该测试中,FCMD线程需要3GHz。采集和应用阶段比分散阶段需要高得多的频率。具体来说,NVMQ、ILOCK、CACHE和TRANS线程分别需要8.6、4.8、3.2和14.6GHz。产生这种高时钟频率可以不仅是为了对多个资源进行必要的维护,也是针对不平衡的并行I/O处理、核间通信、一致性同步和争用管理的效率低下。因此,参考图20至图23描述用于解决这些问题的实施例。
图20是根据本发明的另一实施例的用于解释SSD控制器中的关于NVMQ的DIOS的图。
如图11所示,当使用静态队列分配时,可能会出现在特定NVMQ线程(在图11中所示的示例中为NVMQn)上处理请求的不平衡问题。因此,静态队列分配可以依赖于主机的NVMe驱动器或其他用户模块来平衡跨NVMQ线程的请求。此外,静态队列分配可能难以扩展到大量队列。
在一些实施例中,为了解决静态队列分配的问题,可以使用动态I/O串行化(DIOS)技术。DIOS可以在NVMQ核心上实现。
如参考图10和图11所述,为每队列分配一个NVMQ线程可以避免对于系统存储器访问的争用,但是如果主机侧队列供应不足,这可能会导致差的性能。即使有大量队列,每个静态分配的核心也可能表现出不平衡的带宽。为了解决这个问题,在一些实施例中,可以为每NVMe队列(即,提交/完成队列)分配多个NVMQ线程。也就是说,队列与线程的比率可能是可变的。在下文中,该技术被称为DIOS技术。
参考图20,多个NVMQ线程(NVMQ0和NVMQ1)可以从提交队列中提取和解析不同的队列条目。为此,可以在SSD的内部存储器空间中提供提交队列缓冲器SQb。在一个实施例中,NVMQ核心的DIOS在内部存储器空间中生成提交队列缓冲器SQb。内部存储器空间对于所有NVMQ线程都是可见的。每当主机向提交队列SQ提交命令并将尾部索引写入相应的门铃寄存器时,NVMQ核心的DIOS将提交队列条目复制到提交队列缓冲器SQb。然后,多个NVMQ线程并行访问提交队列缓冲器SQb,而不是实际提交队列SQ。
例如,假设提交队列SQ和完成队列的头部指针和尾部指针被初始化并从0开始(head0和tail0)。如图20所示,当主机向提交队列SQ的条目0提交请求并将尾部指针(tail0)写入门铃寄存器(S2001)时,DIOS可以提取条目0(即,头部指针(head0)指向的条目),将条目0复制到提交队列缓冲器(SQb),并写入提交队列缓冲器(SQb)的尾部指针(D-tail0)(S2002)。然后,当主机向提交队列SQ的条目1提交请求并将尾部指针(tail1)写入门铃寄存器(S2003)时,DIOS可以提取条目1(即,头部指针(head1)所指向的条目),将条目1复制到提交队列缓冲器(SQb),并写入提交队列缓冲器(SQb)的尾部指针(D-tail1)(S2004)。因此,在将提交队列(SQ)的条目带入提交队列缓冲器(SQb)之后,NVMQ(NVMQ0和NVMQ1)可以并行解析由头部指针(D-head0和D-head1)指向的提交队列缓冲器(SQb)的条目(S2005)。
类似地,在一个实施例中,DIOS在内部存储器空间中创建完成队列缓冲器(CQb)。NVMQ线程(NVMQ0和NVMQ1)并行访问完成队列缓冲器(CQb),用请求的结果更新完成队列缓冲器(CQb),并将完成队列缓冲器(CQb)的条目复制到完成队列CQ。换句话说,NVMQ线程(NVMQ0和NVMQ1)可以以无序方式更新完成队列缓冲器(CQb),并且DIOS可以以有序方式更新完成队列CQ。
例如,NVMQ线程(NVMQ0和NVMQ1)可以以无序方式用请求的结果更新完成队列缓冲器(CQb)。如图20所示,NVMQ线程(NVMQ0)可以向完成队列缓冲器(CQb)的条目0提交结果并写入尾部指针(D-tail0)(S2006),并且NVMQ线程(NVMQ1)可以向完成队列缓冲器(CQb)的条目1提交结果并写入尾部指针(D-tail1)(S2007)。DIOS可以将条目1(D-tail1)的结果复制到主机的完成队列(CQ)的条目0(tail0)(S2008),并且可以将条目0(D-tail0)的结果复制到主机的完成队列(CQ)的条目1(tail1)(S2009)。因此,主机可以顺序地检查由头部指针(head0和head1)所指向的完成队列(CQ)的条目(S2010和S2011)。
因此,NVMQ线程可以并行更新队列(提交/完成队列),而无需修改NVMe协议和主机侧存储栈。
在一些实施例中,DIOS的头部指针和尾部指针(D-head和D-tail)可以由gcc原子内置函数_sync_fetch_and_add来管理。
图21是根据本发明的另一实施例的用于解释SSD控制器中的ILOCK的操作的图。
当多个NVMQ线程由于其相同的目标地址范围而争用获取或释放相同的锁时,可能会产生两个技术问题:i)NVMQ的锁争用以及ii)NVMQ的低资源利用率。在下文中,描述了用于解决这些问题的ILOCK。
参照图21,在一些实施例中,ILOCK线程可以包括消息队列MQ。消息队列MQ可以基于提交队列索引对从多个NVMQ线程(NVMQ0和NVMQ1)传输的消息进行排序。每个消息可以维护线程请求结构,该结构包括提交队列索引(SQ索引)、NVMQ标识符(ID)、逻辑地址和锁请求信息(Lock req)。锁请求信息可以指示锁获取或锁释放中的任何一个。因此,ILOCK线程可以通过其消息队列MQ看到所有输入的锁请求。锁请求可以是逻辑地址上按页的锁请求。
在一些实施例中,当具有锁请求的目标逻辑地址在其获取上有冲突时,ILOCK线程可以通过参考消息队列MQ中的提交队列索引来推断提交队列顺序,并根据提交队列顺序来处理锁请求。因此,可以通过遵守主机管理的提交队列中的请求顺序来执行I/O服务。
ILOCK线程可以基于与锁请求的目标地址相对应的锁ID(即,分配给逻辑地址所属的碎片的锁ID)来检查所有者ID。所有者ID可以是已经获得该锁ID的NVMQ ID。当锁请求是锁获取并且没有锁ID的所有者ID时,ILOCK线程可以获取对于锁请求的NVMQ ID的锁,将锁请求的NVMQ ID登记为锁ID的所有者ID,并返回所有者ID。当锁请求是锁获取并且存在锁ID的所有者ID时,ILOCK线程可以返回所有者ID。当锁请求是锁释放并且存在锁ID的所有者ID时,ILOCK线程可以释放对于锁请求的NVMQ ID的锁并删除锁ID的所有者ID。
在一些实施例中,ILOCK线程可以被实现为树2110,例如用于灵活的存储器管理的红黑(RB)树。ILOCK线程可以检查树中是否存在包括锁请求的锁ID和所有者ID的节点。当锁请求是锁获取并且相应的节点不存在于树中时,ILOCK线程可以分配具有锁请求的NVMQ ID作为所有者ID的节点,并返回所有者ID。当锁请求是锁获取并且相应的节点存在于树中时,ILOCK线程可以返回节点的所有者ID。当锁请求是锁获取并且相应的节点存在于树中时,ILOCK线程可以删除该节点。
如果另一个NVMQ线程已经处理了目标地址,使得锁已经被获取,则请求锁的NVMQ线程可能会暂停,直到相应的I/O服务完成,并且暂停的NVMQ线程可能会损害整体性能。
在一个实施例中,当锁请求是锁获取时,ILOCK线程可以返回所有者ID。当NVMQ线程接收到不同于其ID的所有者ID时,NVMQ线程可以将I/O请求转发到对应于所有者ID的NVMQ线程,而不是再次与ILOCK线程通信。当返回的所有者ID与其ID相同时,NVMQ线程可以向下一级线程(即TRANS线程或CACHE线程)发出I/O请求。因此,被ILOCK线程拒绝的NVMQ线程将I/O请求转发给已经拥有相应锁的NVMQ线程,从而停止与ILOCK线程的进一步通信。这又可以让NVMQ线程不再等待锁获取,这增加了并行性。
在另一实施例中,如果锁请求是锁获取,则只有当请求锁的NVMQ线程的ID不同于所有者ID时,ILOCK线程才可以返回所有者ID。
图22是根据本发明的另一实施例的用于解释SSD控制器中的CACHE的旁路的图。
如参考图13所述,CACHE线程可以引入关键路径。在一些实施例中,为了使CACHE线程离开关键路径,可以在NVMQ和TRANS线程之间添加直接路径,并且只有在CACHE线程中存在数据时,NVMQ线程才可以访问CACHE线程。
为此,高速缓存元数据可以被放置在共享存储器空间中,使得NVMQ线程可以自己对映射表执行查找,并且仅在存在命中时发送I/O请求。然而,由于缺乏同步,这种方法可能会使NVMQ线程服务成为带有不正确数据的I/O请求。例如,即使存在未命中,目标数据也可能在突发缓冲器中。也就是说,由于闪存写入的长延迟,即使在CACHE线程逐出数据之后,数据也可能不在目标闪存中,而是在突发缓冲器中。在一些实施例中,在映射表被更新但逐出仍在进行的情况下,对于读取,NVMQ线程可以直接从CACHE线程而不是TRANS线程读取数据,并且对于写入,NVMQ线程可以绕过CACHE线程,因为CACHE线程不能将数据缓冲到其数据正在逐出的条目。为此,如图22所示,映射表的每个条目还可以包括正在被逐出的地址字段(例如,被逐出的LPN)。
参照图22,假设某个条目的初始状态是这样一种状态,其中具有LPN0x00的数据被高速缓存在突发缓冲器中并且不处于逐出(S2210)。在这种情况下,当NVMQ线程通过CACHE线程查找具有LPN 0x03的数据的写请求时,NVMQ线程将具有LPN 0x03的数据转发到CACHE线程,因为写请求未命中,但是在逐出中没有LPN(S2220)。因此,CACHE线程从突发缓冲器中逐出具有LPN 0x00的数据,并将具有LPN 0x03的数据写入突发缓冲器。也就是说,CACHE线程将具有LPN 0x00数据的写请求传输到TRANS线程。因此,CACHE线程在相应条目中用0x03更新高速缓存的LPN,并用0x00更新被逐出的LPN。
接下来,当NVMQ线程通过CACHE线程查找具有LPN 0x06的数据的写请求时,NVMQ线程绕过对TRANS线程的写请求,因为写请求未命中并且LPN 0x00正在被逐出(S2230)。当NVMQ线程通过CACHE线程查找具有LPN 0x00的数据的读请求时,NVMQ线程从CACHE线程接收用于读请求的数据,因为具有LPN 0x00的数据正在被逐出(S2240)。也就是说,CACHE线程将对于读请求的数据从突发缓冲器传输到NVMQ线程。当具有LPN 0x00的数据的逐出完成时,CACHE线程用空值(NULL)更新逐出的LPN。
图23是根据本发明的另一实施例的用于解释SSD控制器中TRANS的地址随机化的图。
如参考图14所描述的,划分逻辑地址空间和物理地址空间可以使所有TRANS线程并行操作而没有干扰,但是不平衡的I/O访问可以激活几个TRANS线程或通道。这不仅会导致差的资源利用率,而且会导致许多资源冲突。例如,如图14所示,冲突可能发生是因为来自多个NVMQ线程(NVMQ1-NVMQn)的请求被传送到TRANS线程(TRANS1),或者冲突可能发生是因为多个TRANS线程(TRANS1-TRANSm)访问通道CH2。
在一个实施例中,为了解决资源冲突和负载不平衡,可以检查TRANS线程的状态,并且当目标TRANS线程忙时,TRANS索引可以动态地重新映射到可用的TRANS线程的索引。然而,这可能会增加用于TRANS线程的状态检查的通信开销,并且需要额外的模块来重新映射。
在另一实施例中,可以添加随机化函数来获取对于NVMQ和CACHE线程的目标TRANS索引,并且来自NVMQ和CACHE线程的请求可以通过随机化函数以静态方式均匀分布。在一些实施例中,当逻辑地址空间被划分时,地址可以用加扰运算符(例如XOR运算符)随机化。然后,对逻辑地址进行加扰,使得所有输入的I/O请求可以以均匀分布的方式跨不同的TRANS线程静态分配。在一个实施例中,如图23所示,SSD控制器可以将逻辑地址分成多个位组,每个位组由n位组成,其中n是TRANS线程的数量(N)的二进制对数(log2N)。该随机化函数可对所有位组按位执行XOR运算(即,逐位XOR运算),并生成目标TRANS索引。逐位XOR运算需要不到20ns,这可以被所有其他计算活动隐藏。
例如,假设LPN是64位地址并且n是4,LPN可以是16位组,每个组由4位组成(b0-b3)。然后,可以生成具有4位的TRANS索引,并且4位可以分别是通过对16位组的第一位b0执行XOR运算获得的值、通过对16位组的第二位b1执行XOR运算获得的值、通过对16位组的第三位b2执行XOR运算获得的值以及通过对16位组的第四位b3执行XOR运算获得的值。因此,LPN可以被分发到对应于所生成的TRANS索引的TRANS线程。
在一些实施例中,物理地址空间的多个物理块可以以块交织(例如,以循环方式)分配给每个TRANS线程。因此,每个TRANS线程可以将逻辑地址转换为与其分配的物理块相对应的物理地址。这种块交织的虚拟化可以以更精细的粒度级别分割物理地址空间。
在下文中,描述了根据本发明的实施例的SSD的性能。
为了评估SSD的性能,通过使用MIC 5120D加速器模拟SSD平台,该加速器采用60个轻量级x86核心,每个核心有4个硬件线程并在1GHz频率下工作。针对评估使用了闪存主干,它有16个通道,每个通道连接128个闪存芯片,总共有2048个芯片。此外,使用基于Linux内核2.6.32运行Centos 6.7的采用Xeon 2.4GHz 16核心处理器和256GB DRAM的主机进行评估。
使用两个SSD平台(ManyMono和IdealMono)来比较根据本发明的实施例的SSD,并且使用两个SSD平台(BaseDeepFlash和DeepFlash)作为根据本发明的实施例的SSD。
ManyMono在每个核心上运行单片闪存固件,并且所有核心并行处理请求。此外,ManyMono遵循所有并发约束。IdealMono具有与ManyMono相似的配置,除了它忽略了所有约束和重新排序操作。与DeepFlash相比,BaseDeepFlash不应用参照图20至图23描述的技术。
图24A、图24B、图24C和图24D是用于比较具有从4KB到32KB变化的I/O大小的SSD平台的吞吐量的图。图24A示出顺序读取的吞吐量,图24B示出随机读取的吞吐量,图24C示出顺序写入的吞吐量,以及图24D示出随机写入的吞吐量。如图24A至图24D所示,IdealManyMono分别将ManyMono的读和写的性能平均提高了2.5倍和2.7倍。这是因为IdealManyMono去除了对于共享资源的所有锁(诸如NVMe队列处理、数据高速缓存和FTL元数据管理)而没有考虑闪存主干上的数据一致性。BaseDeepFlash与ManyMono或IdealManyMono相比在随机读和写的情况下请求大小小于24KB时表现出差的性能。这是因为NVMQ/ILOCK线程保持紧密的线程间通信,以通过锁适当控制一致性。然而,对于大的请求(32KB),BaseDeepFlash表现出接近IdealManyMono的良好性能。这是因为大请求中的多个页可以被合并以获取单个范围锁,这减少了线程间通信的开销。
DeepFlash应用高速缓存旁路和锁转发技术来缓解由锁查询和线程间通信带来的长暂停,这又使更多线程能够并行工作。因此,如图24A至图24D所示,DeepFlash在所有模式中提供最佳性能。具体来说,DeepFlash分别为读和写提供4.8GB/s和4.5GB/s带宽,使得针对4KB I/O请求可以实现1MIOPS。
图25A和图25B是示出根据ILOCK设计的活动NVMQ线程的数量的图。图25A示出顺序访问,以及图25B示出随机访问。图26A是示出根据ILOCK设计的SSD平台的性能的图,以及图26B是示出根据ILOCK设计的延迟的图。
在图25A至图26B中,页-锁(Page-lock)是页粒度锁定系统,ILOCK-forwd是DeepFlash使用的锁定系统(即,参考图21描述的锁定系统),并且ILOCK-base和ILOCK-1MB是BaseDeepFlash使用的锁定系统(即,参考图12描述的锁定系统)。在这种情况下,ILOCK-forwd和ILOCK-base使用256KB作为锁范围(即碎片大小),但ILOCK-1MB使用1MB作为锁范围。在图26A及其后续图中,SeqRd表示顺序读取,SeqWr表示顺序写入,RndRd表示随机读取,以及RndWr表示随机写入。
如图25A和图25B所示,与ILOCK-1MB相比,页-锁可以激活许多的NVMQ线程。然而,与ILOCK-forwd、ILOCK-base和ILOCK-1MB相比,页-锁降低了性能,这是由于由频繁的锁节点分配/解除分配和树管理复杂性造成的开销,如图26A所示。相比之下,如图26B所示,当ILOCK-forwd基于所有者转发I/O请求时,它可以激活与页-锁类似数量的NVMQ线程,但是表现出比ILOCK-1MB稍长的锁延迟。
图27是示出根据CACHE线程的数量的SSD平台的性能的图。
在图27中,“0”表示不使用CACHE线程的情况,“1”、“2”和“4”分别表示使用一个CACHE线程、两个CACHE线程和四个CACHE线程(它们是参考图13描述的CACHE线程)的情况,以及“2-旁路”表示使用两个CACHE线程的情况(DeepFlash),这两个CACHE线程采用参考图22描述的旁路技术。
如图27所示,由于后端阶段的大规模并行性,无论CACHE线程的数量如何,读性能都接近1MIOPS。然而,没有CACHE线程的写性能平均只有大约0.65MIOPS。通过启用单个CACHE线程,写性能比没有CACHE线程有所提高,但是由于CACHE和NVMQ线程之间的通信开销,单个CACHE线程降低了读性能。在两个或更多个CACHE线程中,顺序写入和随机写入的性能达到1MIOPS,但是读性能由于通信开销而降低。相比之下,2-旁路可以针对所有读和写实现1MIOPS。
图28是示出根据TRANS设计的SSD平台的性能的图。在图28中,No-rand表示使用参照图14描述的TRANS线程的情况(BaseDeepFlash),以及Rand表示使用参照图23描述的TRANS线程的情况(DeepFlash)。在评估中,执行顺序读取,但是它们的地址随着距离的变化而增加,范围从4KB到64KB。
如图28所示,在地址距离增加时No-rand性能显著下降,因为来自NVMQ线程的许多请求被发到几个TRANS线程,这使得它们过于拥挤。相比之下,Rand通过地址随机化来加扰地址,并在TRANS线程上均匀分配负载,从而并行激活TRANS线程。因此,Rand的性能提高了。
图29是示出根据TRANS设计的SSD平台的性能的图。在图29中,Virt表示使用具有参照图23描述的随机化函数和块交织虚拟化的TRANS线程的情况(DeepFlash),而no-virt表示使用既不具有随机化函数也不具有块交织虚拟化的TRANS线程的情况(BaseDeepFlash)。
如图29所示,与No-virt相比,Virt表现出极大的读性能改进,因为Virt分割物理地址空间并以随机方式将它们分配给TRANS线程。这可以消除TRANS线程中的争用。相比之下,No-virt的写性能与Virt的写性能一样高,因为CACHE线程缓冲数据并在后台隐藏闪存写入。
图30是示出LOG线程和BGC线程的激活的图。
当NVMQ线程解析和提取数据时,LOG线程停止将数据从内部存储器排到闪存介质,因为作为NVMQ线程的队列处理的响应,TRANS线程将访问元信息。BGC线程也暂停块回收,因为与回收相关联的数据迁移可能会导致闪存级别冲突,从而干扰NVMQ线程的活动。因此,如图30所示,每当NVMQ线程被激活以解析和提取数据时,LOG线程和BGC线程就停用它们的工作。一旦NVMQ线程处于空闲,LOG和BGC线程就开始重新激活它们的工作。
图31是示出根据线程数量的SSD平台的性能的图,以及图32是示出线程分布的图。
如图31所示,对于所有闪存技术(诸如SLC、MLC和TLC),SSD带宽开始从10个或更多个核心(大约15个核心(60个线程))饱和。当使用19个核心时,SLC、MLC和TLC达到最大带宽,其分别为5.3GB/s、4.8GB/s和4.8GB/s。当线程数量增加得更多时,由于线程层之间交换许多消息的开销,性能开始下降。
如图32所示,总核心功率与活动核心的数量成比例。具体来说,具有15个核心的SSD平台消耗74W,这可以满足PCIe的功率传递能力。此外,随着线程数量的增加,FCMD、TRANS和NVMQ线程消耗了几乎全部的能量。这是因为,尽管CACHE、LOG、ILOCK和BGC线程需要更多的计算能力,但大多数核心都被分配以处理大型闪存复合体和许多队列,以获得更好的可扩展性。
虽然已经结合目前被认为是实际的示例性实施例的实施例描述了本发明,但应理解的是,本发明不限于公开的实施例,而是相反地,其旨在覆盖包括在所附权利要求的精神和范围内的各种修改和等同布置。

Claims (21)

1.一种基于闪存的存储设备,包括:
闪存介质;和
所述闪存介质的控制器,其包括多个处理器核心,
其中,所述控制器的闪存固件被分解成多个功能,所述多个功能由所述多个处理器核心上的多个线程实现,所述多个功能中的不同功能由所述多个线程中的不同线程实现,并且所述多个线程中的至少一个线程被映射在所述多个处理器核心之一上。
2.根据权利要求1所述的基于闪存的存储设备,还包括内部存储器,
其中,所述多个功能包括:
第一功能,其解析来自主机的队列的输入/输出(I/O)请求;
第二功能,其将所述I/O请求的逻辑地址转换为对于所述闪存介质的物理地址;和
第三功能,其基于所述I/O请求的物理地址构成关于所述闪存介质的闪存事务,
其中,所述多个线程包括用于实现所述第一功能的至少一个第一线程、用于实现所述第二功能的至少一个第二线程和用于实现所述第三功能的至少一个第三线程,以及
其中,用于处理多个I/O请求的多个路径由所述多个线程在所述第一线程和所述第三线程之间形成。
3.根据权利要求2所述的基于闪存的存储设备,其中,所述至少一个第一线程包括多个第一线程,
其中,所述队列包括提交队列,并且所述控制器将所述提交队列中的多个I/O请求被存储在其中的条目复制到在所述内部存储器中创建的提交队列缓冲器,以及
其中,每个第一线程解析来自所述提交队列缓冲器的所述多个I/O请求中的相应一个。
4.根据权利要求3所述的基于闪存的存储设备,其中,所述多个第一线程并行解析所述多个I/O请求。
5.根据权利要求3所述的基于闪存的存储设备,其中,每个第一线程用相应的I/O请求的结果更新在所述内部存储器中创建的完成队列缓冲器,以及
其中,所述控制器将所述完成队列缓冲器的条目复制到所述主机的完成队列。
6.根据权利要求5所述的基于闪存的存储设备,其中,所述多个第一线程以无序方式用所述多个I/O请求的结果更新所述完成队列缓冲器。
7.根据权利要求2所述的基于闪存的存储设备,其中,所述至少一个第二线程包括多个第二线程,
其中,在所述第一线程中使用的逻辑地址空间被划分成分别对应于所述多个第二线程的N个地址块,其中N是所述第二线程的数量,以及
其中,所述I/O请求的逻辑地址由所述多个第二线程中的具有对应于在所述N个地址块中所述逻辑地址所属的地址块的索引的第二线程转换成所述物理地址。
8.根据权利要求2所述的基于闪存的存储设备,其中,所述至少一个第二线程包括多个第二线程,以及
其中,所述I/O请求的逻辑地址由所述多个第二线程中的具有对应于通过加扰所述逻辑地址获得的结果的索引的第二线程转换成所述物理地址。
9.根据权利要求8所述的基于闪存的存储设备,其中,所述逻辑地址被分成多个位组,每个位组由n位组成,其中n是所述第二线程的数量(N)的二进制对数(log2N),以及
其中,所述索引对应于通过对所述多个位组执行逐位XOR运算而获得的结果。
10.根据权利要求2所述的基于闪存的存储设备,其中,所述至少一个第二线程包括多个第二线程,
其中,用于所述闪存介质的地址空间的多个物理块以块交织的方式分配给所述多个第二线程,以及
其中,每个第二线程将所述I/O请求的逻辑地址转换为对应于所分配的物理块的物理地址。
11.根据权利要求2所述的基于闪存的存储设备,其中,所述多个功能还包括第四功能,所述第四功能获取用于排除针对所述I/O请求的逻辑地址的其他I/O请求的锁,以及
其中,所述多个线程还包括用于实现所述第四功能的至少一个第四线程。
12.根据权利要求11所述的基于闪存的存储设备,其中,所述至少一个第一线程包括多个第一线程,以及
其中,所述第四线程从所述多个第一线程中的目标第一线程接收针对所述I/O请求的逻辑地址的锁获取请求,并且当没有已经获取了针对所述逻辑地址的范围的锁的第一线程时,获取针对所述逻辑地址的范围的锁。
13.根据权利要求12所述的基于闪存的存储设备,其中,当另一个第一线程已经获取了针对所述逻辑地址的范围的锁时,所述目标第一线程将所述I/O请求转发给所述另一个第一线程。
14.根据权利要求2所述的基于闪存的存储设备,其中,所述多个功能还包括第四功能,当所述I/O请求满足预定条件时,所述第四功能通过所述内部存储器处理所述I/O请求,
其中,所述多个线程还包括用于实现所述第四功能的至少一个第四线程,以及
其中,当所述I/O请求不满足所述预定条件时,所述第一线程在绕过所述第四线程的情况下将所述I/O请求传送到所述第二线程。
15.根据权利要求14所述的基于闪存的存储设备,其中,所述第一线程查找所述内部存储器的高速缓存映射表,以确定所述I/O请求是否满足所述预定条件,所述高速缓存映射表包括对其写入映射到物理地址的逻辑地址的第一条目和逻辑地址被逐出到所述闪存介质的第二条目,以及
其中,所述预定条件包括所述I/O请求的逻辑地址被写入所述第一条目或所述第二条目的条件。
16.根据权利要求2所述的基于闪存的存储设备,其中,所述多个功能还包括执行垃圾收集的第四功能和执行日志记录的第五功能,
其中,所述多个线程还包括用于实现所述第四功能的至少一个第四线程和用于实现所述第五功能的至少一个第五线程,以及
其中,所述第四线程和所述第五线程独立于所述第一线程、所述第二线程和所述第三线程执行。
17.根据权利要求16所述的基于闪存的存储设备,其中,当没有活动的第一线程时,所述第四线程执行所述垃圾收集。
18.根据权利要求1所述的基于闪存的存储设备,其中,所述多个线程是独立的。
19.一种基于闪存的存储设备的控制器,所述存储设备包括闪存介质和内部存储器,所述控制器包括:
多个处理器核心,
其中,所述控制器的闪存固件被分解成多个功能,所述多个功能由所述多个处理器核心上的多个线程实现,所述多个功能中的不同功能由所述多个线程中的不同线程实现,并且所述多个线程中的至少一个线程被映射在所述多个处理器核心之一上,
其中,所述多个功能包括:
第一功能,其解析来自主机的队列的输入/输出(I/O)请求;
第二功能,其将所述I/O请求的逻辑地址转换为用于所述闪存介质的物理地址;
第三功能,其基于所述I/O请求的物理地址构成关于所述闪存介质的闪存事务;
第四功能,其获取用于排除针对所述I/O请求的逻辑地址的其他I/O请求的锁;和
第五功能,当所述I/O请求满足预定条件时,所述第五功能通过所述内部存储器处理所述I/O请求,
其中,所述多个线程包括用于实现所述第一功能的至少一个第一线程、用于实现所述第二功能的至少一个第二线程、用于实现所述第三功能的至少一个第三线程、用于实现所述第四功能的至少一个第四线程、用于实现所述第五功能的至少一个第五线程,以及
其中,用于处理多个I/O请求的多个路径由所述多个线程在所述第一线程和所述第三线程之间形成。
20.根据权利要求19所述的控制器,其中,所述多个功能还包括执行垃圾收集的第六功能和执行日志记录的第七功能。
21.一种基于闪存的存储设备,包括:
根据权利要求19所述的控制器;
所述闪存介质;和
所述内部存储器。
CN201811357660.XA 2017-11-15 2018-11-15 基于闪存的储存器及其控制器 Withdrawn CN109783012A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
KR20170152433 2017-11-15
KR10-2017-0152433 2017-11-15
KR20180068359 2018-06-14
KR10-2018-0068359 2018-06-14

Publications (1)

Publication Number Publication Date
CN109783012A true CN109783012A (zh) 2019-05-21

Family

ID=66496482

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811357660.XA Withdrawn CN109783012A (zh) 2017-11-15 2018-11-15 基于闪存的储存器及其控制器

Country Status (1)

Country Link
CN (1) CN109783012A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111045870A (zh) * 2019-12-27 2020-04-21 北京浪潮数据技术有限公司 一种保存与恢复元数据的方法、装置和介质
CN111506517A (zh) * 2020-03-05 2020-08-07 杭州电子科技大学 一种基于访问局部性的闪存页级地址映射方法及其系统
CN113031863A (zh) * 2021-03-19 2021-06-25 深圳忆联信息系统有限公司 Ssd命令相关性管理方法、装置、计算机设备及存储介质
CN113721838A (zh) * 2021-07-22 2021-11-30 成都忆芯科技有限公司 用于存储设备的写、读数据方法、存储控制器以及dma引擎
CN117763052A (zh) * 2024-02-22 2024-03-26 浩鲸云计算科技股份有限公司 面向计费多中心内存数据库的数据同步方法及系统

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111045870A (zh) * 2019-12-27 2020-04-21 北京浪潮数据技术有限公司 一种保存与恢复元数据的方法、装置和介质
CN111045870B (zh) * 2019-12-27 2022-06-10 北京浪潮数据技术有限公司 一种保存与恢复元数据的方法、装置和介质
CN111506517A (zh) * 2020-03-05 2020-08-07 杭州电子科技大学 一种基于访问局部性的闪存页级地址映射方法及其系统
CN113031863A (zh) * 2021-03-19 2021-06-25 深圳忆联信息系统有限公司 Ssd命令相关性管理方法、装置、计算机设备及存储介质
CN113031863B (zh) * 2021-03-19 2023-08-29 深圳忆联信息系统有限公司 Ssd命令相关性管理方法、装置、计算机设备及存储介质
CN113721838A (zh) * 2021-07-22 2021-11-30 成都忆芯科技有限公司 用于存储设备的写、读数据方法、存储控制器以及dma引擎
CN113721838B (zh) * 2021-07-22 2023-12-19 成都忆芯科技有限公司 用于存储设备的写、读数据方法、存储控制器以及dma引擎
CN117763052A (zh) * 2024-02-22 2024-03-26 浩鲸云计算科技股份有限公司 面向计费多中心内存数据库的数据同步方法及系统
CN117763052B (zh) * 2024-02-22 2024-05-10 浩鲸云计算科技股份有限公司 面向计费多中心内存数据库的数据同步方法及系统

Similar Documents

Publication Publication Date Title
CN109783012A (zh) 基于闪存的储存器及其控制器
Shi et al. Mammoth: Gearing hadoop towards memory-intensive mapreduce applications
US8266337B2 (en) Dynamic logical data channel assignment using channel bitmap
CN109416682B (zh) 用于管理数据库的系统和方法
US11526960B2 (en) GPU-based data join
US9448934B2 (en) Affinity group access to global data
WO2023066124A1 (zh) 缓存管理方法、缓存管理装置、处理器
US9304946B2 (en) Hardware-base accelerator for managing copy-on-write of multi-level caches utilizing block copy-on-write differential update table
WO2013155750A1 (zh) 基于页面染色技术的内存数据库访问优化方法
US7865631B2 (en) Dynamic logical data channel assignment using time-grouped allocations
Li et al. Coomr: Cross-task coordination for efficient data management in mapreduce programs
US20090083496A1 (en) Method for Improved Performance With New Buffers on NUMA Systems
US10901639B2 (en) Memory allocation in multi-core processors
Jeong et al. REACT: Scalable and high-performance regular expression pattern matching accelerator for in-storage processing
Deslauriers et al. Quartet: Harmonizing task scheduling and caching for cluster computing
Kim et al. Reducing tail latency of DNN-based recommender systems using in-storage processing
CN107562648A (zh) 无锁ftl访问方法与装置
Chen et al. Data prefetching and eviction mechanisms of in-memory storage systems based on scheduling for big data processing
Akram et al. NUMA implications for storage I/O throughput in modern servers
Wu et al. ZeroCost-LLC: Shared LLCs at No Cost to WCL
KR20230046356A (ko) 메모리 장치, 메모리 장치의 동작 방법, 그리고 메모리 장치를 포함하는 전자 장치
CN102662891A (zh) 基于亲和性感知的dma缓冲区管理方法及装置
Myung et al. Efficient and scalable external sort framework for nvme ssd
Zheng FlashX: Massive Data Analysis Using Fast I/O
Choi et al. A scale-out enterprise storage architecture

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20190521