CN111095231B - 一种基于NVMe的数据读取方法、装置及*** - Google Patents

一种基于NVMe的数据读取方法、装置及*** Download PDF

Info

Publication number
CN111095231B
CN111095231B CN201880005007.9A CN201880005007A CN111095231B CN 111095231 B CN111095231 B CN 111095231B CN 201880005007 A CN201880005007 A CN 201880005007A CN 111095231 B CN111095231 B CN 111095231B
Authority
CN
China
Prior art keywords
address
data
host
read
indicated
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.)
Active
Application number
CN201880005007.9A
Other languages
English (en)
Other versions
CN111095231A (zh
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN111095231A publication Critical patent/CN111095231A/zh
Application granted granted Critical
Publication of CN111095231B publication Critical patent/CN111095231B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/404Coupling between buses using bus bridges with address mapping
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Systems (AREA)
  • Memory System (AREA)
  • Communication Control (AREA)

Abstract

一种基于NVMe的数据读取方法,装置和***。该方法包括:主机触发读指令,读指令中携带第一地址的指示信息,第一地址为主机开放给NVMe控制器寻址访问的地址,NVMe控制器获取到读指令后,向主机发送数据报文,数据报文中携带第一地址和载荷数据,主机接收到数据报文后,根据第一地址确定第二地址,并将载荷数据存入第二地址指示的存储空间。第二地址可以为主机的私有内存地址。主机通过将第一地址映射为第二地址,割裂了第二地址与通信协议的关系,主机对第二地址的访问可以不受通信协议的约束。

Description

一种基于NVMe的数据读取方法、装置及***
技术领域
本申请涉及存储领域,尤其涉及一种基于非易失性高速传输总线(non-volatilememory express,NVMe)的数据读取方法、装置和存储设备。
背景技术
随着存储技术的发展,尤其是在使用闪存(Flash)作为存储介质的固态硬盘(solid state drive,SSD)中,传统的机械硬盘设计的串行高级技术附件(serialadvanced technology attachment,SATA)接口与串行ATA高级主控接口/高级主机控制器接口(Serial ATA Advanced Host Controller Interface,AHCI)标准已经无法满足存储设备的要求,成为限制存储设备处理能力的一大瓶颈。非易失性高速传输总线(non-volatile memory express,NVMe)应运而生,NVMe是一种允许主机(Host)和非易失性存储(non-volatile memory,NVM)子***通信的接口,NVM子***(包括控制器和存储介质)通信的该接口以寄存器接口的方式附加到高速***部件互连总线(Peripheral ComponentInterconnect express,PCIe)接口之上,为企业级和消费级固态存储做了优化具有性能高、访问时延低的优势。
NVMe基于成对的提交队列(英文全称:submission queue,缩写SQ)和完成队列(英文全称:completion queue,缩写:CQ)机制。命令由主机放到提交队列。完成信息由控制器放到对应的完成队列。每个提交队列条目(submission queue entry,SQE)是一个命令,在读指令中,用于数据传输的内存地址通过元数据指针(英文全称:Meta-data Pointer,缩写:MPTR)和数据指针(英文全称:Data Pointer,缩写:DPTR)进行指定。NVMe控制器获取到读指令后,通过PCIe写操作将待读取数据写入用于数据传输的内存地址指示的存储空间。
发明内容
本申请公开了一种基于NVMe的数据读取方法、装置和***。主机通过开放给NMVe控制器的入口地址接收NMVe控制器发送的数据报文,并在其内存空间为该入口地址分配对应的存储单元,接收到数据报文后,根据数据报文携带的入口地址确定与其对应的存储单元的地址,并将数据报文中的载荷数据写入确定的存储单元。从而割裂了存储单元与通信协议的关系,实现数据的灵活操作。
第一方面,本申请公开了一种基于NVMe的数据读取***,该***包括主机、NVMe控制器和存储介质,存储介质用于存储主机的数据,主机用于向NVMe控制器触发读指令,读指令中携带用于指示第一地址的指示信息,第一地址为NVMe控制器可寻址的地址,NVMe控制器获取到读指令后,用于从存储介质中读取读指令对应的待读取数据,并向主机发送第一数据报文,第一数据报文中携带第一地址和第一载荷数据,其中第一载荷数据属于第一数据报文,该主机接收到第一数据报文后,还用于根据第一地址确定第二地址,并将第一载荷数据写入第二地址指示的存储单元,其中,第二地址为主机可寻址的地址。
其中,读指令可以具体为SQE,主机触发读指令的具体流程可以为主机将SQE写入SQ,并通过门铃通知NMVe控制器。第一地址为主机开放给NVMe控制器访问的地址,但第一地址只是作为NVMe控制器向主机写入载荷数据的入口地址,第一地址指示的存储空间并没有实际的存储载荷数据。主机在接收到NVMe控制器发送的数据报文后,并不是将载荷数据写入第一地址指示的存储空间,而是在其可寻址的存储空间内分配了与第一地址对应的第二地址,并将载荷数据写入第二地址指示的的存储单元。从而主机对第二地址指示的存储单元的操作就不再受主机与NMVe控制器之间通信协议的限制,本申请可以减少读操作的时延,并减少待读取数据对主机存储空间的占用。
根据第一方面,在第一方面第一种可能的实现方式中,主机完成对第二地址指示的存储单元的写操作后,还用于对第二地址指示的存储单元中的数据进行操作。完成对存储单元的写操作为将与该存储单元关联的数据全部写入该存储单元,例如可以具体为写满该存储单元或将与该存储单元关联的最后一份载荷数据写入该存储单元。对数据进行操作可以为将存储单元中的数据发送给其他主体。
第二地址指示的存储空间可以为主机的私有内存,不再通过PCIe地址的方式供NVMe控制器访问,不是也不作为命令内存缓冲区(Command memory Buffer,CMB)。主机通过第一地址和第二地址之间的映射关系,将载荷数据存入其可寻址的第二地址指示的存储单元后,割裂了主机与NVMe控制器之间的通信协议与第二地址之间的关系,主机完成对第二地址指示的存储单元的写操作后,就可以对第二地址指示的存储单元中的数据进行操作,不需要等待读指令指示的读操作完全结束后才对读取的数据进行操作。
根据第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,NVMe控制器还用于触发完成队列条目(completion queue entry,CQE),CQE用于指示NVMe控制器完成读指令指示的读操作,主机对第二地址指示的存储单元中的数据进行操作后,还用于获取完成队列条目CQE。
NVMe控制器触发CQE可以具体为NVMe完成读操作后,将CQE写入CQ,并通过中断通知主机。基于现有协议,在触发读指令前,主机需要为读指令分配PCIe地址空间,该PCIe地址指示的存储空间用于存储待读取数据。在完成读指令之前,主机丧失该PCIe地址空间的所有权,即主机获取到CQE之前,不能访问该PCIe地址空间指示的存储空间,从而造成读操作延时和存储空间的浪费。由于第二地址不是数据报文中携带的第一地址,是主机可选址的内部地址,所以主机可以在获取CQE之前就对第二地址指示的存储单元中的数据进行操作。
根据第一方面以上任一种可能的实现方式,在第一方面第三种可能的实现方式中,主机对第二地址指示的存储单元中的数据进行操作后,还用于释放第二地址指示的存储单元。
主机可以将其内部存储空间组织成内存池的形式,该内存池包含多个存储单元,主机对存储单元中的数据完成操作后,就可以将内存单元释放到内存池中,供其他读操作使用,不必等到整个读操作解释才释放该存储单元,从而减少了对存储单元的占用时间,增大了存储空间的使用效率。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第四种可能的实现方式中,主机触发读指令前,还用于为读指令分配第二地址指示的存储单元,并记录第一地址与第二地址的对应关系。
主机在触发写指令前就为读指令分配好对应的存储单元可以有效避免存储空间溢出,主机可以根据维护的内存池中空闲的存储单元的数量触发读指令,实现对对读操作的有效调控。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第五种可能的实现方式中,读指令的待读取数据对应至少两个数据报文,主机为读指令分配至少两个存储单元。
因为数据报文可携带的载荷数据的大小的限制,NVMe控制器在发送待读取数据时,可以将待读取数据拆分成多份,使用多个数据报文进行传输。主机可以根据读操作的规模分配对应数量的多个存储单元。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第六种可能的实现方式中,主机用于根据第一地址和第一载荷数据在待读取数据中的顺序确定第二地址。
主机为读操作分配了多个存储单元,即第一地址对应多个存储单元,主机接收到第一数据报文后,需要为第一载荷数据确定具体的存储单元。主机可以为该读操作分配的多个存储单元进行逻辑编址,并将待读取数据依次写入该多个存储单元。主机具体可以根据第一载荷数据在待读取数据中的顺序确定该第一载荷数据需要写入的存储单元。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第七种可能的实现方式中,NVMe控制器还用于向主机发送第二数据报文,第二数据报文中携带第一地址和第二载荷数据,待读取数据包含第二载荷数据,主机还用于接收第二数据报文,并根据接收第一数据报文和第二数据报文的顺序确定第一载荷数据和第二载荷数据在待读取数据中的顺序。
因为每个数据报文可以携带的载荷数据的大小受限,NVMe控制器需要将待读取数据分为多个数据报文传输,主机在接收到数据报文后,需要对数据报文中携带的载荷数据进行重新排序,如果NVMe控制器发送数据报文的时候是按照载荷数据在待读取数据中的顺序严格保序发送的,则主机可以根据接收到数据报文的顺序对载荷数据进行排序。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第八种可能的实现方式中,第一数据报文中还携带第一载荷数据在待读取数据中的偏移量,偏移量用于指示第一载荷数据在待读取数据中的顺序。
通过在数据报文中携带载荷数据在待读取数据中的偏移量,NVMe控制器可以实现对数据报文的乱序传输,能够更大限度的利用带宽资源。
根据第一方面或第一方面以上任一种可能的实现方式,在第一方面第八种可能的实现方式中,第一地址为NVMe控制器可寻址的PCIe地址,第一数据报文为PCIe报文;第二地址指示的存储单元为主机的内存空间。
第二方面,本申请公开了一种基于NVMe的数据读取方法,该方法包括:主机触发读指令,读指令中携带指示信息,指示信息用于指示第一地址,第一地址为NVMe控制器可寻址的地址;主机接收NVMe控制器发送的第一数据报文,第一数据报文中携带第一地址和第一载荷数据;主机根据第一地址确定第二地址,第二地址为主机可寻址的地址;主机将第一载荷数据写入第二地址指示的存储单元。
根据第二方面,在第二方面第一种可能的实现方式中,主机完成对第二地址指示的存储单元的写操作后,该方法还包括:主机对第二地址指示的存储单元中的数据进行操作。
根据第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,主机对第二地址指示的存储单元中的数据进行操作后,该方法还包括:主机获取NVMe控制器触发的完成队列条目CQE,CQE用于指示NVMe控制器完成读指令指示的读操作。
根据第二方面以上任一种可能的实现方式,在第二方面第三种可能的实现方式中,主机对第二地址指示的存储单元中的数据进行操作后,该方法还包括:主机释放第二地址指示的存储单元。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第四种可能的实现方式中,主机触发读指令前,该方法还包括:主机为读指令分配第二地址指示的存储单元,并记录第一地址与第二地址的对应关系。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第五种可能的实现方式中,读指令的待读取数据对应至少两个数据报文,主机为读指令分配至少两个存储单元。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第六种可能的实现方式中,主机根据第一地址和第一载荷数据在待读取数据中的顺序确定第二地址。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第七种可能的实现方式中,该方法还包括:主机接收NVMe控制器发送的第二数据报文,第二数据报文中携带第一地址和第二载荷数据;主机根据接收第一数据报文和第二数据报文的顺序确定第一载荷数据和第二载荷数据在待读取数据中的顺序。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第八种可能的实现方式中,第一数据报文中还携带第一载荷数据在待读取数据中的偏移量,偏移量用于指示第一载荷数据在待读取数据中的顺序。
根据第二方面或第二方面以上任一种可能的实现方式,在第二方面第八种可能的实现方式中,第一地址为NVMe控制器可寻址的PCIe地址,第一数据报文为PCIe报文;第二地址指示的存储单元为主机的内存空间。
第二方面为第一方面对应的方法实现方式,第一方面或第一方面任一种可能的实现方式中的描述对应适用于第二方面或第二方面任一种可能的实现方式,在此不再赘述。
第三方面,本申请提供了一种可读介质,包括执行指令,当计算设备的处理器执行该执行指令时,该计算设备执行以上第二方面或以上第二方面的任一种可能的实现方式中的方法。
第四方面,本申请提供了一种计算设备,包括:处理器、存储器和总线;存储器用于存储执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储的执行指令,以使计算设备执行以上第二方面或以上第二方面的任一种可能的实现方式中的方法。
第五方面,本申请公开了一种基于NVMe的数据读取装置,该装置包括:处理单元,用于触发读指令,读指令中携带指示信息,指示信息用于指示第一地址,第一地址为NVMe控制器可寻址的地址;接收单元,用于接收NVMe控制器发送的第一数据报文,第一数据报文中携带第一地址和第一载荷数据;该处理单元还用于根据第一地址确定第二地址,并将第一载荷数据写入第二地址指示的存储单元,第二地址为处理单元可寻址的地址。
根据第五方面,在第五方面第一种可能的实现方式中,处理单元完成对第二地址指示的存储单元的写操作后,还用于对第二地址指示的存储单元中的数据进行操作。
根据第五方面第一种可能的实现方式,在第五方面第二种可能的实现方式中,处理单元对第二地址指示的存储单元中的数据进行操作后,还用于获取NVMe控制器触发的完成队列条目CQE,CQE用于指示NVMe控制器完成读指令指示的读操作。
根据第五方面以上任一种可能的实现方式,在第五方面第三种可能的实现方式中,处理单元对第二地址指示的存储单元中的数据进行操作后,还用于释放第二地址指示的存储单元。
根据第五方面或第五方面以上任一种可能的实现方式,在第五方面第四种可能的实现方式中,处理单元触发读指令前,还用于为读指令分配第二地址指示的存储单元,并记录第一地址与第二地址的对应关系。
根据第五方面或第五方面以上任一种可能的实现方式,在第五方面第五种可能的实现方式中,读指令的待读取数据对应至少两个数据报文,处理单元为读指令分配至少两个存储单元。
根据第五方面或第五方面以上任一种可能的实现方式,在第五方面第六种可能的实现方式中,处理单元用于根据第一地址和第一载荷数据在待读取数据中的顺序确定第二地址。
根据第五方面或第五方面以上任一种可能的实现方式,在第五方面第七种可能的实现方式中,接收单元还用于接收NVMe控制器发送的第二数据报文,第二数据报文中携带第一地址和第二载荷数据;处理单元还用于根据接收第一数据报文和第二数据报文的顺序确定第一载荷数据和第二载荷数据在待读取数据中的顺序。
根据第五方面或第五方面以上任一种可能的实现方式,在第五方面第八种可能的实现方式中,第一数据报文中还携带第一载荷数据在待读取数据中的偏移量,偏移量用于指示第一载荷数据在待读取数据中的顺序。
根据第五方面或第五方面以上任一种可能的实现方式,第一地址为NVMe控制器可寻址的PCIe地址,第一数据报文为PCIe报文;第二地址指示的存储单元为装置的内存空间。
第五方面为第一方面对应的装置实现方式,第一方面或第一方面任一种可能的实现方式中的描述对应适用于第五方面或第五方面任一种可能的实现方式,在此不再赘述。
根据本申请公开的技术方案,主机将第一地址作为数据入口地址开放给NVMe控制器,供NVMe控制器通过第一地址向主机写入待读取数据,NVMe控制器发送的数据报文中携带的目的地址为第一地址,但主机接收到数据报文后,并没有将数据报文中的载荷数据真正的写入第一地址指示的存储空间,而是将第一地址映射为第二地址,并将数据报文的载荷数据写入第二地址指示的存储空间。其中,第二地址指示的存储空间可以为主机的私有内存空间,从而割裂了存储载荷数据的存储空间与通信协议之间的关系,主机对第二地址的访问不受通信协议的限制。主机在读指令结束前,可以使用第二地址指示的存储空间中存储的数据,并提前释放第二地址指示的存储空间供其他读操作使用。本申请公开的技术方案可以减少读操作的时延,并节省用于存储待读取数据的存储空间。
附图说明
图1为依据本申请一实施例的NVMe***的逻辑结构示意图;
图2为一种基于NVMe标准的数据读取方法的信令图;
图3为依据本申请一实施例的主机的硬件结构示意图;
图4为依据本申请一实施例的基于NMVe的数据读取方法的流程示意图。
图5为依据本发明一实施例的入口组织结构示意图;
图6为依据本发明一实施例的入口组织结构示意图;
图7为依据本发明一实施例的PCIe地址结构示意图;
图8为依据本发明一实施例的地址映射关系示意图;
图9为依据本发明一实施例的数据报文传输示意图;
图10为依据本发明一实施例的基于NVMe的数据读取方法的信令图;
图11(a)为依据本申请一实施例的NVMe***的逻辑结构示意图;
图11(b)为依据本申请一实施例的NVMe***的逻辑结构示意图;
图12为依据本申请一实施例的计算设备的逻辑结构示意图。
具体实施方式
下面将结合附图,对本发明实施例进行描述。
本发明实施例采用术语第一和第二等来区分各个对象,例如第一地址和第二地址等,但各个“第一”和“第二”之间不具有逻辑或时序上的依赖关系。
在本发明实施例中,“数据报文”是指NVMe控制器向主机发送的携带载荷数据的数据包。此处的载荷数据可以是用户数据或者用户数据的元数据,本发明实施例不限定载荷数据的类型。在以下描述中,除非另有说明,本发明实施例使用“数据”或者“载荷数据”一词来表示数据报文中携带的各类数据。在本发明实施例中,数据报文可以为PCIe报文。
在本发明实施例中,入口为主机向NVMe控制器开放的地址空间,入口地址可以具体为PCIe地址,数据报文可以为PCIe写报文。NVMe控制器通过入口向主机发送数据报文,数据报文中携带入口地址。主机接收到数据报文后,识别入口地址,在本地的内部存储器中为该入口分配对应的存储空间,并将数据报文携带的载荷数据写入分配的存储空间进行缓存,而不是将载荷数据写入入口地址指示的存储空间。内部存储器可以具体为主机的私有内存空间。
在本发明实施例中,读操作可以为NVMe命令集中主机从NVMe控制器读取数据的任何操作。指示读操作的指令为读指令。读指令的具体实现方式可以为提交队列条目。
在本发明实施例中,命令发起者和数据发起者可以是相同或者相互分离的主体。命令发起者为直接向NVMe控制器触发指令的***主体,在本发明实施例中也称为命令源。数据发起者为需要读取数据并消费数据的***主体,即用于发起数据访问请求的***主体,在本发明实施例中也称为数据源。在分离场景下,数据源需要通过命令源读取数据。在本发明实施例中,“主机”一词可以指代数据源与命令源分离场景下的命令源或者二者未分离场景下与NMVe控制器通信的计算设备。
在传统方式中,主机在进行NVMe读操作时,在触发的SQE中通过DPTR或MPTR携带用于存放待读取数据的存储空间的地址信息,NVMe控制器根据根据SQE将待读取数据写入该地址信息指示的存储空间。在主机提交SQE和获取到NVMe控制器用于指示读操作完成的完成队列条目之间的时间段内,主机丧失了用于存储待读取数据的存储空间的所有权,即主机需要等待读操作完全结束,才可以访问该存储空间存储的数据。
图1为依据本发明一实施例的NVMe***100的架构图,如图1所示,***100中数据源101和命令源103不是同一主体,二者相互分离,通过网络102互联。命令源103可以通过PCIe总线与NVMe控制器105互联,NVMe控制器105连接有存储介质106。
在本发明实施例中,存储介质106一般也称为外存,一般为非易失存储介质,可以用于永久性存储数据。存储介质106可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质(例如闪存(Flash)等,本发明实施例不限定存储介质106的具体实现形式。在一些实施例中,存储介质106还可能进一步包括与NVMe控制器105分离的远程存储器,例如通过网络与NVMe控制器105互联的网络存储介质。
在本发明实施例中,网络102可以用于指代数据源101与命令源103互联的任意方式或互联协议等,例如可以为PCIe总线,计算机设备内部互联总线,因特网,内联网(英文:intranet),局域网(英文全称:local area network,缩写:LAN),广域网络(英文全称:widearea network,缩写:WAN),存储区域网络(英文全称:storage area network,缩写:SAN)等,或者以上网络的任意组合。
在***100中,数据源101与NVMe控制器105需要经过命令源103进行通信。在传统方式中,命令源103触发的读指令需要携带用于存储待读取数据的存储空间的地址信息。当进行读操作时,需要首先将待读取数据从NVMe控制器105控制的存储介质106中完全转移至命令源103,当获取到指示读操作结束的CQE后,命令源103才可以把数据发送给数据源101。
具体如图2所示,基于传统方式,当数据源需要从存储介质读取数据时,数据源首先向命令源发送读请求。命令源根据从数据源接收到的读请求向提交队列(英文全称:submission queue,缩写SQ)写入SQE,并通过SQE的DPTR或MPTR字段携带用于接收待读取数据的地址信息。命令源随后通过门铃机制通知NVMe控制器有新的SQE,NVMe控制器接收到门铃后,去SQ中读取该SQE,并根据SQE中携带的地址信息使用PCIe写指令将待读取数据完全写入该地址信息指示的存储空间。在读操作完成后,NVMe控制器向完成队列(英文全称:completion queue,缩写:CQ)写入CQE,并通过中断机制通知命令源,命令源处理中断,获取CQE,并向数据源发送待读取数据。
由图2可知,在命令源发起读指令前,需要准备好用于接收待读取数据的存储空间,并在获取到CQE前丧失了这部分存储空间的所有权,即需要等待待读取数据完全写入该存储空间后,才可以将数据发送给数据源。这一过程的延迟与待读取数据的大小成正比。此外,命令源需要大量的NVMe控制器可寻址的内存空间存储待读取数据,且命令源为待读取数据分配内存至获取到NVMe控制器CQE释放内存之间的时间段这一部分内存空间一直被占用。
图3为依据本申请一实施例的主机300的结构示意图。
如图3所示,主机300包括处理器301,处理器301与***内存302连接。处理器301可以为中央处理器(CPU),图像处理器(英文:graphics processing unit,GPU),现场可编程门阵列(英文全称:Field Programmable Gate Array,缩写:FPGA),专用集成电路(英文全称:Application Specific Integrated Circuit,缩写:ASIC)或数字信号处理器(英文:digital signal processor,DSP)等计算逻辑或以上任意计算逻辑的组合。处理器301可以为单核处理器或多核处理器。
在本发明实施例中,处理器301内部还可以包含寄存器,该寄存器的地址信息可以作为PCIe地址开放给NMVe控制器。
在本申请的一个实施例中,处理器301还可以包括读操作逻辑310,读操作逻辑310可以为具体的硬件电路或集成在处理器301中的固件模块。如果读操作逻辑310为具体的硬件电路,则读操作逻辑310执行本申请实施例的方法,如果读操作逻辑310为固件模块,则处理器310执行读操作逻辑310中的固件代码来实现本申请实施例的技术方案。读操作逻辑310包括:(1)用于触发读指令的逻辑(电路/固件代码),其中,读指令中携带指示信息,该指示信息用于指示NVMe控制器可寻址的第一地址;(2)用于接收NVMe控制器发送的数据报文的逻辑(电路/固件代码),数据报文中携带第一地址和载荷数据;(3)用于根据第一地址确定该主机可寻址的第二地址的逻辑(电路/固件代码);(4)用于将载荷数据写入第二地址指示的存储单元的逻辑(电路/固件代码)。
总线309用于在主机300的各部件之间传递信息,总线309可以使用有线的连接方式或采用无线的连接方式,本申请并不对此进行限定。总线309还连接有输入/输出接口305和通信接口303。
输入/输出接口305连接有输入/输出设备,用于接收输入的信息,输出操作结果。输入/输出设备可以为鼠标、键盘、显示器、或者光驱等。
通信接口303用来实现与其他设备或网络之间的通信,通信接口303可以通过有线或者无线的形式与其他设备或网络互联。例如,主机300可以通过通信接口303与NVMe控制器互联,主机300还可以通过通信接口303与网络互联,并通过网络连接NVMe控制器。
本申请实施例的一些特征可以由处理器301执行***内存302中的软件代码来完成/支持。***内存302可以包括一些软件,例如,操作***308(例如Darwin、RTXC、LINUX、UNIX、OS X、WINDOWS、macOS或嵌入式操作***(例如Vxworks)),应用程序307,和读操作模块306等。
在本申请的一个实施例中,处理器301执行读操作模块306来实现本申请实施例的技术方案。读操作模块306包括:(1)用于触发读指令的代码,其中,读指令中携带指示信息,该指示信息用于指示NVMe控制器可寻址的第一地址;(2)用于接收NVMe控制器发送的数据报文的代码,数据报文中携带第一地址和载荷数据;(3)用于根据第一地址确定该主机可寻址的第二地址的代码;(4)用于将载荷数据写入第二地址指示的存储单元的代码。
此外,图3仅仅是一个主机300的例子,主机300可能包含相比于图3展示的更多或者更少的组件,或者有不同的组件配置方式。同时,图3中展示的各种组件可以用硬件、软件或者硬件与软件的结合方式实施。
为了降低读指令的延迟和节省读操作占用的内存空间,本发明实施例提供了一种基于NVMe的数据读取方法,如图4所示,方法400包括:
步骤401:主机触发读指令,该读指令中携带指示信息,该指示信息用于指示NVMe控制器可寻址的第一地址。
在本发明实施例中,读指令可以具体为SQE,在以下描述中,以读指令为SQE进行举例说明,但应理解,本发明实施例并不限定第一读指令的具体实现形式。
主机向NVMe控制器触发读指令的流程可以参照NMVe标准,具体为,主机将SQE写入SQ,并通过门铃通知NVMe控制器有新的SQE,NVMe控制器根据门铃去SQ获取SQE。本发明实施例中,主机还可以直接向NVMe控制器推送SQE,本发明实施例不限定主机向NVMe控制器触发读指令的具体流程。
在本发明实施例中,主机可以将其一部分存储空间开放给NVMe控制器,更具体的,主机可以将其一部分存储空间作为PCIe存储空间开放给NVMe控制器,NVMe控制器可以根据PCIe地址访问该部分存储空间。以基地址寄存器(Base Address Register,BAR)进行举例说明,主机将BAR作为PCIe存储空间开放给NVMe控制器,并将BAR的一部分PCIe地址组织成多个入口(portal)的形式,每一个入口占据特定的NVMe控制器可寻址的PCIe地址空间,入口地址可以为入口的起始PCIe地址。主机触发的读指令中携带的指示信息可以用于指示具体入口,第一地址可以为入口地址或者入口地址的部分字段。入口即NVMe控制器向主机进行PCIe写操作的数据入口,在下面的描述中,会对入口的功能进行更详细的描述。本发明不限定PCIe地址空间里的入口的组织方式,只需要保证每个入口和具体的读操作唯一对应。
在本发明实施例中,主机可以将其基地址寄存器的一部分PCIe地址组织成通孔(aperture)的形式,每一个通孔中包含多个入口(portal),即入口的组织可以用数组的形式,通过数组基地址加入口偏移量寻址到入口,这个数组称为通孔。如图5所示,图5为基地址寄存器的结构示意图,每个通孔由一组入口P 0~P N组成,每个入口唯一地关联到具体的读操作。“唯一”是指主机在任一时刻只能发起一个NVMe读操作关联到一个特定的入口。
更具体的,如图6所示,在本发明实施例中,通孔可以分为元数据通孔和数据通孔。NVMe控制器通过PCIe写操作将数据通过数据通孔包含的入口DP 0~DP N写入到主机,将元数据通过元数据通孔包含的入口MP 0~MP N写入到主机。为了描述方便,在以下描述中,除非另有说明,本发明实施例将元数据和数据统称为数据。
图7为依据本发明一实施例的PCIe数据报文中的PCIe地址结构。如图7所示,PCIe地址结构中包含BAR的基地址、通孔偏移量以及入口偏移量。其中,BAR和通孔偏移量用于唯一的确定通孔,入口偏移量用于指示该通孔中具体的入口。
在本发明实施例中,入口还可以任意分布在PCIe地址空间,在PCIe空间中任意分布的入口称为任意的“数据入口”和“元数据入口”。
在本发明实施例中,指示信息用于指示具体的入口,NVMe控制器可以根据指示信息唯一的确定一个入口。本发明不限定指示信息的具体形式。
在本发明实施例中,该指示信息可以为显示地址,指示信息可以为入口具体的PCIe地址或者入口地址的部分字段,即该指示信息可以为第一地址或者第一地址的部分字段。例如,如果入口被组织成数组的形式,则指示信息可以为入口的入口偏移量,BAR的基地址和通孔偏移量可以作为主机的配置信息供NVMe控制器获取。NVMe控制器可以根据指示信息确定入口的完整PCIe地址。则在这种情况下,SQE的格式可以与NVMe标准规定的一致。
在本发明实施例中,该指示信息还可以为隐式地址,例如,如果一个SQ中的每个SQE有各自独特的命令标识CID,则指示信息可以由“队列ID+CID”组成。如果在NVMe控制器所处理的每个SQE的CID都是唯一的,则指示信息可以为对应SQE携带的CID。在其他实现方式中,指示信息还可以为CID的一部分。在本发明实施例中,指示信息还可以使用特别定义的MPTR或者PRT或者SQE中其他字段指定。本发明实施例不限定指示信息的具体实现方式。NVMe控制器可以维护有指示信息与入口地址的映射关系,并根据映射关系和指示信息唯一的确定入口地址。例如,指示标识为SQE的CID,而***CID的编码方式和入口偏移量的编址方式相同,CID与入口偏移量一一对应,BAR的基地址和通孔偏移量可以作为主机的配置信息供NVMe控制器获取,NVMe控制器可以根据指示信息与入口地址的映射关系确定数据报文的第一地址。
本发明实施例不限定指示信息的具体实现,只要NVMe控制器能够根据指示信息确定第一地址即可。第一地址用于指示与读操作对应的入口,具体为入口地址或者入口地址的部分字段。
步骤402:主机接收NVMe控制器发送的第一数据报文,其中,该第一数据报文中携带第一地址和第一载荷数据。
在本发明实施例中,数据报文可以为PCIe写操作报文,更具体的,数据报文可以是事务层包(transaction layer packet,TLP),载荷数据可以为TLP中携带的负荷(payload),该第一地址可以为TLP中的PCIe地址或者TLP中的PCIe地址的一部分。
NVMe控制器维护有指示信息与第一地址之间的映射关系。该第一地址可以具体为对读操作对应的入口地址,NVMe控制器获取到读指令后,根据指示信息的具体实现,确定该第一地址,并根据读指令从存储介质中读取数据,根据第一地址和读取的数据封装TLP,并将TLP发送至主机。
步骤403:主机根据第一地址确定主机可寻址的第二地址。
第一地址用于指示PCIe写操作的入口。NVMe控制器通过入口将读操作的数据写入主机,“入口”代表主机的PCIe地址空间中一个范围。当主机从入口收到NVMe控制器发送的数据报文后,解析该数据报文并获取第一地址,但是并不使用第一地址指示的存储空间存储该载荷数据,而是根据第一地址和预设的对应关系在其内部存储器中确定用于实际存储载荷数据的存储单元的第二地址。
第二地址指示的存储单元可以是主机内部的内存空间,不通过PCIe地址呈现出去。即主机用于存储载荷数据的内部存储器可以不再通过PCIe寻址的方式供主机访问,不是也不作为命令内存缓冲区(Command memory Buffer,CMB)。第二地址指示的存储单元可以充当数据的读缓冲区。
第一地址用于指示一个具体的“入口”,主机从入口接收到数据报文后,将第一地址映射到第二地址。具体的,主机可以通过内存映射表MTT将第一地址映射到第二地址。主机可以为每个入口维护一个MTT表项,每个表项可以将某一个入口关联到对应的存储单元,存储单元可以为固定大小的存储空间,在以下描述中,存储单元也称作为读页面。主机触发读指令前,就可以为读指令分配第二地址指示的存储单元,并通过MTT表项记录第一地址与第二地址的对应关系。
在本发明实施例中,入口与读操作一一对应,在一次读操作中,根据待读取数据的大小,读指令的待读取数据可以对应至少两个数据报文,主机也可以为读指令分配至少两个存储单元。
本发明不限定读页面大小,但是建议NVMe控制器的读内存块包含整数个读页面。NVMe控制器从存储介质读取到数据之后会放到纠错缓冲区进行校验纠错,然后将纠错后的数据写到“入口”,纠错缓冲区也称为读内存块。
在本发明实施例中,主机可以将自己的内存组织成读页面池的形式,在发起读操作之前,主机从读页面池中分配读操作所需数量的读页面,并初始化与该读操作对应的入口的MTT表项,该MTT表项记录有入口地址与读页面地址之间的对应关系。如图8所示,图8为依据本发明一实施例的MMT表项示意图,MTT表项中记录有入口与读页面的对应关系。如图所示,入口X对应的读页面为读页面1,读页面7和读页面4。入口Y对应的读页面为读页面2,读页面13,读页面8和读页面0。
在本发明实施例中,读页面是固定大小的存储空间。读页面的大小可能小于待读取数据的大小,所以读操作可能需要不止一个读页面。主机在进行分配时,可以给读指令分配至少两个读页面。如果主机可以给读操作分配多个读页面,而第二地址指向其中的一个读页面。主机可以根据第一地址和载荷数据在待读取数据中的顺序确定该第二地址。
本发明实施例不限定主机确定载荷数据在待读取数据中的顺序的方式,如果NVMe控制器在进行PCIe写操作时是保序的,主机可以根据接收数据报文的顺序确定载荷数据在待读取数据中的顺序。例如,NVMe控制器还向主机发送第二数据报文,第二数据报文中携带第一地址和第二载荷数据,第二载荷数据也属于待读取数据,主机还接收第二数据报文到第二数据报文后,可以根据接收第一数据报文和第二数据报文的顺序确定第一载荷数据和第二载荷数据在待读取数据中的顺序。如果NMVe控制器在进行PCIe写操作时是不保序的,则数据报文中还可以携带载荷数据在待读取数据中的偏移量,该偏移量用于指示载荷数据在待读取数据中的顺序。
在本发明实施例中,NVMe控制器可以采用保序或者不保序的方式对数据报文进行发送。例如,NVMe控制器可以支持下列任意一种或者同时支持两种顺序模式:
“严格”模式:
这种模式下,NVMe控制器根据数据偏移单调递增的顺序发送数据报文。主机根据数据报文的顺序接收载荷数据。在这一种模式下,不需要偏移量,即图7所示的入口宽度可以只为两个bit(标准规定)。
“宽松”模式:
这宽松模式下,NVMe控制器可以以任意顺序发送PCIe写事务,但数据报文中需要携带数据偏移量。本发明实施例中,NVMe控制器可以并行的处理读操作的逻辑块,即NVMe可以将不同逻辑块对应的数据从存储介质中读出,分别放在不同的读内存块中进行校验。因为不同的读内存块完成校验的时间不同,所以读内存块写入主机的顺序可能不是严格按照逻辑块的顺序进行写入的,第一个逻辑块对应的读内存块可能晚于最后一个逻辑块对应的读内存块写入目标内存。NVMe控制器根据事务报文中携带的数据偏移量重组数据。在这种模式下,数据报文中需要携带数据偏移量,即图7所示的入口宽度需要大于或者等于最大数据传输大小。
S404:主机将第一数据报文中的第一载荷数据写入第二地址指示的存储单元。
主机接收到NVMe控制器发送的数据报文,根据第一地址确定第二地址后,便将载荷数据写入第二地址指示的存储单元。
在本发明实施例中,主机完成对第二地址指示的存储单元的写操作后,就可以对该第二地址指示的存储单元中的数据进行操作,即可以消费该数据,例如,可以将数据发给其他实体等。在本发明实施例中,当与某一个读页面相关的数据完全被写入该读页面后,主机完成对该读页面的写操作,即与读页面相关的最后一个TLP中的数据写入该读页面后,主机完成对该读页面的写操作。
在本发明实施例中,一次读操作可以有多个读页面,主机在完成整个读操作之前,可以完成对某些读页面的写操作,主机完成对一个读页面的写操作后,就可以使用该读页面中的数据,不需要等待整个读操作完成。
如图9所示,待读取数据的大小为4*P_sz,其中,P_sz为读页面的大小,即存储空间的大小。读内存块的大小的大小为2*P_sz,即待读取数据需要两个读内存块进行数据的纠错校验。本发明实施例以数据报文为TLP进行举例说明,每个TLP的载荷数据的大小为0.5*P_sz,即每个读内存块的数据需要四个TLP进行发送。如图所示,NVMe控制器将待读取数据按顺序依次从存储介质读取至读内存块0和读内存块1进行校验。NVMe控制器可以并行的进行两个读内存块的数据校验,因为每个读内存块的校验速度不同,在本发明实施例中,读内存块1先于读内存块0校验完成,NVMe控制器首先按照顺序将读内存块1中的数据依次分装到TLP中,并通过PCIe网络发送至主机。如图所示,TLP 0和TLP 1中封装的数据为读内存块1的数据,随后读内存块0完成校验,NVMe控制器按照数据的顺序将读内存块0中的数据封装至TLP,并通过PCIe网络发送至主机。如图所述,TLP 2,TLP 4,TLP 6和TLP 7内封装的是读内存块0的数据。如图所示,本发明实施例中,主机接收到的数据包可以是乱序的,主机可以根据接收到的TLP中的数据偏移量来确定载荷数据在待读取数据中的顺序,并根据载荷数据在待读取数据中的顺序和指示信息查找MTT,从而确定存储载荷数据的读页面的地址,并将载荷数据写入对应的读页面。如图所示,主机将TLP0和TLP 1的载荷数据写入读页面8后,就完成了对读页面8的写操作,主机就可以对读页面8中的数据进行处理,同理,主机将TLP2和TLP 4的载荷数据写入读页面2后,就完成了对读页面2的写操作,就可以读读页面2中的数据进行处理。在本发明实施例中,主机对读页面中存储的数据进行处理具体为消费数据,例如发送给其他主体,而不必等到待读取数据完全写入后再可以对待读取数据进行操作。本发明实施例实现一种流水线的处理方式,减小了读操作的时延。
在本发明实施例中,主机完成对第二地址指示的存储单元的处理后,就可以释放该存储单元,以供其他的读操作使用。例如在图9实施例中,主机完成对读页面8中存储的数据的处理后,就可以将读页面8释放到读页面池,以供其他读操作使用,而不必等到整个读操作完成并对所有待读取数据的处理后,才可以释放释放读操作占用的存储空间,从而减少了存储空间的占用。
NVMe控制器完成读操作后,还用于触发完成队列条目CQE,CQE用于指示NVMe控制器完成了读指令指示的读操作,主机还用于获取完成队列条目CQE。本发明实施例中,主机可以在对第二地址指示的存储单元中的数据进行操作后,才获取CQE。
根据本发明实施例公开的技术方案,主机将第一地址作为数据入口地址开放给NVMe控制器,供NVMe控制器通过第一地址向主机写入待读取数据,NVMe控制器发送的数据报文中携带的目的地址为第一地址,但主机接收到数据报文后,并没有将数据报文中的载荷数据真正的写入第一地址指示的存储空间,而是将第一地址映射为第二地址,并将数据报文的载荷数据写入第二地址指示的存储空间。其中,第二地址指示的存储空间可以为主机的私有内存空间,从而割裂了存储载荷数据的存储空间与通信协议之间的关系,主机对第二地址的访问不受通信协议的限制。主机在读指令结束前,可以使用第二地址指示的存储空间中存储的数据,并提前释放第二地址指示的存储空间供其他读操作使用。本发明实施例公开的技术方案可以减少读操作的时延,并节省用于存储待读取数据的存储空间。
图1000为依据本发明一实施例的一种基于NVMe的读取方法的交互流程图。如图1000所示,方法1000的应用场景为数据源与命令源分离的场景。数据源需要将待读取数据通过命令源读取至其数据源的存储空间。本发明实施例不限定数据源与命令源分离的具体场景。
举例而言,在本发明实施例中,数据源和命令源分离的场景可以为基于NOF(英文全称:NVMe over fabric,缩写:NOF)的闪存簇(英文全称:Just a Bunch Of Flash,缩写:JBOF)。如图11(a)所示,数据源为需要访问存储介质的主机,命令源为与主机通过fabric互联的NOF桥,更具体的,命令源可以为NOF桥中的NOF引擎。NOF桥通过PCIe总线与NVMe控制器互联,NVMe连接有存储介质。
在本发明实施例中,数据源和命令源分离的场景还可以为主机与加密加速器,如图11(b)所示,数据源为主机,命令源为与主机互联的加密加速器,更具体的,命令源为加密加速器的加速引擎。加密加速器通过PCIe总线与NVMe控制器互联,NVMe控制器连接有存储介质。
在本发明实施例中,命令源在进行读操作的时候,会在SQE中携带待读取数据的入口地址的指示信息,入口地址本质上可以是一段NMVe控制器可选址的PCIe地址。NVMe控制器在获取到SQE后,会通过PCIe写操作向命令源发送TLP,并在TLP中携带该PCIe地址。命令源在接收到TLP包后,解析TLP包,获取该PCIe地址,并根据该PCIe地址与本地内存之间的映射关系,确定于该PCIe地址对应的本地存储单元,然后把TLP中的载荷数据写入到确定的存储单元中。一个入口可以对应多个存储单元,只要对存储单元的写操作结束,命令源就可以对该存储单元中存储的数据进行操作,对存储单元的写操作结束是指将与该存储单元对应的最后一个TLP的载荷数据写入该存储单元。命令源在获取到待读取数据的部分数据后,就可以向数据源发送获取到的数据,不需要等待整个读操作完全结束从可以向数据源发送待读取数据。如图10所示,待读取数据包含数据1,数据2,数据3和数据4,数据1,数据2,数据3和数据4可以分别对应一个存储单元,当命令源接收到一个存储单元的数据后,就可以将该存储单元的数据发送至数据源。命令源在将存储单元中的数据发送至数据源后,就可以释放对应的存储单元,以供其他读操作使用。
根据本发明实施例公开的技术方案,命令源通过建立本地内存与PCIe地址的映射关系,将接收到的TLP中的载荷数据写入自己的内存空间,从而可以实现对数据的流水线操作,即命令源接收到部分数据后,就可以向数据源发送接收到的数据,且接收NVMe控制器发送的数据和向数据源发送数据可以并行处理,从而节省了用于缓存数据的存储空间,且加快了读操作的处理速度。
图12为依据本申请一实施例的一种计算设备1200的逻辑结构示意图,如图12所示,计算设备1200包括:
处理单元1202,用于向NVMe控制器触发读指令,读指令中携带指示信息,指示信息用于指示第一地址,第一地址为NVMe控制器可寻址的地址。
接收单元1204,用于接收NVMe控制器发送的第一数据报文,第一数据报文中携带第一地址和第一载荷数据。
处理单元1202根据第一地址确定第二地址,并将第一载荷数据写入第二地址指示的存储单元,第二地址为处理单元1202可寻址的地址。
可选的,处理单元1202完成对第二地址指示的存储单元的写操作后,还用于对第二地址指示的存储单元中的数据进行操作。
处理单元1202对第二地址指示的存储单元中的数据进行操作后,还用于获取NVMe控制器触发的完成队列条目CQE,CQE用于指示NVMe控制器完成读指令指示的读操作。
处理单元1202对第二地址指示的存储单元中的数据进行操作后,还用于释放第二地址指示的存储单元。
处理单元1202触发读指令前,还用于为读指令分配第二地址指示的存储单元,并记录第一地址与第二地址的对应关系。
可选的,读指令的待读取数据对应至少两个数据报文,处理单元1202为读指令分配至少两个存储单元。
处理单元1202可以根据第一地址和第一载荷数据在待读取数据中的顺序确定第二地址。
可选的,接收单元1204还用于接收NVMe控制器发送的第二数据报文,第二数据报文中携带第一地址和第二载荷数据;处理单元1202还用于根据接收第一数据报文和第二数据报文的顺序确定第一载荷数据和第二载荷数据在待读取数据中的顺序。
可选的,第一数据报文中还携带第一载荷数据在待读取数据中的偏移量,偏移量用于指示第一载荷数据在待读取数据中的顺序。
在本发明实施例中,第一地址可以为NVMe控制器可寻址的PCIe地址,第一数据报文为PCIe报文;第二地址指示的存储单元可以为计算设备的内存空间。
在本申请实施例中,处理单元1202可以具体由图3中的处理器301中的读操作逻辑310来实现,或者由图3中的处理器301和***内存302中的读操作模块306来实现。接收单元1204可以由图3实施例中的处理器301和通信接口303来实现。
本申请实施例为以上实施例对应的主机的的装置实施例,以上实施例部分的特征描述适用于本申请实施例,在此不再赘述。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者替换其中部分技术特征;而这些修改或者替换,并不使相应技术方案脱离权利要求的保护范围。

Claims (32)

1.一种基于NVMe的数据读取***,其特征在于,所述***包括主机、NVMe控制器和存储介质;
所述存储介质用于存储数据;
所述主机用于触发读指令,所述读指令中携带指示信息,所述指示信息用于指示第一地址,所述第一地址为NVMe控制器可寻址的地址;
所述NVMe控制器用于获取所述读指令,从所述存储介质中读取所述读指令对应的待读取数据,并向所述主机发送第一数据报文,所述第一数据报文中携带所述第一地址和第一载荷数据,所述待读取数据包含所述第一载荷数据;
所述主机还用于接收所述第一数据报文,根据所述第一地址确定第二地址,并将所述第一载荷数据写入所述第二地址指示的存储单元,所述第二地址为所述主机可寻址的地址。
2.根据权利要求1所述的***,其特征在于,所述主机完成对所述第二地址指示的存储单元的写操作后,还用于对所述第二地址指示的存储单元中的数据进行操作。
3.根据权利要求2所述的***,其特征在于,所述NVMe控制器还用于触发完成队列条目CQE,所述CQE用于指示所述NVMe控制器完成所述读指令指示的读操作;
所述主机对所述第二地址指示的存储单元中的数据进行操作后,还用于获取所述完成队列条目CQE。
4.根据权利要求2或3所述的***,其特征在于,所述主机对所述第二地址指示的存储单元中的数据进行操作后,还用于释放所述第二地址指示的存储单元。
5.根据权利要求1所述的***,其特征在于,所述主机触发所述读指令前,还用于为所述读指令分配所述第二地址指示的存储单元,并记录所述第一地址与所述第二地址的对应关系。
6.根据权利要求5所述的***,其特征在于,所述读指令的待读取数据对应至少两个数据报文,所述主机为所述读指令分配至少两个存储单元。
7.根据权利要求1所述的***,其特征在于,所述主机用于根据所述第一地址和所述第一载荷数据在所述待读取数据中的顺序确定所述第二地址。
8.根据权利要求7所述的***,其特征在于,所述NVMe控制器还用于向所述主机发送第二数据报文,所述第二数据报文中携带所述第一地址和第二载荷数据,所述待读取数据包含所述第二载荷数据;
所述主机还用于接收所述第二数据报文,并根据接收所述第一数据报文和所述第二数据报文的顺序确定所述第一载荷数据和所述第二载荷数据在所述待读取数据中的顺序。
9.根据权利要求7所述的***,其特征在于,所述第一数据报文中还携带所述第一载荷数据在所述待读取数据中的偏移量,所述偏移量用于指示所述第一载荷数据在所述待读取数据中的顺序。
10.根据权利要求1所述的***,其特征在于,所述第一地址为所述NVMe控制器可寻址的PCIe地址,所述第一数据报文为PCIe报文;所述第二地址指示的存储单元为所述主机的内存空间。
11.一种基于NVMe的数据读取方法,其特征在于,所述方法包括:
主机触发读指令,所述读指令中携带指示信息,所述指示信息用于指示第一地址,所述第一地址为NVMe控制器可寻址的地址;
所述主机接收所述NVMe控制器发送的第一数据报文,所述第一数据报文中携带所述第一地址和第一载荷数据;
所述主机根据所述第一地址确定第二地址,所述第二地址为所述主机可寻址的地址;
所述主机将所述第一载荷数据写入所述第二地址指示的存储单元。
12.根据权利要求11所述的方法,其特征在于,所述主机完成对所述第二地址指示的存储单元的写操作后,所述方法还包括:
所述主机对所述第二地址指示的存储单元中的数据进行操作。
13.根据权利要求12所述的方法,其特征在于,所述主机对所述第二地址指示的存储单元中的数据进行操作后,所述方法还包括:
所述主机获取所述NVMe控制器触发的完成队列条目CQE,所述CQE用于指示所述NVMe控制器完成所述读指令指示的读操作。
14.根据权利要求12或13所述的方法,其特征在于,所述主机对所述第二地址指示的存储单元中的数据进行操作后,所述方法还包括:
所述主机释放所述第二地址指示的存储单元。
15.根据权利要求11所述的方法,其特征在于,所述主机触发所述读指令前,所述方法还包括:
所述主机为所述读指令分配所述第二地址指示的存储单元,并记录所述第一地址与所述第二地址的对应关系。
16.根据权利要求15所述的方法,其特征在于,所述读指令的待读取数据对应至少两个数据报文,所述主机为所述读指令分配至少两个存储单元。
17.根据权利要求11所述的方法,其特征在于,所述主机根据所述第一地址和所述第一载荷数据在待读取数据中的顺序确定所述第二地址。
18.根据权利要求17所述的方法,其特征在于,所述方法还包括:
所述主机接收所述NVMe控制器发送的第二数据报文,所述第二数据报文中携带所述第一地址和第二载荷数据;
所述主机根据接收所述第一数据报文和所述第二数据报文的顺序确定所述第一载荷数据和所述第二载荷数据在所述待读取数据中的顺序。
19.根据权利要求17所述的方法,其特征在于,所述第一数据报文中还携带所述第一载荷数据在所述待读取数据中的偏移量,所述偏移量用于指示所述第一载荷数据在所述待读取数据中的顺序。
20.根据权利要求11所述的方法,其特征在于,所述第一地址为所述NVMe控制器可寻址的PCIe地址,所述第一数据报文为PCIe报文;所述第二地址指示的存储单元为所述主机的内存空间。
21.一种基于NVMe的数据读取装置,其特征在于,所述装置包括:
处理单元,用于触发读指令,所述读指令中携带指示信息,所述指示信息用于指示第一地址,所述第一地址为NVMe控制器可寻址的地址;
接收单元,用于接收所述NVMe控制器发送的第一数据报文,所述第一数据报文中携带所述第一地址和第一载荷数据;
所述处理单元还用于根据所述第一地址确定第二地址,并将所述第一载荷数据写入所述第二地址指示的存储单元,所述第二地址为所述处理单元可寻址的地址。
22.根据权利要求21所述的装置,其特征在于,所述处理单元完成对所述第二地址指示的存储单元的写操作后,还用于对所述第二地址指示的存储单元中的数据进行操作。
23.根据权利要求22所述的装置,其特征在于,所述处理单元对所述第二地址指示的存储单元中的数据进行操作后,还用于获取所述NVMe控制器触发的完成队列条目CQE,所述CQE用于指示所述NVMe控制器完成所述读指令指示的读操作。
24.根据权利要求22或23所述的装置,其特征在于,所述处理单元对所述第二地址指示的存储单元中的数据进行操作后,还用于释放所述第二地址指示的存储单元。
25.根据权利要求21所述的装置,其特征在于,所述处理单元触发所述读指令前,还用于为所述读指令分配所述第二地址指示的存储单元,并记录所述第一地址与所述第二地址的对应关系。
26.根据权利要求25所述的装置,其特征在于,所述读指令的待读取数据对应至少两个数据报文,所述处理单元为所述读指令分配至少两个存储单元。
27.根据权利要求21所述的装置,其特征在于,所述处理单元用于根据所述第一地址和所述第一载荷数据在待读取数据中的顺序确定所述第二地址。
28.根据权利要求27所述的装置,其特征在于,所述接收单元还用于接收所述NVMe控制器发送的第二数据报文,所述第二数据报文中携带所述第一地址和第二载荷数据;
所述处理单元还用于根据接收所述第一数据报文和所述第二数据报文的顺序确定所述第一载荷数据和所述第二载荷数据在所述待读取数据中的顺序。
29.根据权利要求27所述的装置,其特征在于,所述第一数据报文中还携带所述第一载荷数据在所述待读取数据中的偏移量,所述偏移量用于指示所述第一载荷数据在所述待读取数据中的顺序。
30.根据权利要求21所述的装置,其特征在于,所述第一地址为所述NVMe控制器可寻址的PCIe地址,所述第一数据报文为PCIe报文;所述第二地址指示的存储单元为所述装置的内存空间。
31.一种可读介质,其特征在于,包括执行指令,当计算设备的处理器执行所述执行指令时,所述计算设备执行权利要求11-20任一项所述的方法。
32.一种计算设备,其特征在于,包括:处理器、存储器和总线;
所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述计算设备执行权利要求11-20任一项所述的方法。
CN201880005007.9A 2018-06-30 2018-06-30 一种基于NVMe的数据读取方法、装置及*** Active CN111095231B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2018/093918 WO2020000482A1 (zh) 2018-06-30 2018-06-30 一种基于NVMe的数据读取方法、装置及***

Publications (2)

Publication Number Publication Date
CN111095231A CN111095231A (zh) 2020-05-01
CN111095231B true CN111095231B (zh) 2021-08-03

Family

ID=68984388

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880005007.9A Active CN111095231B (zh) 2018-06-30 2018-06-30 一种基于NVMe的数据读取方法、装置及***

Country Status (6)

Country Link
US (1) US11467764B2 (zh)
EP (1) EP3792776B1 (zh)
JP (1) JP7191967B2 (zh)
KR (1) KR102471219B1 (zh)
CN (1) CN111095231B (zh)
WO (1) WO2020000482A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111752484B (zh) * 2020-06-08 2024-04-12 深圳大普微电子科技有限公司 一种ssd控制器、固态硬盘及数据写入方法
CN111831226B (zh) * 2020-07-07 2023-09-29 山东华芯半导体有限公司 一种自主输出nvme协议命令加速处理方法
CN113296691B (zh) * 2020-07-27 2024-05-03 阿里巴巴集团控股有限公司 数据处理***、方法、装置以及电子设备
JP7496280B2 (ja) 2020-10-07 2024-06-06 株式会社竹中工務店 関数同定方法
CN112527705B (zh) * 2020-11-05 2023-02-28 山东云海国创云计算装备产业创新中心有限公司 一种PCIe DMA数据通路的验证方法、装置及设备
CN113031862B (zh) * 2021-03-18 2024-03-22 中国电子科技集团公司第五十二研究所 一种基于nvme协议控制sata盘的存储***
CN114996172B (zh) * 2022-08-01 2022-11-01 北京得瑞领新科技有限公司 基于ssd访问主机内存的方法及***

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130086311A1 (en) 2007-12-10 2013-04-04 Ming Huang METHOD OF DIRECT CONNECTING AHCI OR NVMe BASED SSD SYSTEM TO COMPUTER SYSTEM MEMORY BUS
WO2011160094A2 (en) * 2010-06-18 2011-12-22 Sandforce, Inc. Scalable storage devices
US8966172B2 (en) * 2011-11-15 2015-02-24 Pavilion Data Systems, Inc. Processor agnostic data storage in a PCIE based shared storage enviroment
BR112014017543A2 (pt) * 2012-01-17 2017-06-27 Intel Corp técnicas de validação de comando para o acesso a um dispositivo de armazenamento por um cliente remoto
US20140195634A1 (en) * 2013-01-10 2014-07-10 Broadcom Corporation System and Method for Multiservice Input/Output
US9256384B2 (en) * 2013-02-04 2016-02-09 Avago Technologies General Ip (Singapore) Pte. Ltd. Method and system for reducing write latency in a data storage system by using a command-push model
US9424219B2 (en) * 2013-03-12 2016-08-23 Avago Technologies General Ip (Singapore) Pte. Ltd. Direct routing between address spaces through a nontransparent peripheral component interconnect express bridge
US9727503B2 (en) 2014-03-17 2017-08-08 Mellanox Technologies, Ltd. Storage system and server
US20160124876A1 (en) * 2014-08-22 2016-05-05 HGST Netherlands B.V. Methods and systems for noticing completion of read requests in solid state drives
US9565269B2 (en) * 2014-11-04 2017-02-07 Pavilion Data Systems, Inc. Non-volatile memory express over ethernet
US9712619B2 (en) * 2014-11-04 2017-07-18 Pavilion Data Systems, Inc. Virtual non-volatile memory express drive
US9575853B2 (en) 2014-12-12 2017-02-21 Intel Corporation Accelerated data recovery in a storage system
CN106484549B (zh) 2015-08-31 2019-05-10 华为技术有限公司 一种交互方法、NVMe设备、HOST及物理机***
WO2017113960A1 (zh) 2015-12-28 2017-07-06 华为技术有限公司 一种数据处理方法以及NVMe存储器
US9921756B2 (en) * 2015-12-29 2018-03-20 EMC IP Holding Company LLC Method and system for synchronizing an index of data blocks stored in a storage system using a shared storage module
EP4202705A1 (en) * 2016-04-04 2023-06-28 Marvell Asia Pte, Ltd. Methods and systems for accessing host memory through non-volatile memory over fabric bridging with direct target access
CN106210041B (zh) 2016-07-05 2019-09-20 杭州华为数字技术有限公司 一种数据写入方法及服务器端网卡
US10445018B2 (en) * 2016-09-09 2019-10-15 Toshiba Memory Corporation Switch and memory device
CN107832086B (zh) * 2016-09-14 2020-03-20 华为技术有限公司 计算机设备、程序写入方法及程序读取方法
CN107992436B (zh) * 2016-10-26 2021-04-09 华为技术有限公司 一种NVMe数据读写方法及NVMe设备
WO2018102969A1 (zh) 2016-12-05 2018-06-14 华为技术有限公司 NVMe over Fabric架构中数据读写命令的控制方法、设备和***
EP3605951A1 (en) * 2016-12-27 2020-02-05 Chicago Mercantile Exchange, Inc. Message processing protocol which mitigates manipulative messaging behavior
US10387081B2 (en) * 2017-03-24 2019-08-20 Western Digital Technologies, Inc. System and method for processing and arbitrating submission and completion queues
US10503434B2 (en) 2017-04-12 2019-12-10 Micron Technology, Inc. Scalable low-latency storage interface
CN107608909A (zh) 2017-09-19 2018-01-19 记忆科技(深圳)有限公司 一种NVMe固态硬盘写加速的方法
JP6901427B2 (ja) * 2018-03-27 2021-07-14 キオクシア株式会社 ストレージ装置、コンピュータシステムおよびストレージ装置の動作方法

Also Published As

Publication number Publication date
US11467764B2 (en) 2022-10-11
JP2021515318A (ja) 2021-06-17
WO2020000482A1 (zh) 2020-01-02
KR20200101982A (ko) 2020-08-28
EP3792776A4 (en) 2021-06-09
JP7191967B2 (ja) 2022-12-19
CN111095231A (zh) 2020-05-01
EP3792776B1 (en) 2022-10-26
KR102471219B1 (ko) 2022-11-25
US20210034284A1 (en) 2021-02-04
EP3792776A1 (en) 2021-03-17

Similar Documents

Publication Publication Date Title
CN111095231B (zh) 一种基于NVMe的数据读取方法、装置及***
CN109085997B (zh) 用于非易失性存储器的存储器高效持续键值储存
US10956336B2 (en) Efficient silent data transmission between computer servers
US20190163364A1 (en) System and method for tcp offload for nvme over tcp-ip
EP2849076B1 (en) Dma transmission method and system
WO2018102967A1 (zh) NVMe over Fabric架构中数据读写命令的控制方法、存储设备和***
EP2849077B1 (en) Method for writing data into storage device and storage device
US10339079B2 (en) System and method of interleaving data retrieved from first and second buffers
KR101560469B1 (ko) 메모리 시스템 컨트롤러들을 포함하는 장치 및 관련 방법들
JP5918359B2 (ja) メモリシステムコントローラを含む装置および関連する方法
US11579803B2 (en) NVMe-based data writing method, apparatus, and system
US8516170B2 (en) Control flow in a ring buffer
KR20150050457A (ko) 하이브리드 디바이스에서의 고체 상태 메모리 커맨드 큐
WO2020087930A1 (zh) 一种数据保护方法、装置及***
WO2020087931A1 (zh) 一种数据备份方法、装置及***
EP1631911B1 (en) Method and device for transferring data between a main memory and a storage device
TWI820951B (zh) 藉助於預定命令來進行記憶體裝置的資料存取控制的方法及設備
CN114327248A (zh) 存储节点、存储设备及网络芯片
CN111045961B (zh) 数据处理方法及使用所述方法的存储控制器
KR20140113370A (ko) 패스 스루 스토리지 디바이스들
CN114741342A (zh) 一种映射关系更新的方法以及相关装置
CN116964565A (zh) 数据处理方法及相关设备
JPH07271517A (ja) 情報処理装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant