CN115221099A - 一种任务处理的方法及*** - Google Patents

一种任务处理的方法及*** Download PDF

Info

Publication number
CN115221099A
CN115221099A CN202210755465.2A CN202210755465A CN115221099A CN 115221099 A CN115221099 A CN 115221099A CN 202210755465 A CN202210755465 A CN 202210755465A CN 115221099 A CN115221099 A CN 115221099A
Authority
CN
China
Prior art keywords
command
dtu
sub
processing unit
data
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.)
Pending
Application number
CN202210755465.2A
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.)
Chengdu Starblaze Technology Co ltd
Original Assignee
Chengdu Starblaze Technology Co ltd
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 Chengdu Starblaze Technology Co ltd filed Critical Chengdu Starblaze Technology Co ltd
Priority to CN202210755465.2A priority Critical patent/CN115221099A/zh
Publication of CN115221099A publication Critical patent/CN115221099A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/126Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请涉及一种任务处理的方法及***,命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将DTU发送给第一数据通路的下行通数据通路,其中,第一数据通路为能提供开放通道存储设备功能的通路,处理开放通道协议的IO命令;第一数据通路的下行数据通路将一个或多个DTU转发给第一子命令处理单元处理每个DTU所指示的子命令,其中,第一子命令处理单元与第一数据通路耦合。

Description

一种任务处理的方法及***
技术领域
本申请一般地涉及存储技术领域。更具体地,本申请涉及一种任务处理的方法及***。
背景技术
存储设备,用于为同其耦合的主机提供存储能力。主机同存储设备之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced TechnologyAttachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机***接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(Integrated DriveElectronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,PCIe,高速***组件互联)、NVMe(NVMExpress,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与存储设备。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备处理主机命令,如IO命令或者管理命令等,其中,IO命令包括例如读命令、写命令或其他IO命令。存储设备包括接口、控制部件、一个或多个NVM芯片以及DRAM(Dynamic Random AccessMemory,动态随机访问存储器)。存储设备的控制部件包括一个或多个CPU。CPU运行软件或固件来作为任务处理单元处理IO命令或者管理命令等。另外,存储设备在对IO命令进行处理时,还会将IO命令切分为一个或多个子命令来处理。每个子命令具有相对一致的规格,例如访问相同大小的地址范围,从而使得处理子命令的任务处理单元能够以较简单的方式实现。
参看图1A,控制部件包括主机接口1041、主机命令处理单元1042、存储命令处理单元1043、介质接口控制器1044与存储介质管理单元1045。主机接口1041获取主机提供的IO命令。主机命令处理单元1042根据IO命令生成存储命令提供给存储命令处理单元1043。存储命令可以访问相同大小的存储空间,例如4KB。将NVM芯片中记录的对应一个存储命令所访问数据的数据单元称为数据帧。物理页记录一个或多个数据帧。例如,物理页的大小17664字节,而数据帧大小为4KB,则一个物理页能存储4个数据帧。
存储介质管理单元1045为每个存储命令维护逻辑地址到物理地址的转换。例如,存储介质管理单元1045包括FTL表。对于读命令,存储介质管理单元1045输出存储命令所访问的逻辑地址(LBA)对应的物理地址。对于写命令,存储介质管理单元1045为其分配可用的物理地址,并记录其访问的逻辑地址(LBA)与分配的物理地址的映射关系。存储介质管理单元1045还维护诸如垃圾回收、磨损均衡等管理NVM芯片所需的功能。
存储命令处理单元1043根据存储介质管理单元1045提供的物理地址,操作介质接口控制器1044向NVM芯片105发出存储介质访问命令。
为了清楚的目的,将主机发送给存储设备102的命令称为IO命令,将主机命令处理单元1042发送给存储命令处理单元1043的命令称为存储命令,将存储命令处理单元1043发送给介质接口控制器1044的命令称为介质接口命令,而将介质接口控制器1044发送给NVM芯片105的命令称为存储介质访问命令。存储介质访问命令遵循NVM芯片的接口协议。
图1B展示了本申请实施例提供的一种用于存储设备的任务处理***的框图。
参看图1B,任务处理***包括软件与硬件两部分。硬件包括例如存储设备的控制部件中一个或多个CPU,与处理相关任务的其他硬件资源(例如,存储器、编解码器、接口、加速器、中断控制器、DMA单元等)。存储设备的控制部件的CPU运行软件(也称为固件)。运行的软件包括调度器、任务处理单元、通道与资源管理器。调度器调度任务处理单元的运行。任务处理单元是操作***的线程、进程、任务或其他可被调度器调度的软件单元。
如图1B所示,展示了4个任务处理单元(210、212、214与216)、4个通道(220、222、224与226)与2个资源管理器(240与245);其中,通道被用于任务处理单元之间的通信。通道承载的消息单元被称为数据传输单元(DTU,Data Transfer Unit)。作为举例,DTU同子命令一一对应。为每个子命令分配DTU来承载子命令有关的上下文并跟踪子命令的处理过程与结果。子命令例如访问相同大小的存储空间。通道包括例如DTU列表,以容纳一个或多个DTU。通道可被绑定到任务处理单元,使得任务处理单元从被绑定的通道获取DTU,处理DTU承载的子命令,并将处理后的子命令通过DTU添加给其他通道。这样各任务处理单元实例之间通过通道耦合,使得各任务处理单元实例被解耦,并且得以并发且异步地被执行。而一个任务处理单元的执行过程与当前状态,不影响(例如阻塞)其他任务处理单元的执行。若控制部件包括多个CPU,各CPU得以并行处理各任务处理单元。另外,在图1A所示的任务处理***中,仅任务处理单元得以使用通道,调度器不能调用或调度通道。
通过在任务处理单元实例之间绑定通道,资源管理器管理指定资源的使用,例如分配、释放和/或回收。资源管理器仅被任务处理单元调用,而不被通道调用或调度。例如,任务处理***中被多个任务处理单元共享的资源(例如,FTL表(记录了存储设备的逻辑地址到NVM芯片的物理地址的映射)或缓存)由资源管理器管理。任务处理单元通过指定的资源管理单元来访问指定的资源,若多个任务处理单元实例对指定资源的访问存在冲突,资源管理单元通过加锁、排队等方式解决冲突。
发明内容
在实际应用中,可以为主机提供多种规格的存储设备,例如具有不同的存储容量、不同的性能和/或差异化的功能。从而要为不同规格的存储设备提供不同的设计方案版本,这些不同的设计方案又具有共性,希望重用既有的技术成果(如软件架构),来对多种设备功能的存储设备提供服务。
为了使得存储设备向主机展示多种设备的功能,主机需要根据不同的协议访问每个设备提供的功能。为了使得主机能根据不同协议访问每种设备提供的功能,这就要求任务处理***能对主机提供的不同协议访问请求进行处理。然而由于主机提供的不同协议访问请求其携带的信息以及格式不同,任务处理***对不同协议访问请求的处理过程也不尽相同。本申请希望在现有任务处理***架构上提供对于OC协议命令的处理方案。
根据本申请的第一方面,提供了根据本申请的第一方面的第一任务处理的方法,应用于任务处理***,所述任务处理***包括命令传输单元、数据通路和至少一个子命令处理单元,包括:
命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将所述IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给第一数据通路的下行通数据通路,其中,所述第一数据通路为能提供开放通道存储设备功能的通路,处理开放通道协议的IO命令;
所述第一数据通路的所述下行数据通路将一个或多个DTU转发给第一子命令处理单元处理每个DTU所指示的子命令,其中,所述第一子命令处理单元与所述第一数据通路耦合。
根据本申请的第一方面的第一任务处理的方法,提供了根据本申请的第一方面的第二任务处理的方法,所述第一子命令处理单元将每个DTU所承载的子命令转换为存储介质访问命令并发送给介质接口控制器。
根据本申请的第一方面的第一或第二任务处理的方法,提供了根据本申请的第一方面的第三任务处理的方法,所述命令传输单元响应于分配一个或多个DTU来承载子命令,还根据所述IO命令要访问的地址在承载子命令的DTU中记录子命令所访问的物理地址。
根据本申请的第一方面的第一至第三任一任务处理的方法,提供了根据本申请的第一方面的第四任务处理的方法,其中,所述第一子命令处理单元响应于第一DTU中携带的物理地址指示了坏物理块,用正常物理块的物理地址替换所述第一DTU中携带的坏物理块的物理地址。
根据本申请的第一方面的第一至第四任一任务处理的方法,提供了根据本申请的第一方面的第五任务处理的方法,其中,所述第一子命令处理单元识别所述每个DTU中所承载的子命令类型,若子命令为读操作,将该子命令添加到第一队列;若子命令指示编程操作或擦除操作,将该子命令添加到第二队列。
根据本申请的第一方面的第五任务处理的方法,提供了根据本申请的第一方面的第六任务处理的方法,其中,所述第一子命令处理单元还响应于所述第一队列或所述第二队列存在待处理的子命令,从所述第一队列或所述第二队列中取出待处理子命令,生成介质接口命令并发送给介质接口控制器。
根据本申请的第一方面的第六任务处理的方法,提供了根据本申请的第一方面的第七任务处理的方法,其中,所述第一子命令处理单元还根据环境温度和/或性能限制,确定从所述第一队列或所述第二队列中取出待处理子命令的时机。
根据本申请的第一方面的第五至第七任一项任务处理的方法,提供了根据本申请的第一方面的第八任务处理的方法,其中,所述第一子命令处理单元响应于从所述第二队列中取出指示编程操作的子命令,若其访问的物理地址属于指定的范围,生成两个或多个介质接口命令,所生成的两个或多个介质接口命令所写入的数据互为备份,所生成的两个或多个介质接口命令各自携带物理地址,所生成的两个或多个介质接口命令各自携带的物理地址的部分相同。
根据本申请的第一方面的第一至第八任一项任务处理的方法,提供了根据本申请的第一方面的第九任务处理的方法,所述第一数据通路的下行数据通路包括第一通道,其中,所述第一通道为所述命令传输单元与所述第一子命令处理单元之间直接进行数据交互的通道;所述第一数据通路的下行数据通路通过所述第一通道将所述一个或多个DTU转发给所述第一子命令处理单元。
根据本申请的第一方面的第九任务处理的方法,提供了根据本申请的第一方面的第十任务处理的方法,所述第一通道包括第一DTU列表、多个操作DTU列表的函数以及直接转发单元;所述命令传输单元调用所述函数向所述第一DTU列表中添加为所述IO命令所对应的一个或多个子命令分配的DTU;以及
所述直接转发单元调用所述函数从所述第一DTU列表获取所述一个或多个DTU,并将获取的所述一个或多个DTU提供给所述第一子命令处理单元。
根据本申请的第一方面的第一至第十任一项任务处理的方法,提供了根据本申请的第一方面的第十一任务处理的方法,其中,所述第一数据通路还包括一个或多个回调函数;所述命令传输单元在所述每个DTU中写入一个或多个回调函数的索引,其中,通过所述回调函数的索引对应的回调函数,用于错误处理。
根据本申请的第一方面的第十一任务处理的方法,提供了根据本申请的第一方面的第十二任务处理的方法,其中,所述命令传输单元还在所述每个DTU中记录错误处理方式。
根据本申请的第一方面的第十一任务处理的方法,提供了根据本申请的第一方面的第十三任务处理的方法,响应于所述IO命令为读命令且指示错误处理方式为重读,所述命令传输单元在所述每个DTU中写入第一回调函数的索引,其中,所述第一回调函数用于通过重读方式进行错误处理;所述第一子命令处理单元响应于接收到第二DTU承载的子命令所读取的数据错误,根据所述第二DTU中所记录的第一回调函数的索引调用第一回调函数,以通过所述第一回调函数对所述第二DTU所承载的子命令所访问的物理地址进行重读。
根据本申请的第一方面的第十三任务处理的方法,提供了根据本申请的第一方面的第十四任务处理的方法,其中,所述第一回调函数将所述第二DTU所承载的子命令重新发送给第一数据通路的下行通数据通路或所述第一子命令处理单元以进行重读。
根据本申请的第一方面的第十四任务处理的方法,提供了根据本申请的第一方面的第十五任务处理的方法,其中,所述错误处理方式还包括重读序列,所述第一回调函数按照所述重读序列将所述第二DTU所承载的子命令重新发送给第一数据通路的下行通数据通路或所述第一子命令处理单元。
根据本申请的第一方面的第十一任务处理的方法,提供了根据本申请的第一方面的第十六任务处理的方法,响应于所述IO命令指示错误处理方式为恢复,所述命令传输单元还在所述每个DTU中写入第二回调函数的索引,其中,所述第二回调函数用于通过恢复方式进行错误处理;所述第一子命令处理单元响应于接收到第三DTU承载的子命令所读取的数据错误,根据所述第三DTU中所记录的第二回调函数的索引调用第二回调函数,以通过所述第二回调函数对所述第三DTU所承载的子命令所访问数据进行恢复。
根据本申请的第一方面的第十六任务处理的方法,提供了根据本申请的第一方面的第十七任务处理的方法,响应于所述第三DTU所承载的子命令要访问的物理块所存储的数据为用户数据,所述第二回调函数获取承载读取该物理块所对应的页条带数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给第一数据通路的下行通数据通路或所述第一子命令处理单元,以使得根据所述页条带数据进行数据恢复。
根据本申请的第一方面的第十七任务处理的方法,提供了根据本申请的第一方面的第十八任务处理的方法,响应于所述第三DTU所承载的子命令要访问的物理块所存储的数据为元数据,所述第二回调函数获取承载读取所述元数据的备份数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给第一数据通路的下行通数据通路或所述第一子命令处理单元,以使得根据所述备份数据进行数据恢复。
根据本申请的第一方面的第十一至第十八任一项任务处理的方法,提供了根据本申请的第一方面的第十九任务处理的方法,响应于所述IO命令未指示错误处理方式,所述命令传输单元在所述每个DTU中写入第一回调函数以及第二回调函数的索引。
根据本申请的第一方面的第十九任务处理的方法,提供了根据本申请的第一方面的第二十任务处理的方法,所述第一子命令处理单元响应于接收到第四DTU承载的子命令所读取的数据错误,根据所述第四DTU中所记录的第一回调函数的索引调用第一回调函数,以使得通过所述第一回调函数对所述第四DTU所承载的子命令所访问的物理地址进行重读;
所述第一子命令处理单元响应于接收到对所述第四DTU承载的子命令所读取的数据重读错误,根据所述第四DTU中所记录的第二回调函数的索引调用第二回调函数,以使得通过所述第二回调函数对所述第四DTU所承载的子命令所访问数据进行恢复。
根据本申请的第一方面的第二十任务处理的方法,提供了根据本申请的第一方面的第二十一任务处理的方法,所述第一子命令处理单元响应于对所述第二DTU、所述第三DTU或所述第四DTU所对应的错误处理失败,根据所述第二DTU、所述第三DTU或所述第四DTU中所记录的第三回调函数的索引调用第三回调函数,以向所述命令传输单元反馈错误处理失败的信息;所述命令传输单元将所述错误处理失败的信息发送给主机。
根据本申请的第一方面的第十一至第二十一任一项任务处理的方法,提供了根据本申请的第一方面的第二十二任务处理的方法,响应于所述IO命令为写命令,所述第一子命令处理单元响应于接收到第五DTU承载的子命令对应的编程命令处理失败,根据所述第五DTU所记录的第四回调函数的索引调用第四回调函数,以向所述命令传输单元反馈错误处理失败的信息。
根据本申请的第一方面的第一至第十任一项任务处理的方法,提供了根据本申请的第一方面的第二十三任务处理的方法,所述命令传输单元还在所述每个DTU中记录一组标记,其中,所述标记用于指示错误处理方式。
根据本申请的第一方面的第二十三任务处理的方法,提供了根据本申请的第一方面的第二十四任务处理的方法,其中,所述第一子命令处理单元响应于接收到第六DTU承载的子命令所读取的数据错误,根据所述第六DTU中所记录的一组标记所指示的错误处理方式进行错误处理。
根据本申请的第一方面的第二十四任务处理的方法,提供了根据本申请的第一方面的第二十五任务处理的方法,其中,所述第一子命令处理单元响应于所述第六DTU中所记录的一组标记指示通过重读方式进行错误处理,对所述第六DTU所承载的子命令所访问数据进行重读;所述第一子命令处理单元响应于所述第六DTU中所记录的一组标记指示通过恢复方式进行错误处理,对所述第六DTU所承载的子命令所访问数据进行恢复。
根据本申请的第一方面的第一至第二十五任一项任务处理的方法,提供了根据本申请的第一方面的第二十六任务处理的方法,所述任务处理***还包括第二数据通路,所述方法还包括:所述命令传输单元响应于接收到管理命令,将所述管理命令发送给第二数据通路而不为所述管理命令分配DTU,其中,所述第二数据通路处理管理命令;所述第二数据通路对所述管理命令进行处理,并向所述命令传输单元反馈对所述管理命令的处理结果。
根据本申请的第一方面的第一至第二十六任一项任务处理的方法,提供了根据本申请的第一方面的第二十七任务处理的方法,所述任务处理***还包括第三数据通路,所述方法还包括:所述命令传输单元响应于接收到符合NVMe协议的IO命令,将符合NVMe协议的IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给第三数据通路的下行通数据通路。
根据本申请的第一方面的第二十七任务处理的方法,提供了根据本申请的第一方面的第二十八任务处理的方法,其中,所述第一子命令处理单元识别DTU中所承载的子命令类型,若子命令为根据符合NVMe协议的IO命令产生的操作,将该子命令添加到第三队列。
根据本申请的第二方面,提供了根据本申请的第二方面的第一任务处理***,包括:命令传输单元、数据通路和至少一个子命令处理单元;其中,
命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将所述IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给第一数据通路的下行通数据通路,其中,所述第一数据通路为能提供开放通道存储设备功能的通路,处理开放通道协议的IO命令;
所述第一数据通路的所述下行数据通路将一个或多个DTU转发给第一子命令处理单元处理每个DTU所指示的子命令,其中,所述第一子命令处理单元与所述第一数据通路耦合。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1A为本申请实施例提供的一种控制部件的示意图;
图1B为本申请实施例提供的一种用于存储设备的任务处理***的框图;
图1C为本申请实施例提供的任务处理***的框图;
图2A为本申请实施例提供的任务处理单元的框图;
图2B为本申请实施例提供的处理DTU的流程示意图;
图2C为本申请实施例提供的通道的框图;
图3A为本申请实施例提供的下行数据通路的示意图;
图3B为本申请实施例提供的构建下行通路的流程示意图;
图3C为本申请实施例提供的又一下行数据通路的示意图;
图4A为本申请实施例提供的又一下行数据通路的示意图;
图4B为本申请实施例提供的又一下行数据通路的示意图;
图5A为本申请实施例提供的上行数据通路的示意图;
图5B为本申请实施例提供的又一上行数据通路的示意图;
图5C为本申请实施例提供的构建上行通路的流程示意图;
图5D为本申请实施例提供的DTU的示意图;
图6A为本申请实施例提供的资源管理的示意图;
图6B为本申请实施例提供的又一资源管理的示意图;
图6C为本申请实施例提供的又一资源管理的示意图;
图7为本申请实施例提供的一种存储设备的框图;
图8为本申请实施例提供的又一种存储设备的框图;
图9A为本申请实施例提供的一种任务处理的方法示意图;
图9B为本申请实施例提供的一种子命令处理单元的结构示意图;
图9C为本申请实施例提供的一种对错误数据处理的示意图;
图9D为本申请实施例提供的另一种对错误数据处理的示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1C展示了本申请实施例提供的一种用于存储设备的任务处理***的框图。
参看图1C,存储设备向主机展示多种设备的功能,例如NVMe存储设备、开放通道(OC,Open Channel)存储设备、具有指定功能的加速器、MCTP(管理组件传输协议,Management Component Transport Protocol)端点、NVMe设备的管理队列(Admin Queue)等。主机得以根据不同的协议访问每个设备提供的功能。
任务处理***包括命令传输单元、多个数据通路(230、232、234与236)与多个子命令处理单元(250、256与259),其中,命令传输单元根据指定的存储协议同主机交换命令,子命令处理单元用于将子命令转换为访问存储介质的命令。子命令处理单元250耦合于存储介质。子命令处理单元259耦合于加速器(例如,根据AES/SM4标准执行加密/解密计算的加速器)。数据通路230提供NVMe存储设备的功能,处理NVMe协议的IO命令;数据通路232提供OC存储设备功能,处理OC协议的IO命令。数据通路234处理MCTP协议的管理命令或NVMe协议的管理命令。数据通路236处理对加速器的访问请求。
命令传输单元根据命令所使用的协议将命令转发的对应的数据通路。例如,对于IO命令,数据通路230和/或数据通路232的第一个任务处理单元实施从IO命令到子命令的拆分。IO命令要访问存储设备的存储设置。由单一的子命令处理单元250服务数据通路230与数据通路232,使得数据通路230提供的NVMe存储设备与数据通路232提供的OC存储设备都可使用存储设备的所有存储介质,从而提高了存储介质的利用率。
命令传输单元将IO命令拆分为子命令,为子命令分配DTU,并根据其协议而提供给同协议对应的数据通路。命令传输单元也为管理命令与访问加速器的命令分配DTU。用DTU承载各种命令从而得以在数据通路中被一个或多个任务处理单元处理。作为举例,命令传输单元无须将管理命令和/或访问加速器的命令拆分为子命令,而由DTU承载管理命令和/或访问加速器的命令。
对于管理命令(例如,遵循MCTP协议或NVMe协议),其查询或设置设备的状态,由数据通路234与子命令处理单元256处理。在管理命令查询例如存储设备可用空间大小时,子命令处理单元256从内存中获取存储介质的使用状态而无须同专用的硬件相关联。在管理命令查询例如设备温度时,子命令处理单元256耦合例如温度传感器(未示出)以获取温度信息。
子命令处理单元259耦合的加速器是例如根据AES/SM4标准执行加密/解密计算的加速器。可选地,数据通路230与数据通路232的资源管理器将加速器封装为资源,并由数据通路230/子命令处理单元250的任务处理单元使用。数据通路236与子命令处理单元259则将加速器展示为提供相关服务的设备,从而主机得以直接使用加速器。
根据本申请的实施例,数据通路包括下行数据通路与上行数据通路。对于能够处理IO命令的数据通道,其下行数据通路用于处理IO命令的子命令,上行数据通路用于收集并递送子命令的处理结果。另外,下行数据通路可被构建。为构建下行数据通路,创建一个或多个任务处理单元,以及创建一个或多个通道(如图1A所示)。将所创建的通道绑定到所创建的任务处理单元,并指示任务处理单元从该通道获取DTU还是通过该通道递送DTU。
图2A展示了根据本申请实施例创建的任务处理单元的框图。图2A展示了根据本申请实施例创建任务处理单元所实施的流程图。
参看图2A,任务处理单元包括入站接口、出站接口、DTU处理模块与可选的一个或多个回调函数。
入站接口从绑定到该任务处理单元的通道获取DTU。例如,通过调用被绑定的通道的Pop函数从其DTU列表中获取DTU。出站接口向绑定到该任务处理单元的通道添加DTU。例如,通过调用被绑定的通道的Push函数向其DTU列表添加DTU。DTU处理模块对从入站接口获取的DTU提取子命令,处理子命令,并将处理后的子命令承载于DTU中通过出站接口添加到通道。DTU处理模块可选地将一个或多个回调函数的索引添加到DTU中,以构建上行数据通路。后面还将详细描述构建上行数据通路的实施方式。
可选地,任务处理单元包括两个或更多入站接口,和/或两个或更多出站接口。每个入站接口耦合到通道之一。每个出站接口耦合到通道之一。
根据本申请的实施例,任务处理***提供例如任务处理单元、通道、资源管理器的模板,例如程序员的用户通过复制模板,并为复制的模板添加所需的代码来构建任务处理单元。以任务处理单元为例,其可重用的部分(例如入站接口、出站接口、DTU处理模块)由模板提供,而需要为其设置入站接口所耦合的通道实例,出站接口所耦合的通道实例与任务处理单元要实现的处理子命令的功能(例如,为子命令分配缓存,或者为子命令查询其要访问的物理地址)。从而构建任务处理单元时,仅需关注任务处理单元实例的特定功能的实现,而无须关注如何获取待处理子命令,如何并发处理子命令等问题。
图2B展示了DTU处理单元处理DTU的流程图。
参看图2B,DTU处理单元(也参看图1C)从其所在的任务处理单元的每个入站接口所耦合的通道获取DTU(260)。DTU处理单元轮询每个有待处理DTU的入站接口。可选地,任务处理单元的多个入站接口各自具有优先级,DTU处理单元根据优先级从各入站接口获取DTU。
获取的DTU承载了子命令。DTU处理单元从DTU中获取子命令,并根据子命令的内容处理子命令(262)。可选地,每个任务处理单元的DTU处理单元实施子命令的特定阶段的处理。多个任务处理单元对子命令的处理可以相同或不同。例如,两个任务处理单元处理子命令的相同阶段,从而这两个任务处理单元并行处理两个子命令。作为又一个例子,两个任务处理单元处理子命令的不同阶段,从而这两个任务处理单元对同一子命令先后处理。
DTU处理单元处理后的子命令,依然被承载于DTU。DTU处理单元将承载了其处理完成的子命令的DTU通过出站接口发出(264)。出站接口所耦合的通道又耦合了其他任务处理单元。例如,DTU处理单元根据DTU所承载的子命令接下来所要经历的处理,选择出站接口之一来发送该DTU。依然可选地,任务处理单元的多个出站接口各自具有优先级,DTU处理单元根据优先级通过各出站接口发送DTU。
图2C展示了根据本申请实施例创建的通道的框图。
通道包括DTU列表与多个操作DTU列表的函数(270、272、274)。DTU列表容纳多个DTU。耦合到通道的任务处理单元(通过出站接口)调用Push函数(270)用于向DTU列表添加DTU,而(通过入站接口)调用Pop函数(274)则从DTU列表取出DTU。
从DTU被添加到DTU列表,到从DTU列表中将该DTU取出,可能经历了较长的时间。例如,若DTU列表被实现为队列,DTU被添加到队列的队尾,直到其成为队头后才会被从队列取出。而一些DTU所代表的子命令希望被低延迟的处理。因而,可选地,通道还包括Push函数(272)。Push函数(272)不同于Push函数(270)。耦合到通道的任务处理单元调用Push函数(272)向通道提供DTU,而作为响应,通道的直接转发单元从Push函数(272)获取的DTU,还调用目的索引指示的函数,并将获取的DTU提供给目的索引指示的函数以完成对该DTU的递送。从而,调用通道的Push函数(272)向通道提供的DTU被提供给由目的索引所指示的函数并由该函数立即处理,降低了DTU在通道中停留的时间。目的索引所指示的函数是从该通道接收DTU的任务处理单元的函数。从而Push函数(272)、直接转发单元与目的索引构成了通道的快速处理DTU的通路。
通道的DTU列表、多个操作DTU列表的函数与直接转发单元是其可重用的部分,由模板提供。在实例化通道时,为DTU列表提供存储空间以容纳DTU。可选地,还设置目的索引,以向通道的直接转发单元指示接收DTU的函数。
可选地,通道还包括监视单元。监视单元监视DTU列表的操作(例如,添加和/或取出),和/或监视对DTU的直接转发操作。
根据可选的实施例,一个或多个资源管理器通过监视单元监视通过Push函数(270)将DTU添加到DTU列表的操作。从而资源管理器得以及时知晓同DTU相关的资源被使用,或者为DTU分配所需的资源。
作为举例,资源管理器向监视单元注册监视函数。响应于Push函数(270)被调用,调用所注册的一个或多个监视函数。通过Push函数(270)向通道添加的DTU或其携带的参数被作为监视函数的参数。
依然作为举例,添加到通道并待另一任务处理单元处理的DTU需要某种资源,该种资源的分配需要一定时间。监视函数响应于DTU被添加到通道而向对应的资源管理器申请该种资源,从而使资源申请操作适当地提前。当任务处理单元从通道中获取了DTU时,该种资源已被分配给该DTU,从而降低了处理该DTU的延迟(隐藏了资源分配时间)。
作为又一个例子,资源管理器需要监视某种资源的状态。例如,存储数据的存储介质资源,除了有“空闲”与“被使用”状态外,“被使用”状态的存储介质所存储的数据可能因更新而失效,并处于“失效”状态。资源管理器维护存储介质的状态,从“被使用”状态到“空闲”状态的转换由资源释放操作触发,而从“空闲”状态到“被使用”状态的转换由资源分配操作触发。根据本申请的实施例,资源管理器通过对通道的Push函数(270)的操作的监视或对DTU列表的操作的监视而获知从“被使用”状态到“失效”状态的转换。例如,监视函数获取承载写子命令的DTU对应的逻辑地址与物理地址,并记录物理地址对应的存储介质的状态为“失效”。从而任务处理单元或其他方无须另外以其他方式向资源管理器通告这种状态变化。
图3A展示了根据本申请实施例创建的下行数据通路的示意图。
下行数据通路包括任务处理单元(310、312、314、316)及连接任务处理单元并在任务处理单元之间传递DTU的通道(320、322、324)。
通道连接两个或多个任务处理单元。通道单向传输DTU。从而通道连接的多个任务处理单元是DTU的生产者与消费者关系。参看图3A,任务处理单元310通过通道320向任务处理单元314提供DTU,是生产者,任务处理单元314是任务处理单元310生产的DTU的消费者。任务处理单元312也通过通道320向任务处理单元314提供DTU。根据本申请的实施例,一个通道可以耦合到一个或多个作为DTU生产者的任务处理单元(例如,相对于通道320的任务处理单元310、312),但仅耦合一个作为DTU消费者的任务处理单元(例如,相对于通道320的任务处理单元316)。任务处理单元能够向多个通道发送DTU,也能从多个通道接收DTU。例如,任务处理单元312向两个通道(320与324)发送DTU,任务处理单元从两个通道(322与324)接收DTU。
在可选的实施方式中,调度器响应于通道有待处理的DTU而将耦合到该通道的作为消费者的任务处理单元调度执行,或者使该任务处理单元出于可被调度的状态。任务处理单元被调度执行后,从其耦合的通道获取DTU并处理。
下行数据通路的构建在任务处理***初始化时进行。可选地,在任务处理***工作期间,构建下行数据通路,或者变更已构建的下行数据通路。
图3B展示了构建下行数据通路的流程图。
为构建下行数据通路创建下行数据通路的一个或多个任务处理单元(340)与一个或多个通道(350)。作为举例,为构建图3A展示的下行数据通路,创建任务处理单元(310、312、314与316)与通道(320、322与324)。
按照指定的耦合关系,将创建的通道绑定到任务处理单元的入站接口/出站接口(360)。依然作为举例,为构建图3A展示的下行数据通道,将通道320绑定到任务处理单元310的出站接口与任务处理单元312的出站接口。将通道320还绑定到任务处理单元314的入站接口。将通道322绑定到任务处理单元314的出站接口与任务处理单元316的入站接口。将通道324绑定到任务处理单元312的出站接口与任务处理单元316的入站接口。
图3C展示了根据本申请又一实施例的下行数据通路的示意图。
缓存管理单元380、地址映射单元382与数组组装单元384分别是实施对子命令的不同处理功能的任务处理单元。图3C展示的下行数据通路300包括多个通道(370、372与374)、多个任务处理单元(缓存管理单元380、地址映射单元382与数据组装单元384)与多个资源管理器(390、392与394)。从而图3C展示的下行数据通路用于实现存储设备的功能。
存储设备还包括命令传输单元302与子命令处理单元304。可选地,命令传输单元302根据指定的存储协议同主机交换IO命令。命令传输单元将IO命令拆分为一个或多个子命令,用分配DTU承载子命令,以及将DTU交付给下行数据通路300。下行数据通路300对子命令进行一阶段或多阶段的处理,最终将DTU交付给子命令处理单元304。子命令处理单元304将DTU承载的子命令转换为访问存储介质的命令。作为举例,子命令处理单元304是介质接口控制器,或者子命令处理单元304用于与介质接口控制器进行交互访问存储介质的命令。子命令处理单元304还查询存储介质,以获取处理子命令的结果,数据通过的上行数据通路将子命令的处理结果交付给命令传输单元302。如果需要,命令传输单元302将收集由同一IO命令拆分的所有子命令的处理结果,并向主机指示IO命令处理完成。
作为举例,命令传输单元302将DTU添加到通道370,通过通道370,承载了子命令的DTU被提供给缓存管理单元380。缓存管理单元380为子命令分配缓存,并将子命令所访问的数据搬移到所分配的缓存。缓存管理单元380关联于资源管理器390。资源管理器390管理缓存资源,例如,管理缓存资源的分配与释放。缓存管理单元380响应于从通道370获取的DTU所承载的子命令,向资源管理器390请求分配缓存。在承载子命令的DTU中还记录为子命令所分配的缓存。响应于将子命令所访问的数据搬移到缓存,缓存管理单元380完成了对子命令的处理,并将承载该子命令的DTU发送到通道372。
可选地,命令传输单元302处理遵循多种存储协议的IO命令,存储协议包括例如SAS/SATA协议、开放通道(Open Channel)协议、键值(Key-Value)存储协议和/或NVMe协议等。
地址映射单元380从通道372获取DTU,并获取DTU所承载的子命令。地址映射单元380为子命令分配物理地址,并建立子命令要访问的逻辑地址与物理地址的映射。地址映射单元关联于资源管理器392。资源管理器392管理地址映射表,其中记录了存储设备的所有逻辑地址与物理地址的映射关系。地址映射单元382响应于DTU而请求资源管理器392为其分配同DTU承载的子命令所访问的逻辑地址关联的条目,条目中记录了该逻辑地址与物理地址的关联关系。在承载子命令的DTU中还记录为子命令所分配的条目。响应于获得了子命令所访问的物理地址,缓存管理单元382完成了对子命令的处理,并将承载该子命令的DTU发送到通道374。
数据组装单元384从通道374获取DTU,并获取DTU所承载的子命令。数据组装单元384组装子命令要访问的数据,以便生成向存储介质写入数据的命令。数据组装单元384关联于资源管理器394。资源管理器394管理用于异或计算的加速器(称为“异或单元”)。数据组装单元384响应于DTU而请求资源管理器394为其分配异或单元。
数据组装单元384操作子命令处理单元304将组装好的数据写入存储介质。可选地,数据组装单元384还根据DTU中的记录,向资源管理器(390、392和/或394)释放该DTU从其分配的一种或多种资源。
图4A展示了根据本申请再一实施例的下行数据通路的示意图。
缓存管理单元410、地址映射单元412与数组组装单元414、日志单元416与垃圾回收单元418分别是不同能的任务处理单元。图4A展示的下行数据通路包括多个通道(420、421、422、424、426与428)与多个任务处理单元(缓存管理单元410、地址映射单元412、数据组装单元414、日志单元416与垃圾回收单元418)。图4A展示的下行数据通路用于实现存储设备的功能。存储设备还包括命令传输单元402与子命令处理单元404。
作为举例,命令传输单元402将DTU添加到通道420,通过通道420,承载了子命令的DTU被提供给缓存管理单元410。缓存管理单元410处理后的DTU被添加到通道422。地址映射单元412从通道422获取DTU,并将处理后的DTU添加到通道424。数据组装单元414从通道424获取DTU,并根据DTU承载的子命令通过子命令处理单元404访问存储介质。
数据组装单元414还生成DTU添加到通道426。日志单元416从通道416获取DTU,根据DTU生成要记录的日志,并将处理后的DTU添加到通道428。数据组装单元414也从通道428获取DTU,根据DTU承载的子命令将日志写入存储介质。
垃圾回收单元418生成指示垃圾回收操作的子命令的DTU并添加到通道421。缓存管理单元还从通道421获取DTU,并处理其中的子命令。
图4B展示了根据本申请依然再一实施例的下行数据通路的示意图。
图4B展示的下行数据通路包括多个通道(420、421、422、424、426、428、431、430、432与434)与多个任务处理单元(缓存管理单元410、缓存管理单元411、地址映射单元412、地址映射单元413、数据组装单元414、日志单元416与垃圾回收单元418)。
同图4A展示的下行数据通路相比,图4B展示的下行数据通路包括两个缓存管理单元与两个地址映射单元。缓存管理单元411与缓存管理单元410并行工作。地址映射单元413与地址映射单元412并行工作。从而图4B展示的下行数据通路得以并行处理命令传输单元402提供的多个子命令,增强了子命令处理能力。
作为举例,命令传输单元402将DTU添加到通道420,通过通道420,承载了子命令的DTU被提供给缓存管理单元410。缓存管理单元410处理后的DTU被添加到通道422。地址映射单元412从通道422获取DTU,并将处理后的DTU添加到通道424。数据组装单元414从通道424获取DTU,并根据DTU承载的子命令通过子命令处理单元404访问存储介质。
数据组装单元414还生成DTU添加到通道426。日志单元416从通道416获取DTU,根据DTU生成要记录的日志,并将处理后的DTU添加到通道428。数据组装单元414也从通道428获取DTU,根据DTU承载的子命令将日志写入存储介质。
垃圾回收单元418生成指示垃圾回收操作的子命令的DTU并添加到通道421。缓存管理单元还从通道421获取DTU,并处理其中的子命令。
根据本申请的实施例,为增强任务处理***的处理能力提供了便利。参看图4B,通过为下行数据通路提供并行的多个任务处理单元与同其耦合的通道,任务处理能力得到增强。由于任务处理单元是可调度的,当例如存储设备的控制部件的处理器核数增加或线程数增加,下行数据通路上增加的任务处理单元得以利用增加的处理器核或线程,从而增加的处理器核或线程被方便且充分利用来并行处理更多的子命令。一些情况下,由于子命令处理各阶段的不均衡性,找到对处理各阶段的最划分与最优资源分配是困难的。例如,缓存管理与地址映射阶段的工作负担相比于日志管理要更重。而根据本申请的实施例,对下行数据通路的调整变得简单,通过调整下行数据通路,测试不同数量的任务处理单元和/或通道的设置,以便捷地找到最优或较优的下行数据通路结构。
DTU承载了一种或多种子命令,下行数据通路为处理DTU分配了一种或多种资源。在完成对DTU承载的子命令的处理后,要释放为DTU分配的多种资源并递送对应多种子命令的多种处理结果。即使相同类型的子命令,也存在处理成功/失败等多种状态。因而对于每个DTU,存在不同的资源释放方式,和/或处理结果识别与递送方式。因而,需要通过不同的上行数据通路,以对应不同的处理方式。
根据本申请的实施例,在下行数据通路处理DTU的过程中,为每个DTU构建上行数据通路,并在DTU承载的子命令被处理完成后,通过所构建的上行数据通路对该DTU进行处理。
图5A展示了根据本申请实施例的上行数据通路的示意图。
参看图5A,下行数据通路包括例如多个任务处理单元(510、520与530),任务处理单元还包括一个或多个回调函数(512、522与532)。图5A的例子中,任务处理单元510包括回调函数512,任务处理单元520包括回调函数522,任务处理单元530包括回调函数532。任务处理单元510处理的DTU通过通道(由箭头简单示出)提供给任务处理单元520,任务处理单元处理的DTU通过通道提供给任务处理单元530。
下行数据通路的任务处理单元在处理DTU时,将一个或多个自身的回调函数的索引记录在所处理的DTU中。从而在该DTU承载子命令被处理完成,从该DTU中获取一个或多个回调函数索引并调用这些回调函数,以完成上行数据通路对该DTU的处理。从而这些回调函数构成了该DTU的上行数据通路或其部分。
在图5A的例子中,任务处理单元530是下行数据通路的最后一个任务处理单元。其将DTU 542承载的子命令提交给子命令处理单元(未示出)。子命令处理单元缓存DTU 542,处理DTU 542指示的子命令,并将子命令的处理结果提供给监视单元550。
监视单元550监视并识别子命令是否被处理完成。响应于子命令处理完成,监视单元520获取指示了子命令的处理结果的DTU 542。例如,监视单元550接收到子命令处理单元发送的子命令处理完成指示,确定子命令处理完成。又如,监视单元550对子命令处理单元进行轮询,轮询到子命令完成指示,则确定子命令处理完成。作为响应,监视单元550获取承载了被处理完成的子命令的DTU 542,从DTU 542中获取其中的一个或多个回调函数索引(例如,回调函数512、522与532),按指定的顺序调用这些回到函数索引所指示的回调函数。作为举例,回调函数532用于释放任务处理单元530为DTU 542分配的资源,回调函数522用于释放任务处理单元520为DTU 542分配的资源,回调函数512用于释放任务处理单元510为DTU 542分配的资源。回调函数512还将DTU 542提供给命令传输单元(未示出)。回调函数512是上行数据通路中被最后调用的回调函数。命令传输单元根据DTU 542的指示获取子命令的处理结果。命令传输单元还释放DTU 542,从而DTU 542可被用于承载其他子命令并提供给下行数据通路。
可选地,命令传输单元还合并多个子命令的处理结果。这些被合并的子命令来源于同一个命令。响应于由同一命令产生的多个子命令都处理完成,命令传输单元向命令发出方返回该命令的处理结果。
从而在图5A的例子中,在逻辑上,回调函数537、回调函数527与回调函数517依次处理DTU 547(由虚线箭头指示),监视单元550与回调函数(512、522与532)构成了该DTU542的上行数据通路。
从而根据本申请的实施例,一个或多个回调函数索引被记录DTU中,监视单元550根据要处理的DTU中的回调函数索引按指定顺序调用对应的回调函数,实现了为每个DTU构建专用于该DTU的上行数据通路,并用构建的上行数据通路处理各DTU,从而在对上行数据通路中能对各DTU提供不同的处理方式。
图5B展示了根据本申请的又一实施例的上行数据通路的示意图。
在图5B的例子中,下行数据通路包括三个任务处理单元,分别是缓存管理单元515、地址映射单元525与数据组装单元535(也参看图4A与图4B)。下行数据通路还包括管理缓存资源的资源管理器、管理映射表资源的资源管理器与管理加速器资源的资源管理器(未示出资源管理器,仅示出了被管理的资源)。
缓存管理单元515为处理DTU 547从缓存资源中获取了缓存单元分配给DTU 547。地址映射单元525为DTU 547分配映射表资源(例如,锁定映射表的条目)用于记录承载写入数据的存储介质的地址。数据组装单元535为DTU 547分配加速器资源(用于为写入数据计算校验数据),并将DTU 547承载的子命令提交给子命令处理单元(例如,介质接口控制器)(未示出)。
作为举例,处理DTU 547时,缓存管理单元515将回调函数517的索引记录在被处理的DTU 547中,地址映射单元525将回调函数527的索引记录在DTU 547中,而数据组装单元535将回调函数537的索引记录在DTU 547中。回调函数517用于例如释放分配给DTU 547的缓存资源。回调函数527用于例如将分配给DTU 547的存储介质地址写入映射表条目并为该映射表条目解锁。回调函数537用于例如记录分配给DTU 547的加速器释放。
监视单元555轮询子命令处理单元,获知DTU 547对应的子命令被处理完成。监视单元555从DTU 547中获取其中记录的回调函数(517、527与537)的索引,并调用这些回调函数。
作为举例,回调函数(517、527与537)使用DTU或DTU记录的变量作为参数,以处理该DTU。依然作为举例,监视单元555按回调函数537、回调函数527与回调函数517的顺序调用这些回调函数。调用回调函数的顺序是例如其被添加到DTU 547中的顺序的逆序。从而,各任务处理单元按操作堆栈的方式向DTU 547中添加回调函数的索引,监视单元555也按操作堆栈的方式从DTU 547中获取回调函数的索引并调用对应的回调函数。
图5C展示了根据本申请实施例的构建上行数据通路的流程图。
下行数据通路的一个任务处理单元中,向DTU中写入一个或多个回调函数索引(570),并将DTU通过提供给下行数据通路的另一任务处理单元。该另一任务处理单元也向DTU中写入一个或多个回调函数索引(572)。通过一个或多个任务处理单元在DTU中写入一个或多个回调函数索引,这些回调函数索引所指示的回调函数,构成了处理该DTU的上行数据通路。
在该DTU承载的子命令被子命令处理单元处理完成后,获取该DTU中记录的所有回调函数索引,并依次调用这些回调函数索引所指示的回调函数(574),以通过上行数据通路处理该DTU。
可选地,任务处理单元根据其对DTU承载的子命令所进行的处理或为其分配的资源,选择向该DTU中记录的回调函数索引,而回调函数索引对应的回调函数是预置在该任务处理单元中的。例如,选择将释放所分配的资源的回调函数对应的索引,或者选择将处理子命令执行失败场景的回调函数对应的索引。
可选地,一个任务处理单元为DTU添加一个或多个回调函数索引。依然可选地,一个或多个任务处理单元不为其处理的DTU添加任何回调函数索引。从而,下行数据通路中的任务处理单元的数量大于、等于或小于上行数据通路中的任务处理单元的数量。例如,下行数据通路共有5个任务处理单元,但这5个任务处理单元在处理DTU的过程中,只有缓存管理单元与地址映射单元在处理子命令的时向DTU中各自写入了一个回调函数索引。此时的DTU中共有两个回调函数索引。从而在用于该DTU的上行数据通路仅包括两个回调函数。
例如,缓存管理单元515在向DTU 547写入回调函数517的索引之后,缓存管理单元515的回调函数517即成为上行数据通路505的一部分,即缓存管理单元515既是下行数据通路的组成部分,也是上行数据通路的组成部分。通过回调函数517的索引来调用回调函数517时,通过执行回调函数517,释放在DTU 547时请求资源管理器分配的缓存资源。
在又一个例子中,缓存管理单元515在处理子命令时并未向DTU 547中写入回调函数517的索引。而地址映射单元525在处理DTU 547时,向DTU 547中写入了回调函数527的索引,回调函数527用于释放缓存管理单元525为DTU 547分配的缓存资源。在处理完DTU 547后,调用DTU 547记录的回调函数527的索引以执行回调函数527,并释放了缓存资源。可选地,还在DTU 547中记录分配的缓存资源的标识信息,并在释放缓存资源时用改标识信息指示具体的缓存资源。
在一些实施例中,下行数据通路包括多个任务处理单元,多个任务处理单元中的每个任务处理单元在处理DTU承载的子命令的过程中,均在DTU中写入回调函数的索引。每个任务处理单元写入DTU中的回调函数索引指示的回调函数相同或不同。在一个例子中,缓存管理单元515在处理DTU时请求分配了缓存资源,而地址映射转换单元525和数据组装单元535在处理DTU时并未请求缓存资源,从而缓存管理单元515向DTU写入的回调函数索引与地址映射转换单元525和数据组装单元535向DTU写入的回调函数索引不同,依然可选地,地址映射转换单元525和数据组装单元535向DTU写入的回调函数索引相同。
通过上行数据通路的回调函数还向命令传输单元返回子命令的处理结果。
可选地,DTU 547中的一个或多个回调函数索引是有序的,按顺序调用这些回调函数索引所指示的回调函数。按顺序被调用的DTU 547中的一个或多个回调函数构成了上行数据通路。作为举例,调用DTU 547中回调函数索引所指示的的一个或多个回调函数的顺序是构建上行数据通路中向DTU写入这些回调函数索引的逆序。
图5D展示了DTU的示意图。
如图5所示,DTU中记录了回调函数索引,回调函数索引指示了包括回调函数索引A、回调函数索引B和回调函数索引C的回调函数列表。作为举例,回调函数索引A是缓存管理单元515写入的,回调函数索引B是地址映射单元525写入的,回调函数索引C是数据组装单元535写入的。回调函数列表中的回调函数索引A、回调函数索引B和回调函数索引C是有序的。图5D中,回调函数列表的左侧相对于右侧是更早被写入DTU的回调函数索引。可选地,在上行数据通路中,按照回调函数索引被写入DTU的写入顺序的逆序,通过回调函数索引C、回调函数索引B和回调函数索引A的顺序来依次调用3个回调函数。
在一些实施例中,监视单元获取到DTU后,通过回调函数列表中的回调函数索引,调用一个或多个回调函数。例如,监视单元获取到回调函数列表中的最后一个回调函数索引为回调函数索引C,通过回调函数索引C调用回调函数C1,以执行该回调函数C1。在执行完回调函数C1后,监视单元继续通过回调函数索引B调用回调函数B1。在执行完回调函数B1后,监视单元220继续通过回调函数索引A调用回调函数A1。作为举例,回调函数A1是上行数据通路的最后一个回调函数,其还将DTU返回给命令传输单元,该DTU携带了子命令的处理结果。
图6A展示了根据本申请实施例的资源管理的示意图。
任务处理单元从通道获取DTU并处理。在处理DTU的过程中,向资源管理器请求资源,用于对DTU所承载的子命令的处理。任务处理单元在DTU中记录被分配的资源的标识,以指示当前该DTU占用了该资源。任务处理单元还向该DTU中记录回调函数索引,该回调函数索引所指示的回调函数被执行时将释放该资源。任务处理单元将处理后的DTU通过通道提供给其他任务处理单元或提供给子命令处理单元。
图6B展示了根据本申请又一实施例的资源管理的示意图。
下行数据通路包括两个任务处理单元(610、612),两个资源管理器(620、622)。图6B中,DTU 640、DTU 642与DTU 644展示了相同DTU的不同阶段。DTU 640被任务处理单元610处理后被展示为DTU 642,而DTU 642被任务处理单元612处理后被展示为DTU 644。
任务处理单元610处理DTU 640时,向资源管理器620请求分配资源A。例如,资源A代表缓存资源。任务处理单元610向任务处理单元612提供DTU 642,并在DTU 642中记录被分配的资源A与回调函数A1的索引。回调函数A1被执行时向资源管理器释放资源A。
任务处理单元612处理DTU 642时,向资源管理器622请求分配资源B。例如,资源B代表加速器资源。任务处理单元612生成DTU 644,并在DTU 644中记录被分配的资源B与回调函数B1的索引。回调函数B1被执行时向资源管理器释放资源B。从而DTU 644中记录的被分配的资源A与回调函数A1的索引是任务处理单元610添加的,而被分配的资源B与回调函数B1的索引是任务处理单元612添加的。
图6C展示了根据本申请又一实施例的资源管理的示意图。
下行数据通路包括三个任务处理单元(650、652与654),两个资源管理器(660、662)。图6C中,DTU 670、DTU 672与DTU 674展示了相同DTU的不同阶段。而DTU 670与DTU680代表不同的DTU。DTU 680与DTU 682代表相同DTU的不同阶段。DTU 670被任务处理单元650处理后被展示为DTU 672,而DTU 672被任务处理单元652处理后被展示为DTU 674。DTU680被任务处理单元654处理后被展示为DTU 682。
任务处理单元650处理DTU 670时,向资源管理器660请求分配资源A。例如,资源A代表缓存资源。任务处理单元650向任务处理单元652提供DTU 672,并在DTU 672中记录被分配的资源A。任务处理单元650在DTU 672中还记录了回调函数索引,但作为举例,该回调函数索引所指示的回调函数被执行时,不用于释放资源A。
任务处理单元654处理DTU 680时,向资源管理器660请求分配资源A’。资源A’与资源A是同类资源(例如,缓存资源),但资源A’与资源A分别代表该类资源的不同实例。任务处理单元654在DTU 682中记录被分配的资源A与回调函数索引,该回调函数索引所指示的回调函数被执行时,不用于释放资源A’。
资源管理器管理资源的分配。例如,资源管理器660确保资源的一份实例(例如,资源A)不会既分配给DTU 672又分配给DTU 682。例如,资源管理器660为每个资源实例维护锁,以确保一个资源实例仅被分配给一个DTU。资源管理器还管理对资源实例的释放。从而根据本申请实施例的任务处理***的下行数据通路,可包括多个具有相同功能和/或使用相同资源的任务处理单元,这些任务处理单元通过同一资源管理器请求资源。
依然参看图6C,任务处理单元650向DTU 672添加的回调函数不用于释放其为DTU672请求的资源A。其意味着对同一资源的分配与释放,不必由同一任务处理单元负责(而可由另一任务处理单元负责),从而带来任务处理的灵活性。可以理解地,由同一任务处理单元负责释放其分配的资源,也是可行的。
任务处理单元652处理DTU 672时,向资源管理器622请求分配资源B。任务处理单元652生成DTU 674,并在DTU 644中记录被分配的资源B与回调函数B1的索引。回调函数B1被执行时向资源管理器释放资源B。任务处理单元652还在DTU 674中记录回调函数A1的索引。回调函数A1被执行时向资源管理器释放资源A。
图7展示了利用根据本申请实施例的任务处理***构建的存储设备的框图。
根据本申请实施例的任务处理***被用于构建存储设备,并由例如存储设备的控制部件实施。
任务处理***包括命令传输单元、数据通路与子命令处理单元。子命令处理单耦合于存储介质。
命令传输单元根据指定的存储协议同主机交换IO命令。命令传输单元将IO命令拆分为一个或多个子命令,分配DTU来承载子命令,以及将DTU交付给数据通路。
数据通路包括下行数据通路与上行数据通路。下行数据通路对子命令进行一阶段或多阶段的处理,最终将DTU交付给子命令处理单元。子命令处理单元将DTU承载的子命令转换为访问存储介质的命令。作为举例,子命令处理单元是介质接口控制器。子命令处理单元还查询存储介质,以获取访问存储介质的命令的处理结果。上行数据通路将子命令的处理结果交付给命令传输单元。作为举例,上行数据通路轮询子命令处理单元,以获得子命令的处理结果。如果需要,命令传输单元将收集由同一IO命令拆分为一个或多个子命令,在由同一IO命令拆分的所有子命令都处理完成后,向主机提供该IO命令的处理结果。
根据本申请的实施例,为在存储设备中支持虚拟化提供了便利。例如,NVMe协议定义了命名空间(NameSpace,简称为NS)。命名空间向访问存储设备的主机展示了虚拟存储设备或逻辑存储设备。从而通过在单一控制部件上提供多个命名空间,每个命名空间都向主机提供了虚拟化的存储设备。作为又一个例子,由存储设备的单一控制部件同时提供由不同存储协议访问的多种虚拟存储设备,例如,同时支持NVMe协议、开放通道(Open Channel)协议和/或SATA协议的存储设备。
还为各虚拟存储设备分配资源。例如,缓存资源、存储介质资源、加速器资源为各虚拟存储设备共享是有利的,映射表资源为各虚拟存储设备独占是有利的。
图8展示了利用根据本申请又一实施例的任务处理***构建的存储设备的框图。
根据图8的实施例,存储设备向主机展示例如NVMe协议的多个命名空间(分别记为NS0、NS1、NS2与NS3)。主机得以根据NVMe协议访问每个命名空间提供的虚拟存储设备。
根据本申请实施例的任务处理***被用于构建图8A展示的存储设备,并由例如存储设备的控制部件实施。
任务处理***的实例包括命令传输单元、多个数据通路(810、812、814与816)与子命令处理单元。子命令处理单耦合于存储介质。多个数据通路(810、812、814与816)的每个,分别用于提供命名空间之一。作为举例,数据通路810提供命名空间NS0,数据通路812提供命名空间NS1,数据通路814提供命名空间NS2,而数据通路816提供命名空间NS3。
命令传输单元将主机提供的IO命令拆分为子命令,并根据IO命令访问的命名空间,将从IO命令拆分出的子命令提供给同命名空间对应的数据通路。例如,IO命令访问命名空间NS2,则命令传输单元将从该IO命令拆分出的所有子命令都提供给数据通路814,由数据通路814处理访问命名空间NS2的所有IO命令。
从而,根据本申请的实施例,通过复制数据通路,便捷地使存储设备提供了多命名空间的功能。
可选地,为各命名空间提供其独占的映射表资源,以及提供共享的其他资源(存储介质资源、加速器资源等)。从而,任务处理***提供例如4个用于管理映射表资源的资源管理器,每个用于管理映射表资源的资源管理器被耦合到数据通路之一,并且仅管理同其耦合的数据通路关联的命名空间对应的映射表资源,从而实现了在各命名空间之间对映射表资源的有效隔离。而任务处理***还为每个数据通路提供其专用的管理其他类型资源的资源管理器。以用于管理存储介质的存储介质资源管理器为例,耦合到各数据通路的各存储介质资源管理器管理存储设备的例如所有存储介质,从而每个数据通路都可用存储设备的任何可用的存储介质来承载被子命令写入的数据,提高了存储介质资源的利用率,并且有助于实现存储设备的全局磨损均衡。
可以理解地,数据通路、资源管理器与被管理的各种资源之间,在根据本申请的实施例中,可其他具有多种对应关系。例如,可以为每个数据通路提供独占的存储介质资源,以减轻数据通路之间相互的影响。重要的事,根据本申请的任务处理***,数据通路得以被便捷地复制,资源管理器得以被便捷地耦合于数据通路,存储设备的资源得以被资源管理便捷地管理。从而,加快了存储设备的新功能的开发。
前述图1A至图8讲述了目前用于存储设备的任务处理***架构,本申请实施例希望在图1A至图8所示的任务处理***架构上提供对于主机访问提供OC功能的存储设备时,向该存储设备发送的OC协议命令的处理方案。
图9A展示了本申请实施例提供的一种对于OC协议命令处理的方法示意图。
作为举例,图9A所示的方法应用于图1A至图8所示的各实施例的任务处理***架构。存储设备响应于接收到主机发送的OC协议的IO命令,存储设备的控制部件的CPU运行图1A至图8所示的任务处理***,控制该任务处理***执行如下步骤:
步骤901,命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将该IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将DTU发送给数据通路(如图1B所示的数据通路232)的下行通数据通路。
步骤902,数据通路的下行数据通路将一个或多个DTU转发给子命令处理单元(如图1B所示的子命令处理单元250);该子命令处理单元缓存所一个或多个述DTU,并处理每个DTU所指示的子命令。
由于不同协议的IO命令具有不同的特性,例如,NVMe协议的IO命令指示了要访问的逻辑地址,OC协议的IO命令指示了要访问的物理地址。在对IO命令处理过程中,命令传输单元除了将IO命令拆分为一个或多个子命令,用分配DTU承载子命令以及将DTU交付给所选择的数据通路的下行数据通路之外,还会根据IO命令的特性在所分配的DTU中记录相关信息。作为举例,对于OC协议的IO命令,命令传输单元响应于分配一个或多个DTU来承载子命令,还根据OC协议的IO命令要访问的地址在承载子命令的DTU中记录子命令所访问的物理地址,其中,物理地址指示了要访问存储设备中NVM芯片的物理块。由于DTU中记录了物理地址,根据本申请的实施例,承载了根据OC协议的IO命令对应的子命令的DTU无需被提供给诸如地址映射单元、缓存管理单元等任务处理单元,而是直接被提供给子命令处理单元,从而缩短了此类处理DTU的数据通路,加快了对此类DTU的处理过程。
由于工艺和使用环境的问题,NVM芯片中不可避免出现一定比例的坏物理块,坏物理块是指包含一位或多位错误的物理块,而且坏物理块随机分布,可能是出厂时就存在的,也可以是使用过程中产生的。在一些实施方式中,子命令处理单元在对所缓存的一个或多个DTU承载的子命令进行处理时,若所缓存的一个或多个DTU中存在至少一个DTU携带的物理地址指示了坏物理块,则子命令处理单元会用正常物理块的物理地址替换坏物理块的物理地址。可选地,子命令处理单元不对坏块物理地址做替换,而由主机来管理坏块。
根据本申请实施例,命令传输单元在根据OC协议的IO命令生成的DTU中记录了一种或多种要由子命令处理单元执行的策略,例如,坏块物理地址替换策略,错误处理策略,为所写入数据提供冗余备份策略等。
参见上文图9A部分所讲述的,任务处理***在对IO命令处理过程中,子命令处理单元的作用是缓存所一个或多个述DTU,并处理每个DTU所指示的子命令。而IO命令包括读命令、写命令或者擦除命令等。本申请实施例中,子命令处理单元具有同多种IO命令所对应的一个或多个DTU缓存以及处理其指示的子命令的功能。
图9B展示了本申请实施例提供的一种子命令处理单元的结构示意图。
作为举例,命令传输单元响应于分配一个或多个DTU来承载子命令,还根据IO命令的类型在承载子命令的DTU中记录子命令类型;如,IO命令为读命令,在承载子命令的DTU中记录子命令类型为读操作;或者IO命令为写命令,在承载子命令的DTU中记录子命令类型为编程操作;又或者IO命令为擦除命令,在承载子命令的DTU中记录子命令类型为擦除操作。在子命令处理单元中设置多个队列,每个队列用于存储指定子命令类型的子命令,响应于在承载子命令的DTU中记录子命令类型,子命令处理单元从对应的数据通道的下行数据通道中获取要处理的IO命令所对应的每个DTU时,识别每个DTU所承载的子命令类型,根据子命令类型将该DTU所承载的子命令添加到对应的队列。如图9B所示的子命令处理单元包括命令队列1、命令队列2、……命令队列N,其中,N为不小于2的正整数;子命令处理单元响应于识别出DTU所承载的子命令类型为读操作,将该子命令添加到队命令列1中,子命令处理单元响应于识别出DTU所承载的子命令类型为编程操作或者擦除操作,将该子命令添加到命令队列2中,例如,命令队列1中包括子命令11、子命令12、……、子命令1M,其中,M为正整数;命令队列2中包括子命令21、子命令22、……、子命令2Q,其中,Q为正整数。
又作为举例,响应于在子命令处理单元中设置多个队列,每个队列用于存储指定子命令类型的子命令。子命令处理单元在对接收到的DTU所承载的子命令处理过程中,会对每个队列中所存在的待处理的子命令进行处理,从每个队列中取出待处理的子命令生成介质接口命令,并将介质接口命令发送给介质接口控制器。又作为举例,子命令处理单元响应于从队列中取出指示编程操作的子命令,若其访问的物理地址属于指定的范围,生成两个或多个介质接口命令,所生成的两个或多个介质接口命令所写入的数据互为备份,所生成的两个或多个介质接口命令各自携带物理地址,所生成的两个或多个介质接口命令各自携带的物理地址的部分相同。
又作为举例,存储设备的工作温度也需要被有效的控制,温度过高或者过低都会影响电子器件的工作。另外,随着对任务处理,存储设备的性能也会受到影响。而存储设备的温度和性能又会影响存储设备对命令处理。因此,子命令处理单元在对各个队列中待处理的子命令处理过程中,该需要根据环境温度和/或性能,确定从各队列中取出待处理的子命令的时机。例如,当环境温度高于预设阈值,子命令处理单元暂停从每个队列中获取待处理的子命令;当环境温度低于预设阈值,子命令处理继续从每个队列中获取待处理的子命令。又例如,当前剩余信用度(credit)不能满足对IO命令的处理需求,子命令处理单元暂停从每个队列中获取待处理的子命令;当剩余信用度(credit)满足对IO命令的处理需求,子命令处理单元继续从每个队列中获取待处理的子命令。
回到图9A,命令传输单元分配一个或多个数据传输单元DTU来承载子命令,以及将DTU发送给图1B所示的数据通路232的下行通数据通路,该下行数据通道会将承载子命令的DTU发送给子命令处理单元250。由于图9A所针对的是对OC协议的IO命令处理,而OC协议定义了IO命令指示要访问的物理地址,故在本申请实施例中,下行数据通道在对OC协议的IO命令对应的一个或多个子命令处理过程中,不需要进行缓存管理、地址映射以及数据组装等过程,即本申请实施例中,任务处理***在对OC协议的IO命令对应的一个或多个子命令处理过程中,不需要缓存管理、地址映射以及数据组装等任务处理单元的参与,数据通路的下行数据通路可直接通过命令传输单元与子命令处理单元之间的数据传输通道,将承载子命令的DTU传送给子命令处理单元。作为举例,该通道包括DTU列表、多个操作DTU列表的函数和/或直接转发单元;命令传输单元调用所述函数向该DTU列表中添加为IO命令所对应的一个或多个子命令分配的DTU;以及直接转发单元调用所述函数从DTU列表获取一个或多个DTU,并将获取的一个或多个DTU提供给子命令处理单元。
子命令处理单元将子命令转换为介质接口命令,并将介质接口命令发送给介质接口控制器后,介质接口控制器将介质接口命令发送给NVM芯片,并接收NVM芯片反馈的数据,并将该数据作为子命令的响应数据。而NVM芯片反馈的响应数据可能会存在错误,任务处理***在接收到每个子命所对应的响应数据后,需要对每个子命令所对应的响应数据进行错误检查与校正,并在响应数据存在错误时对其进行错误处理,来获取正确的响应数据。作为举例,命令传输单元在分配一个或多个DTU时,在每个DTU中还记录错误处理的方式,例如,以重读方式进行错误处理或者以恢复方式进行错误处理。又作为举例,上行数据通路还包括一个或多个用于错误处理的回调函数,命令传输单元在分配一个或多个DTU时,还在每个DTU中写入一个或多个回调函数的索引,以在存在错误时,通过回调函数索引来找到对应的回调函数,并根据对应的回调函数进行错误处理。
图9C展示了本申请实施例提供的一种对错误数据处理的示意图。
作为举例,图9C中,上行数据通路还包括一个或多个回调函数(912、922与932),其中,每个回调函数用于指示错误处理方式;例如,回调函数912指示了将错误数据所对应的子命令重新发送给下行数据通路或者子命令处理单元进行重读;回调函数922指示了通过RAID重构恢复方式进行错误处理;回调函数932指示了反馈错误失败的处理信息。子命令处理单元的队列中待处理的子命令包括:DTU1所承载的子命令1以及DTU2所承载的子命令2;其中,子命令1、子命令2为读命令所对应的子命令。当子命令1所对应的IO命令指示通过重读方式进行错误处理,则命令传输单元在DTU1中记录回调函数912的索引;当子命令2所对应的IO命令指示通过恢复方式进行错误处理,命令传输单元在DTU2中记录回调函数922的索引。
子命令处理单元从队列中获取DTU1所承载的子命令1,并读取子命令1所对应的数据;子命令处理单元响应于读取的数据存在错误,根据DTU1所记录的回调函数912的索引调用回调函数912,表示为过程(9.1)~(9.3);并根据回调函数912对DTU1所承载的子命令1所访问的物理地址进行重读,表示为过程(9.4)。例如,将DTU1所承载的子命令1重新发送给处理该读命令的数据通路所对应的下行数据通路或者子命令处理单元。
又作为举例,命令传输单元在DTU1中所记录的错误处理方式还包括重读序列,回调函数912按照重读序列将DTU1所承载的子命令1重新发送给对应的数据通路的下行通数据通路或子命令处理单元。例如,重读序列包括指定次数的重读操作,以及可选地各次重读操作所使用的参数,回调函数912将DTU1所承载的子命令1重新发送给对应的数据通路的下行通数据通路或子命令处理单元,直到读取到正确的数据,或者重读次数达到重读序列中所设置重读的次数为止。
子命令处理单元从队列中获取DTU2所承载的子命令2,并读取子命令2所对应的数据;子命令处理单元响应于读取的数据存在错误;子命令处理单元根据DTU2所记录的回调函数922的索引调用回调函数922,并根据回调函数922对DTU2所承载的子命令2所访问的数据进行恢复,表示为过程(9.5)~(9.7)。
在存储设备中所存储的数据至少包括用户数据和元数据,其中,用户数据是指用户通过IO命令写入到存储设备中或者从存储设备读取的数据;例如,元数据包括固件镜像、日志或备份数据等。元数据同用户数据相比有显著的区别,例如,对于固件镜像,其具有连续且尺寸较大(例如几MB)、极少被修改以及可靠性要求高的数据特点,如果固件镜像损坏,存储设备即无法使用。又例如,对于日志,其具有尺寸较小(例如从几个字节到几KB)、频繁更新(例如每秒中可能都在被更新)、写入是顺序的以及对可靠性要求相对低等数据特点。再例如,对于备份数据,其具有依赖FTL表的备份策略、尺寸较大(例如几MB或GB)、更新较频繁以及在特殊场景下(例如掉电时)有突发大量更新需求的数据特点。此外,元数据通常存储在特定区域内,例如存储在每个LUN的物理块0,或者物理块1-9。而用户数可在几乎所有物理块上搬移,使得元数据与用户数据具有不同的可靠性和/或不同的存储单元类型(例如元数据可以是SLC存储单元,而用户可以是TLC存储单元)。而由于用户数据和元数据存在显著的区别,对应不同类型的数据其错误恢复的方式也不同。
作为举例,DTU2所承载的子命令2要访问的物理块所存储的数据为用户数据,调用回调函数922,并根据调用回调函数922获取承载读取该物理块所对应的页条带数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给对应的数据通路的下行通数据通路或子命令处理单元,以使得根据所述页条带数据进行数据恢复
又作为举例,DTU2所承载的子命令2要访问的物理块所存储的数据为元数据,调用回调函数922,并根据调用回调函数922读取所述元数据的备份数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给对应的数据通路的下行通数据通路或子命令处理单元,以使得根据所述备份数据进行数据恢复。
图9D展示了本申请实施例提供的另一种对错误数据处理的示意图。
作为举例,参见图9D,响应于子命令1或子命令2所对应IO命令未指示错误处理方式,则命令传输单元分别在子命令1所对应的DTU1中以及子命令2所对应的DTU2中记录回调函数912和回调函数922的索引。例如,子命令处理单元从队列中获取DTU1所承载的子命令1,并读取子命令1所对应的数据;子命令处理单元响应于读取的数据存在错误,根据DTU1中所记录的回调函数912的索引调用回调函数912,以使得通过回调函数912对DTU1所承载的子命令1所访问的物理地址进行重读。在对子命令1所访问的物理地址进行重读后,子命令处理单元响应于接收到对DTU1承载的子命令1所读取的数据重读错误,则根据DTU1中所记录的回调函数922的索引调用回调函数922,以使得通过回调函数922对DTU1所承载的子命令1所访问数据进行恢复,表示为过程(10.1)~(10.8)。
继续回到图9C,本申请实施例的上行数据通路还包括回调函数932,其中,回调函数932用于指示向命令传输单元反馈错误处理失败的信息。命令传输单元分别在子命令1所对应的DTU1中所记录的回调函数932的索引以及在子命令2所对应的DTU2中所记录的回调函数932的索引。子命令处理单元响应于对子命令1和/或子命令2所对应的数据错误处理失败,则通过回调函数932的索引调用回调函数932,并通过回调函数922向命令传输单元反馈错误处理失败的信息。
又作为举例,若子命令1或子命令2所对应的IO命令为写命令,命令传输单元分别在子命令1所对应的DTU1中所记录的回调函数932的索引以及在子命令2所对应的DTU2中所记录的回调函数932的索引。子命令处理单元响应于对子命令1和/或子命令2所对应的数据错误处理失败,根据回调函数932的索引调用回调函数932,并根据回调函数932向命令传输单元反馈错误处理失败的信息,参见图9C,表示为过程(9.8)~(9.9)。
又作为举例,命令传输单元在每个DTU中记录一组标记,其中,所述标记用于指示错误处理方式。子命令处理单元响应于接收到DTU1承载的子命令1所读取的数据错误,根据DTU1中所记录的一组标记所指示的错误处理方式进行错误处理。例如,子命令处理单元响应于DTU1中所记录的一组标记指示通过重读方式进行错误处理,对DTU1所承载的子命令1所访问数据进行重读;子命令处理单元响应于DTU1中所记录的一组标记指示通过RAID重构恢复方式进行错误处理,对DTU1所承载的子命令1所访问数据进行恢复。
主机和存储设备在交互过程中,主机除了可以向存储设备发送IO命令,还可以向存储设备发送管理命令(如Get feature命令),任务处理***对于管理命令与IO命令的处理方式不同。作为举例,存储设备响应于接收到主机发送的管理命令,任务处理***中命令传输单元响应于接收到该管理命令,直接将管理命令发送给其对应的数据通路而不为管理命令分配DTU,其中,该数据通路可以处理管理命令;该数据通路对管理命令进行处理,并向命令传输单元反馈对所述管理命令的处理结果。
参见图1B所示的任务处理***,该任务处理***除了包括处理OC协议的IO命令的数据通道以及处理管理命令的数据通道外,还包括处理NVMe协议的IO命令的数据通道。作为举例,命令传输单元响应于接收到符合NVMe协议的IO命令,将符合NVMe协议的IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给该数据通路的下行通数据通路。又作为举例,子命令处理单元识别DTU中所承载的子命令类型,若子命令为根据符合NVMe协议的IO命令产生的操作,将该子命令添加到对应的队列。
需要说明的是,为了简明的目的,本申请将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本申请的方案并不受所描述的动作的顺序限制。因此,依据本申请的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本申请所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本申请某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本申请对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本申请某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本申请的公开和教导,本领域技术人员可以理解本申请所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个***,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种任务处理的方法,应用于任务处理***,所述任务处理***包括命令传输单元、数据通路和至少一个子命令处理单元,其特征在于,包括:
命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将所述IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给第一数据通路的下行通数据通路,其中,所述第一数据通路为能提供开放通道存储设备功能的通路,处理开放通道协议的IO命令;
所述第一数据通路的所述下行数据通路将一个或多个DTU转发给第一子命令处理单元处理每个DTU所指示的子命令,其中,所述第一子命令处理单元与所述第一数据通路耦合。
2.根据权利要求1所述的方法,其特征在于,所述第一数据通路的下行数据通路包括第一通道,其中,所述第一通道为所述命令传输单元与所述第一子命令处理单元之间直接进行数据交互的通道;
所述第一数据通路的下行数据通路通过所述第一通道将所述一个或多个DTU转发给所述第一子命令处理单元。
3.根据权利要求1或2任一项所述的方法,其特征在于,其中,所述第一数据通路还包括一个或多个回调函数;
所述命令传输单元在所述每个DTU中写入一个或多个回调函数的索引,其中,通过所述回调函数的索引对应的回调函数,用于错误处理。
4.根据权利要求3所述的方法,其特征在于,其中,
所述命令传输单元还在所述每个DTU中记录错误处理方式。
5.根据权利要求4所述的方法,其特征在于,响应于所述IO命令为读命令且指示错误处理方式为重读,所述命令传输单元在所述每个DTU中写入第一回调函数的索引,其中,所述第一回调函数用于通过重读方式进行错误处理;
所述第一子命令处理单元响应于接收到第二DTU承载的子命令所读取的数据错误,根据所述第二DTU中所记录的第一回调函数的索引调用第一回调函数,以通过所述第一回调函数对所述第二DTU所承载的子命令所访问的物理地址进行重读。
6.根据权利要求4所述的方法,其特征在于,响应于所述IO命令指示错误处理方式为恢复,所述命令传输单元还在所述每个DTU中写入第二回调函数的索引,其中,所述第二回调函数用于通过恢复方式进行错误处理;
所述第一子命令处理单元响应于接收到第三DTU承载的子命令所读取的数据错误,根据所述第三DTU中所记录的第二回调函数的索引调用第二回调函数,以通过所述第二回调函数对所述第三DTU所承载的子命令所访问数据进行恢复。
7.根据权利要求6所述的方法,其特征在于,响应于所述第三DTU所承载的子命令要访问的物理块所存储的数据为用户数据,所述第二回调函数获取承载读取该物理块所对应的页条带数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给第一数据通路的下行通数据通路或所述第一子命令处理单元,以使得根据所述页条带数据进行数据恢复。
8.根据权利要求6所述的方法,其特征在于,响应于所述第三DTU所承载的子命令要访问的物理块所存储的数据为元数据,所述第二回调函数获取承载读取所述元数据的备份数据的一个或多个子命令的DTU,将获取的一个或多个DTU发送给第一数据通路的下行通数据通路或所述第一子命令处理单元,以使得根据所述备份数据进行数据恢复。
9.根据权利要求1-8所述的方法,其特征在于,所述命令传输单元还在所述每个DTU中记录一组标记,其中,所述标记用于指示错误处理方式。
10.一种任务处理***,其特征在于,包括:命令传输单元、数据通路和至少一个子命令处理单元;其中,
命令传输单元响应于接收到主机发送的符合开放通道协议的IO命令,将所述IO命令拆分为一个或多个子命令,并分配一个或多个数据传输单元DTU来承载子命令,以及将所述DTU发送给第一数据通路的下行通数据通路,其中,所述第一数据通路为能提供开放通道存储设备功能的通路,处理开放通道协议的IO命令;
所述第一数据通路的所述下行数据通路将一个或多个DTU转发给第一子命令处理单元处理每个DTU所指示的子命令,其中,所述第一子命令处理单元与所述第一数据通路耦合。
CN202210755465.2A 2022-06-30 2022-06-30 一种任务处理的方法及*** Pending CN115221099A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210755465.2A CN115221099A (zh) 2022-06-30 2022-06-30 一种任务处理的方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210755465.2A CN115221099A (zh) 2022-06-30 2022-06-30 一种任务处理的方法及***

Publications (1)

Publication Number Publication Date
CN115221099A true CN115221099A (zh) 2022-10-21

Family

ID=83610210

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210755465.2A Pending CN115221099A (zh) 2022-06-30 2022-06-30 一种任务处理的方法及***

Country Status (1)

Country Link
CN (1) CN115221099A (zh)

Similar Documents

Publication Publication Date Title
US10838665B2 (en) Method, device, and system for buffering data for read/write commands in NVME over fabric architecture
US8639898B2 (en) Storage apparatus and data copy method
EP2849076B1 (en) Dma transmission method and system
US9213500B2 (en) Data processing method and device
US9182912B2 (en) Method to allow storage cache acceleration when the slow tier is on independent controller
US10901624B1 (en) Dummy host command generation for supporting higher maximum data transfer sizes (MDTS)
KR20200078382A (ko) 개시자 모드를 갖는 솔리드-스테이트 드라이브
WO2013170731A1 (zh) 将数据写入存储设备的方法与存储设备
CN103999060A (zh) 固态存储管理
US20210405915A1 (en) Distributed function processing with estimate-based scheduler
US20140181326A1 (en) Tag allocation for queued commands across multiple devices
US8266342B1 (en) Storage system
EP4369171A1 (en) Method and apparatus for processing access request, and storage device and storage medium
US11416176B2 (en) Function processing using storage controllers for load sharing
US20230137668A1 (en) storage device and storage system
JP2006185000A (ja) ストレージ装置
CN108153582B (zh) Io命令处理方法与介质接口控制器
KR101427535B1 (ko) 정보 처리 장치, 기록 매체 및 영역 해방 제어 방법
US11544205B2 (en) Peer storage devices sharing host control data
CN113076189B (zh) 具有多数据通路的数据处理***及用多数据通路构建虚拟电子设备
CN113076180B (zh) 上行数据通路的构建方法及数据处理***
KR20230078577A (ko) 동기식 쓰기 방법 및 장치, 스토리지 시스템 및 전자 장치
CN115221099A (zh) 一种任务处理的方法及***
US20080256266A1 (en) Computer system using remote I/O and I/O data transfer method
CN115391237A (zh) 应用于闪存存储控制器中的垃圾回收***及方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication