CN116540952B - 磁盘访问方法及装置、存储介质、电子设备 - Google Patents

磁盘访问方法及装置、存储介质、电子设备 Download PDF

Info

Publication number
CN116540952B
CN116540952B CN202310823999.9A CN202310823999A CN116540952B CN 116540952 B CN116540952 B CN 116540952B CN 202310823999 A CN202310823999 A CN 202310823999A CN 116540952 B CN116540952 B CN 116540952B
Authority
CN
China
Prior art keywords
ith
queue
controller
disk
command
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
CN202310823999.9A
Other languages
English (en)
Other versions
CN116540952A (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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202310823999.9A priority Critical patent/CN116540952B/zh
Publication of CN116540952A publication Critical patent/CN116540952A/zh
Application granted granted Critical
Publication of CN116540952B publication Critical patent/CN116540952B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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
    • 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/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种磁盘访问方法及装置、存储介质、电子设备,其中,该方法包括:在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M‑1个虚拟功能VF,其中,N类磁盘的数据读写速度位于不同的等级,N为大于1的正整数,M大于或等于2、且M小于或等于N的正整数;建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,M个控制器包括:Raid控制器的物理功能PF对应的控制器以及M‑1个VF对应的M‑1个控制器;通过第i个IO队列向第i个控制器发送IO命令,以指示第i个控制器对第i类磁盘进行IO操作,第i个IO队列是主机与M个控制器中的第i个控制器之间的IO队列。

Description

磁盘访问方法及装置、存储介质、电子设备
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种磁盘访问方法及装置、存储介质、电子设备。
背景技术
随着科技时代的发展,业务数据量的与日俱增,当单台服务器上单个物理磁盘在容量和安全性上不足以支撑系统业务时,就需要将多个磁盘以某种特定方式组合起来使用,以提高容量及安全性。存储技术的飞跃发展,其中,磁盘阵列(Redundant Array ofIndependent Disks,检测为RAID)技术就是其重要技术之一,它的发展主要经历了RAID0、RAID1、RAID10、RAID5、RAID6、RAIDTP等级别,而Raid控制器,就是将服务器连接的磁盘按照RAID级别组织成RAID阵列,并对主机呈现某一特定协议的一种设备。
根据快速非易失性存储(Non-Volatile Memory Express,简称为NVMe)协议定义,主机和基于NVMe协议的Raid控制器进行通信,必须通过位于主机内存的指令队列完成。主机需要将Raid控制器执行的指令放入提交队列(Submission Queue,简称为SQ)中,然后通知Raid控制器读取指令,Raid控制器通过高速外围组件互联(Peripheral ComponentInterconnect express,简称为PCIe)消息从主机内存的SQ队列中读取指令,并在Raid控制器内部执行该指令,最后将执行完成的指令结果通过PCIe消息放入对应的完成队列(Completion Queue,简称为CQ)中,完成一次输入输出(Input/Output,简称为IO)交互。当Raid控制器与服务器背板连接的多块磁盘中同时包含串行先进技术附接(SerialAdvanced Technology Attachment,简称为SATA)盘和NVMe盘时,由于SATA盘的速度太慢,SATA I/O命令可能将主机内存的SQ队列填满,导致主机无法下发NVMe I/O命令,或者,在Raid控制器内部,SATA I/O占用了过多系统资源,甚至将系统资源耗尽,导致NVMe I/O性能受到影响,最终将NVMe的性能拉低到和SATA一致。虽然这种使用场景存在明显的性能拉低问题,但由于NVMe盘价格相对较高,在当前存储领域发展的大环境下,SATA盘虽然性能差一些,但还是存在很大的市场份额,大多数企业考虑到成本等因素,暂时无法将SATA盘完全替换成NVMe盘。目前通常的做法是,将NVMe盘组成的RAID阵列应用于需要高速响应IO的场景,将SATA盘组成的RAID阵列应用于需要大容量保存数据的场景,因此SATA和NVMe共存的Raid控制器是一个广泛应用的场景。
图1是现有主机通过Raid控制器访问SATA盘和NVMe盘的示意图,如图1所示,Raid控制器与主机通过PCIe总线连接,并采用NVMe协议进行交互,Raid控制器对下连接多块SATA盘和NVMe盘。Raid控制器内部实现NVMe Controller功能,NVMe指令队列在主机内存创建,通过PCIe Bar空间映射寄存器以及队列信息。Raid控制器内部将对下连接的磁盘,按照不同介质组成2个RAID阵列,然后在2个RAID阵列上各自创建2个命名空间Namespace,最后通过NVMe Controller将4个Namespace(NS 0~3)映射给主机作为块设备进行IO读写。从图1可以看出,不同介质的磁盘组成不同的RAID阵列及Namespace,在主机内存都是通过同一组指令队列进行交互,由于SATA盘的性能远低于NVMe盘的性能,因此就会出现IO指令队列中的命令被SATA盘过多占用甚至占满的情况,从而出现NVMe盘命令响应延时甚至超时的风险,以至于将NVMe盘的性能拉低到和SATA盘一致,产生该问题的根本原因在于:
(1)NVMe协议是为以Flash为存储介质的固态磁盘(Solid State Drive,简称为SSD)设计的,设计目标是满足高性能——高带宽和高每秒的输入输出量(Input/OutputPer Second,简称为IOPS),而SATA盘在性能上明显劣于NVMe盘,根据以往数据,这两者在IOPS性能上可以相差4个数量级。
(2)NVMe协议规定,虽然系统可以支持最多64K对IO SQ/CQ,并且每个队列的深度可以高达64K,但是,IO SQ不与Namespace绑定,因此不同介质磁盘组成的Namespace的I/O请求可以提交到任何IO SQ/CQ。
也就是说,当Raid控制器与服务器连接的物理盘出现NVMe盘和SATA盘共存的情况时,主机IO的性能必然会导致将NVMe性能拉低到和SATA一致。
针对相关技术中,使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,目前尚未提出有效的解决方案。
因此,有必要对相关技术予以改良以克服相关技术中的所述缺陷。
发明内容
本申请实施例提供了一种磁盘访问方法及装置、存储介质、电子设备,以至少解决使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题。
根据本申请的一个实施例,提供了一种磁盘访问方法,包括:在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能VF,其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及所述M-1个VF对应的M-1个控制器;通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
在一个示例性的实施例中,通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:获取第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系;响应于所述第i个配置信息,在所述第i个控制器与所述第i类磁盘之间建立所述IO操作关系,其中,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;所述通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在一个示例性的实施例中,所述将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,包括:在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,并在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,所述通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
在一个示例性的实施例中,将所述第i个配置信息发送至所述第i个控制器之后,所述方法还包括:获取所述第i个控制器发送的第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;向所述第i个控制器发送获取指令;获取所述第i个控制器响应于所述获取指令所发送的所述第i组命名空间中的各个命名空间的标识;在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系,或者,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系。
在一个示例性的实施例中,在通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系、且所述IO命令中携带所述第i组命名空间中的一个命名空间的标识的情况下,将所述IO命令添加到所述第i个IO队列中;或者获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系、且所述IO命令中携带所述第i个控制器的标识的情况下,将所述IO命令添加到所述第i个IO队列中。
在一个示例性的实施例中,建立主机与M个控制器中每个控制器之间的IO队列,包括:通过以下方式建立主机与所述M个控制器中的第i个控制器之间的第i个IO队列:从所述第i个控制器对应的配置空间能力寄存器中获取所述第i个控制器支持的IO队列的深度和单个IO命令的大小;根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列;将所述第i个IO队列的地址写入所述第i个控制器对应的配置空间控制寄存器中。
在一个示例性的实施例中,根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列之后,所述方法还包括:初始化与所述第i个IO队列对应的队头寄存器和队尾寄存器的值;其中,所述第i个IO队列对应的队头寄存器的值为所述第i个IO队列的队头索引,所述第i个IO队列对应的队尾寄存器的值为所述第i个IO队列的队尾索引。
在一个示例性的实施例中,通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:将所述IO命令放入第i个SQ队列,其中,所述第i个IO队列包括所述第i个SQ队列;通过第i个IO队列向第i个控制器发送IO命令,包括:通过所述第i个SQ队列向所述第i个控制器发送IO命令。
在一个示例性的实施例中,将所述IO命令放入第i个SQ队列之后,所述方法还包括:更新所述第i个SQ队列对应的队尾寄存器的值,其中,所述第i个SQ队列对应的队尾寄存器的值为所述第i个SQ队列的队尾索引。
在一个示例性的实施例中,通过第i个IO队列向第i个控制器发送IO命令之后,所述方法还包括:从第i个CQ队列中获取所述IO命令对应的IO操作结果,其中,所述第i个控制器在执行所述IO命令之后,将所述IO操作结果放入所述第i个CQ队列中,所述第i个IO队列包括所述第i个CQ队列。
在一个示例性的实施例中,从第i个CQ队列中获取所述IO命令对应的IO操作结果之后,所述方法还包括:更新所述第i个CQ队列对应的队头寄存器的值,其中,所述第i个CQ队列对应的队头寄存器的值为所述第i个CQ队列的队头索引。
在一个示例性的实施例中,在所述N等于2时,N类磁盘包括:串行先进技术附接SATA磁盘,快速非易失性存储NVME磁盘。
根据本申请的另一个实施例,提供了一种磁盘访问方法,包括:在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
在一个示例性的实施例中,确定M个控制器中每个控制器与主机之间的输入输出IO队列,包括:通过以下方式确定第i个控制器与所述主机之间的第i个IO队列:从所述第i个控制器对应的配置空间控制寄存器中获取所述第i个IO队列的地址,以确定所述第i个IO队列。
在一个示例性的实施例中,确定N个控制器中每个控制器与主机之间的输入输出IO队列之前或之后,所述方法还包括:获取所述主机发送的第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;通过所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;通过所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在一个示例性的实施例中,将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列之后,所述方法还包括:在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,通过所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
在一个示例性的实施例中,在所述第i个磁盘阵列上创建第i组命名空间之后,所述方法还包括:向所述主机发送第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;响应于所述主机基于所述第i个事件信息所发送的获取指令,向所述主机发送所述第i组命名空间中的各个命名空间的标识。
在一个示例性的实施例中,所述第i个控制器通过第i个SQ队列获取到IO命令,其中,所述第i个IO队列包括所述第i个SQ队列。
在一个示例性的实施例中,所述方法还包括:在所述第i个控制器通过第i个SQ队列获取到IO命令之后,通过所述第i个控制器更新所述第i个SQ队列对应的队头寄存器的值,其中,所述第i个SQ队列对应的队头寄存器的值为所述第i个SQ队列的队头索引。
在一个示例性的实施例中,通过所述第i个控制器对第i类磁盘进行IO操作之后,所述方法还包括:通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列,其中,所述第i个IO队列包括所述第i个CQ队列。
在一个示例性的实施例中,通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列之后,所述方法还包括:通过所述第i个控制器更新所述第i个CQ队列对应的队尾寄存器的值,其中,所述第i个CQ队列对应的队尾寄存器的值为所述第i个CQ队列的队尾索引。
在一个示例性的实施例中,在N等于2时,所述N类磁盘包括:SATA磁盘,NVME磁盘。
根据本申请的又一个实施例,还提供了一种磁盘访问装置,包括:第一创建模块,用于在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能VF,其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;建立模块,用于建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及所述M-1个VF对应的M-1个控制器;访问模块,用于通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
根据本申请的又一个实施例,还提供了一种磁盘访问装置,包括:第二创建模块,用于在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;确定模块,用于确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;操作模块,用于在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,在与服务器连接的磁盘中包括N类不同数据读写速度的磁盘的情况下,为磁盘阵列RAID控制器创建M-1个虚拟功能VF,进而主机分别建立与M个控制器(包括RAID控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器)中每个控制器之间的输入输出IO队列,并通过第i个IO队列向第i个控制器发送IO命令,指示第i个控制器对第i类磁盘进行IO操作。在本申请中,使用M个IO队列访问N类不同数据读写速度的磁盘,解决了使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,达到了提高了多类磁盘的性能体现度的技术效果。
附图说明
图1是现有主机通过Raid控制器访问SATA盘和NVMe盘的示意图;
图2是本申请实施例的一种磁盘访问方法的移动终端的硬件结构框图;
图3是根据本申请实施例的一种磁盘访问方法的流程图;
图4是根据本申请实施例的另一种磁盘访问方法的流程图;
图5是根据本申请实施例的主机通过Raid控制器访问SATA盘和NVMe盘的示意图;
图6是根据本申请实施例的主机侧执行步骤的流程图;
图7是根据本申请实施例的Raid控制器执行步骤的流程图;
图8是根据本申请实施例的一种磁盘访问装置的结构框图;
图9是根据本申请实施例的另一种磁盘访问装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图2是本申请实施例的一种磁盘访问方法的移动终端的硬件结构框图。如图2所示,移动终端可以包括一个或多个(图2中仅示出一个)处理器202(处理器202可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器204,其中,上述移动终端还可以包括用于通信功能的传输设备206以及输入输出设备208。本领域普通技术人员可以理解,图2所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。
存储器204可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的磁盘访问方法对应的计算机程序,处理器202通过运行存储在存储器204内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器204可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器204可进一步包括相对于处理器202远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备206用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备206包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备206可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于上述移动终端的方法,图3是根据本申请实施例的一种磁盘访问方法的流程图,如图3所示,该流程包括如下步骤:
步骤S302,在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能(Virtual Functions,简称为VF),其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
需要说明的是,Raid控制器与主机通过PCIe总线连接,并采用NVMe协议进行交互,Raid控制器可以将连接的一个类型的磁盘组成RAID,即将独立的磁盘组成的具有冗余性的阵列,由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。
作为一种可选的示例,在所述N等于2时,N类磁盘包括:SATA磁盘,NVME磁盘。
需要说明的是,一个PF或者VF在Raid控制器中对应一个控制器,此控制器在Raid控制器内部实现NVMe Controller功能,而Raid控制器本身就具备物理功能(PhysicalFunctions,简称为PF)。
以下对PF和VF进行具体说明:
PF:即物理功能,这是完整的带有单根IO虚拟化(Single Root I/OVirtualization and Sharing,简称为SR-IOV)能力的PCIe设备,PF 能像普通 PCI 设备那样被发现、管理和配置,PF有独立的配置空间和BAR空间,可以用于配置或控制PCIe设备。
VF:即虚拟功能,这是简单的PCIe功能,它只能处理I/O,每个 VF都是从PF中分离出来的,每个物理硬件都有一个VF数目的限制,一个PF,能被虚拟成多个 VF用于分配给多个系统映像。VF仅允许拥有用于其自身行为的配置资源,因此VF只有独立的BAR空间,因为所有的PF和VF共用一个物理的PCIe端口,通过Routing决定数据流的方向,所以PF和各VF的数据带宽总和不超过实际物理的PCIe端口的带宽。
需要说明的是,主机在获取目标对象为磁盘阵列Raid控制器创建M-1个VF的请求信息以后,才为磁盘阵列Raid控制器创建M-1个VF,可选的目标对象可以通过命令行LSPCI查看Raid控制器的SR-IOV能力,并通过写PCIe设备文件创建VF。目标对象包括:使用主机的用户。
在一个示例性的实施例中,可以确定N类磁盘的访问频率,并从N类磁盘中确定访问频率大于预设阈值的K类磁盘,进而为创建为磁盘阵列Raid控制器创建K个VF, 并在K个VF对应的K个控制器中的第j个控制器与K类磁盘中的第j类磁盘之间建立所述IO操作关系(即允许所述第j个控制器对所述第j类磁盘进行IO操作)。此外,对应N类磁盘中除K类磁盘之外的磁盘,可以再额外从M个控制器中选择一个或多个控制器与其之间建立IO操作关系。可选的,可以建立PF对应的控制器与N类磁盘中除K类磁盘之外的磁盘的IO操作关系(即允许PF对应的控制器对N类磁盘中除K类磁盘之外的磁盘进行IO操作)。
步骤S304,建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;
需要说明的是,每个IO队列包括:SQ队列和CQ队列,其中,SQ队列即提交队列,是NVMe协议中规定的,主机侧用来存放提交命令的队列,一般在主机内存中创建,通过PCIeBar空间映射的NVMe相关寄存器告知设备该队列的地址,从而在主机端和设备端进行命令的交互。
CQ队列即完成队列,是NVMe协议中规定的,设备侧用来存放命令完成结果的队列,一般在主机内存中创建,通过PCIe Bar空间映射的NVMe相关寄存器告知设备该队列的地址,从而在主机端和设备端进行命令的交互。
步骤S306,通过第i个IO队列向第i个控制器发送IO命令,并指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
需要说明的是,上述步骤S302-S306的执行主体为主机。
通过上述步骤S302-S306,使用M个IO队列访问N类不同数据读写速度的磁盘,解决了使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,达到了提高了多类磁盘的性能体现度的技术效果。
在一个示例性的实施例中,在M等于N的情况下,可以从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,达到了多类磁盘可以充分发挥各自的性能的技术效果。
在一个示例性的实施例中,在通过第i个IO队列向第i个控制器发送IO命令之前,还具有以下步骤S11-S12:
步骤S11:获取第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系;
步骤S12:响应于所述第i个配置信息,在所述第i个控制器与所述第i类磁盘之间建立所述IO操作关系,其中,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;
步骤S13:将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;
进而通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在一个示例性的实施例中,在M不等于N的情况下,还可以获取第j个配置信息,其中,所述第j个配置信息用于指示请求在N-M类磁盘中的第j类磁盘与M个控制器中的第m个控制器之间建立目标IO操作关系,目标 IO操作关系用于允许所述第m个控制器对所述第j类磁盘进行IO操作;在所述第m个控制器与所述第j类磁盘之间建立目标IO操作关系,将所述第j个配置信息发送至所述第m个控制器,以指示所述第m个控制器将服务器连接的磁盘中的一个或多个所述第j类磁盘组成第j个磁盘阵列。需要说明的是,在j不同的情况下,m可以相同。
在一个示例性的实施例中,在所述第j个配置信息还用于指示为所述第j类磁盘配置第j组命名空间的情况下,将所述第j个配置信息发送至所述第m个控制器,以指示所述第m个控制器将所述服务器连接的磁盘中的一个或多个所述第j类磁盘组成第j个磁盘阵列,并在所述第j个磁盘阵列上创建第j组命名空间,其中,所述第j组命名空间包括一个或多个命名空间。
在本实施例中,通过上述方式可以灵活的配置M个控制器与N类磁盘之间的IO操作关系。
在一个示例性的实施例中,上述步骤S13包括:在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,并在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
进而通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
需要说明的是,命名空间是NVMe协议中规定的,用来表示一定数量逻辑块的集合,等同于存储中逻辑卷的概念。
也就是说,在本实施例中,主机可以通过获取目标对象配置的配置信息确定第i个控制器是用于对第i类磁盘进行IO操作的控制器。此外,用户还可以通过主机指示第i个控制器为第i类磁盘配置多少个命名空间。
在本实施例中,在N等于2的情况下,如图5所示,Raid控制器中具有两个控制器(即两个NVMe Controller),分别与PF(对应控制器0)和VF(对应控制器2)相对应,控制器0可以通过主机发送的配置信息将将一组SATA盘组成一个磁盘阵列,并为此磁盘阵列创建Namespace0、Namespace1,并将Namespace0、Namespace1与控制器0相绑定;控制器0可以通过主机发送的配置信息将一组NVMe盘组成一个磁盘阵列,为此磁盘阵列创建Namespace2、Namespace3,并将Namespace2、Namespace3与控制器1绑定。
在本实施例中,用户可以自由选择控制器与磁盘的IO操作关系以及为磁盘创建多少个命令空间。
在一个示例性的实施例中,在上述步骤S13之后,还包括以下步骤S21-S24:
步骤S21:获取所述第i个控制器发送的第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;
需要说明的是,第i个事件信息为一种AER Notice,即第i个控制器在完成创建以后,会通过AER Notice事件通知主机Namespace属性发生变化。
需要说明的是,AER是Asynchronous Event Request简写,即异步事件上报,是NVMe协议中规定的一种设备向主机主动上报事件的一种异步通知机制。AER Notice:是NVMe协议中规定的一种事件类型,包括Namespace属性改变、固件激活启动等。
步骤S22:向所述第i个控制器发送获取指令;
需要说明的是,获取指令为一种identify Namespace命令,主机在获取到第i个事件信息以后,需要从第i个控制器中获取Namespace信息,从而得知每个Namespace与控制器的对应关系,进而得知每个Namespace与IO队列的绑定关系。
步骤S23:获取所述第i个控制器响应于所述获取指令所发送的所述第i组命名空间中的各个命名空间的标识;
步骤S24:在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系,或者,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系。
需要说明的是,由于主机中具有第i个控制器的标识与第i个IO队列的标识之间的绑定关系,进而在第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系之后,就可以得知第i组命名空间中的各个命名空间的标识与第i个IO队列的标识之间的绑定关系。
在本实施例中,通过上述技术方案可以让主机得知每个命令空间Namespace与IO队列的绑定关系,进而主机在访问命令空间的时候可以知道选择哪个IO队列发送IO指令。
在一个示例性的实施例中,在通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系、且所述IO命令中携带所述第i组命名空间中的一个命名空间的标识的情况下,将所述IO命令添加到所述第i个IO队列中;或者获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系、且所述IO命令中携带所述第i个控制器的标识的情况下,将所述IO命令添加到所述第i个IO队列中。
也就是说,如果IO命令中携带第i组命名空间中的一个命名空间的标识,则主机会将IO命令添加到所述第i个IO队列,进而第i个控制器从第i个IO队列中获取IO命令。
在一个示例性的实施例中,上述为磁盘阵列Raid控制器创建M-1个虚拟功能VF,包括以下步骤S31-S32:
步骤S31:在确定所述Raid控制器支持单根IO虚拟化SR-IOV、且支持创建N-1个VF的情况下,在基本输入输出系统BIOS中启用SR-IOV功能;
需要说明的是,SR-IOV是PCI-SIG组织发布的一种规范,它定义了一个标准化的机制用以原生地支持实现多个系统映像(SI)能够共享一个PCI硬件资源。SR-IOV使得一个单一的功能单元能看起来像多个独立的物理设备,一个带有SR-IOV功能的物理设备能被配置为多个功能单元。
步骤S32:安装所述SR-IOV对应的驱动程序,并通过所述驱动程序分别配置所述M-1个VF中每个VF的目标属性,以为所述Raid控制器创建所述M-1个VF;
其中,所述目标属性至少包括:媒体存取控制MAC地址,外围器件互联总线PCIe地址,基地址寄存器BAR地址。
需要说明的是,每个VF在Raid控制器对应的寄存器集合中都有对应的基地址寄存器BAR空间。
在一个示例性的实施例中,通过以下步骤S41-S43建立主机与M个控制器中的第i个控制器之间的第i个IO队列,以建立主机与M个控制器中每个控制器之间的IO队列:
步骤S41:从所述第i个控制器对应的配置空间能力寄存器中获取所述第i个控制器支持的IO队列的深度和单个IO命令的大小;
步骤S42:根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列;
需要说明的是,由于IO队列包括SQ队列和CQ队列,进而需要在内存中分别为第i个控制器创建SQ队列和CQ队列。
步骤S43:将所述第i个IO队列的地址写入所述第i个控制器对应的配置空间控制寄存器中。
需要说明的是,将第i个IO队列的地址写入第i个控制器对应的配置空间控制寄存器中的目的是为了让第i个控制器知道此IO队列。
需要说明的是,所述第i个控制器对应的基址寄存器包括所述配置空间能力寄存器和所述配置空间控制寄存器。
需要说明的是,PF对应的控制器与主机之间的IO队列是在主机初始化阶段就创建好的,VF对应的控制器与主机之间的IO队列是主机在为Raid控制器创建好VF以后创建的。
在一个示例性的实施例中,在上述步骤S42之后,还包括:初始化与所述第i个IO队列对应的队头寄存器和队尾寄存器的值;其中,所述第i个IO队列对应的队头寄存器的值为所述第i个IO队列的队头索引,所述第i个IO队列对应的队尾寄存器的值为所述第i个IO队列的队尾索引。
需要说明的是,在本实施例中,通过为IO队列配置对应的队头寄存器和队尾寄存器可以便于主机和控制器从IO队列中正确的读取命令和数据,避免了读取命令和数据出现偏差。
在一个示例性的实施例中,通过第i个IO队列向第i个控制器发送IO命令之前,还包括:将所述IO命令放入第i个SQ队列,其中,所述第i个IO队列包括所述第i个SQ队列;通过第i个IO队列向第i个控制器发送IO命令,包括:通过所述第i个SQ队列向所述第i个控制器发送IO命令。
在一个示例性的实施例中,通过第i个IO队列向第i个控制器发送IO命令之后,还包括:从第i个CQ队列中获取所述IO命令对应的IO操作结果,其中,所述第i个控制器在执行所述IO命令之后,将所述IO操作结果放入所述第i个CQ队列中,所述第i个IO队列包括所述第i个CQ队列。
也就是说,在本实施例中,主机需要将第i个控制器执行的IO命令放入SQ队列中,然后通知第i个控制器读取指令,第i个控制器通过PCIe消息从主机内存的SQ队列中读取IO命令,并在第i个控制器内部执行该指令,最后将执行完成的IO操作结果通过PCIe消息放入对应的CQ队列中,进而完成一次IO交互。
在一个示例性的实施例中,将所述IO命令放入第i个SQ队列之后,需要更新所述第i个SQ队列对应的队尾寄存器的值,其中,所述第i个SQ队列对应的队尾寄存器的值为所述第i个SQ队列的队尾索引。
作为一种可选的示例,可以将第i个SQ队列对应的队尾寄存器的值加一。
在一个示例性的实施例中,从第i个CQ队列中获取所述IO命令对应的IO操作结果之后,还需要更新所述第i个CQ队列对应的队头寄存器的值,其中,所述第i个CQ队列对应的队头寄存器的值为所述第i个CQ队列的队头索引。
作为一种可选的示例,可以将第i个SQ队列对应的队头寄存器的值加一。
在本实施例中,通过对SQ/CQ队列的队头寄存器和队头寄存器的值的更新操作可以更方便的实现主机对IO队列的操作。
在本实施例中还提供了一种磁盘访问方法,图4是根据本申请实施例的另一种磁盘访问方法的流程图,如图4所示,该流程包括如下步骤:
步骤S402:在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数, M为大于或等于2、小于或等于N的正整数;
在一个示例性的实施例中,在N等于2时,N类磁盘包括:SATA磁盘,NVME磁盘。
步骤S404:确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;
步骤S406:在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
需要说明的是,上述步骤S402-S406的执行主体为Raid控制器。M个控制器位于Raid控制器内部,每个控制器用于实现NVMe Controller功能。
通过上述步骤S402-S406,使用M个IO队列访问N类不同数据读写速度的磁盘,解决了使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,达到了提高了多类磁盘的性能体现度的技术效果。
在一个示例性的实施例中,在M等于N的情况下,可以从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,达到了多类磁盘可以充分发挥各自的性能的技术效果。
在一个示例性的实施例中,可以通过以下方式确定第i个控制器与所述主机之间的第i个IO队列,以确定N个控制器中每个控制器与主机之间的输入输出IO队列:从所述第i个控制器对应的配置空间控制寄存器中获取所述第i个IO队列的地址,以确定所述第i个IO队列。
需要说明的是,在本实施例中,主机在为第i个控制器创建好第i个IO队列以后,会将第i个IO队列的地址写入第i个控制器对应的配置空间控制寄存器,进而第i个控制器可以从对应的配置空间控制寄存器获取第i个IO队列的地址,以确定第i个IO队列。进而第i个控制器可以通过第i个IO队列与主机进行IO命令交互。
在一个示例性的实施例中,确定N个控制器中每个控制器与主机之间的输入输出IO队列之前或之后,还包括以下步骤S51-S52:
步骤S51:获取所述主机发送的第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;
步骤S51:通过所述第i个控制器执行以下步骤:将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列。
通过所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在本实施例中,通过上述步骤可以让Raid控制器知道M个控制器与M类磁盘的IO操作关系。
在一个示例性的实施例中,将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列之后,所述方法还包括:在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,通过所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
在一个示例性的实施例中,在M不等于N的情况下,还可以获取主机发送的第j个配置信息,其中,所述第j个配置信息用于指示请求在N-M类磁盘中的第j类磁盘与M个控制器中的第m个控制器之间建立目标IO操作关系,目标 IO操作关系用于允许所述第m个控制器对所述第j类磁盘进行IO操作;通过所述第m个控制器将服务器连接的磁盘中的一个或多个所述第j类磁盘组成第j个磁盘阵列。
在一个示例性的实施例中,在所述第j个配置信息还用于指示为所述第j类磁盘配置第j组命名空间的情况下,通过所述第m个控制器将所述服务器连接的磁盘中的一个或多个所述第j类磁盘组成第j个磁盘阵列,并在所述第j个磁盘阵列上创建第j组命名空间,其中,所述第j组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,在所述第i个磁盘阵列上创建第i组命名空间之后,还具有以下步骤S61-S62:步骤S61:向所述主机发送第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;
需要说明的是,第i个事件信息为一种AER Notice,即第i个控制器在完成创建以后,会通过AER Notice事件通知主机Namespace属性发生变化。
步骤S62:响应于所述主机基于所述第i个事件信息所发送的获取指令,向所述主机发送所述第i组命名空间中的各个命名空间的标识。
需要说明的是,获取指令为一种identify Namespace命令,向主机发送第i类磁盘的一个或多个第i命令空间的属性信息可以使得主机得知每个Namespace与控制器的对应关系,进而得知每个Namespace与IO队列的绑定关系,使得进而主机在访问命令空间的时候可以知道选择哪个IO队列发送IO指令。
在一个示例性的实施例中,所述第i个控制器通过第i个SQ队列获取到IO命令,其中,所述第i个IO队列包括所述第i个SQ队列。
在一个示例性的实施例中,在所述第i个控制器通过第i个SQ队列获取到IO命令之后,还需要通过所述第i个控制器更新所述第i个SQ队列对应的队头寄存器的值,其中,所述第i个SQ队列对应的队头寄存器的值为所述第i个SQ队列的队头索引。
作为一种可选的示例,可以通过第i个控制器将第i个SQ队列对应的队头寄存器的值加一。
在一个示例性的实施例中,在通过所述第i个控制器对第i类磁盘进行IO操作之后,所述方法还包括:通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列,其中,所述第i个IO队列包括所述第i个CQ队列。
在本实施例中,第i个控制器从SQ队列中获取执行的IO命令,并执行该指令,对第i类磁盘进行IO操作,并将执行完成的IO操作结果通过PCIe消息放入对应的CQ队列中,进而和主机完成一次IO交互。
在一个示例性的实施例中,在通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列之后,还需要通过所述第i个控制器更新所述第i个CQ队列对应的队尾寄存器的值,其中,所述第i个CQ队列对应的队尾寄存器的值为所述第i个CQ队列的队尾索引。
作为一种可选的示例,可以通过第i个控制器将第i个CQ队列对应的队尾寄存器的值加一。
在本实施例中,通过对SQ/CQ队列的队头寄存器和队头寄存器的值的更新操作可以更方便的实现第i个控制器对IO队列的操作。
显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。为了更好的理解上述方法,以下结合实施例对上述过程进行说明,但不用于限定本发明实施例的技术方案,具体地:
在一个可选的实施例中,以N等于2进行具体说明,即N类磁盘包括SATA盘和NVMe盘。即本申请实施例提出一种基于PCIe SR-IOV的Raid控制器IO加速的方法,使Raid控制器在SATA盘和NVMe盘共存的场景下,将两者IO通路相互隔离,既保证了NVMe盘的高性能,又保持了HDD的原有性能,从而达到Raid控制器整体IO加速的效果。
为了更好的进行说明,以下结合图5进行具体说明,如图5所示,Raid控制器启用PCIe SR-IOV特性,创建1个VF,同时将Raid控制器内部的2个NVMe Controller分别与PF和VF绑定,此时,Raid控制器对外体现为2个控制器,记作控制器0和控制器1。主机在初始化阶段分别读取控制器0和控制器1配置空间能力寄存器中队列支持的深度和消息的大小,从而在内存中分别为控制器0和控制器1创建一组IO指令队列,记作Q1和Q2,用来进行命令交互;Raid控制器内部,对下连接物理磁盘,将多块SATA盘组成一个RAID阵列,记作Array0,并在Array0上创建2个Namespace,分别记为NS0和NS1,再将多块NVMe盘组成另一个RAID阵列,记作Array1,并在Array1上也创建2个Namespace,分别记为NS2和NS3,最后将NS0和NS1与控制器0绑定,将NS2和NS3与控制器1绑定,当主机对NS0或NS1进行IO读写时,通过Q1进行NVMe命令交互,当主机对NS2或NS3进行IO读写时,通过Q2进行NVMe命令交互,这从硬件上将NVMeSSD盘和SATA HDD盘的IO通路进行了物理隔离,既保证了NVMe的高性能,又保持了HDD原有性能,从而达到Raid控制器整体IO加速的效果。
为了更好的进行说明,结合图5,主机侧执行的步骤具体如图6所示:
步骤S1:主机初始化;
步骤S2:读取控制器0支持的IO队列的队列参数;
需要说明的是,主机在初始化阶段从Raid控制器设备的控制器0的配置空间能力寄存器中读取IO队列支持的深度和单个IO命令大小。
步骤S3:创建控制器0的IO队列;
需要说明的是,主机在初始化阶段根据IO队列的深度和单个IO命令大小在内存中创建IO队列。
步骤S4:通知设备控制器0的IO队列的地址;
需要说明的是,主机在创建IO队列成功后,将IO队列的首地址写在Raid控制器设备的控制器0的配置空间控制寄存器中。
步骤S5:设备保存控制器0的IO队列的地址;
步骤S6:创建控制器0的IO队列的head和tail寄存器;
步骤S7:创建VF,读取控制器1支持的IO队列的队列参数;
需要说明的是,主机侧通过命令行LSPCI查看Raid控制器的SR-IOV能力,并通过写PCIe设备文件创建1个VF,主机在VF创建成功之后,从Raid控制器设备的控制器1的配置空间能力寄存器中读取IO队列支持的深度和单个IO命令大小。
步骤S8:创建控制器1的IO队列;
需要说明的是,主机根据IO队列的深度和单个IO命令大小在内存中创建另外一个IO队列。
步骤S9:通知设备控制器1的IO队列的地址;
需要说明的是,主机在创建IO队列成功后,将IO队列的首地址写在Raid控制器设备的控制器1的配置空间控制寄存器中。
步骤S10:设备保存控制器1的IO队列的地址;
步骤S11:创建控制器1的IO队列的head和tail寄存器;
步骤S12:等待主机与设备的IO操作。
需要说明的是,Raid控制器内部的2个控制器在初始化时,分别将IO队列两个寄存器的初始值设为0,两个寄存器表示队列中元素的索引,称为head和tail,主机给指定控制器的IO队列中添加元素后更新tail的值,Raid控制器的指定控制器从IO队列中取走元素后更新head的值,以此实现主机和Raid控制器对IO队列的操作。
为了更好的进行说明,结合图5,Raid控制器执行的步骤具体如图7所示:
步骤S1:设备初始化;
步骤S2:NVMe盘组成队列,并创建Namespace与控制器0/1绑定;
步骤S3:SATA盘组成队列,并创建Namespace与控制器1/0绑定;
需要说明的是,主机可以通过Raid控制器配置工具,将一组NVMe盘组成一个阵列,并创建一个或者多个Namespace,并将其与控制器0或者控制器1绑定;将一组SATA盘组成一个阵列,并创建一个或者多个Namespace,并将其与控制器1或者控制器0绑定。
步骤S4:控制器0给主机上报AER Notice事件,通知主机Namespace属性变化;
步骤S5:控制器1给主机上报AER Notice事件,通知主机Namespace属性变化;
需要说明的是,在主机配置Namespace完成后,控制器0和控制器1分别通过AERNotice事件通知主机Namespace属性发生变化。
步骤S6:主机向设备的2个控制器发送identify Namespace命令;
需要说明的是,主机可以分别向控制器0和控制器1发送identify Namespace命令,获取Namespace信息,从而得知每个Namespace与主机IO队列的绑定关系。
步骤S7:主机获取2个控制器上Namespace与主机IO队列的绑定关系;
步骤S8:设备等待主机对Namespace的IO操作。
需要说明的是,当主机通过Raid控制器对Namespace进行IO时,主机自动将IO命令添加到Namespace绑定的控制器对应的IO队列中,并通过PCIe消息通知Raid控制器Namespace绑定的控制器进行处理,以此实现主机对Namespace的IO操作。
需要说明的是,在N等于2的情况下,本申请适用于SATA盘和NVMe盘共存Raid控制器的场景下,Raid控制器整体IO加速的方案,使之从物理上做到了将不同性能磁盘的IO通路相互隔离,既保证了NVMe盘的高性能,又不影响SATA盘原有性能,用以应对在SATA盘和NVMe盘共存的应用场景下,不仅为客户对大容量存储降低了采购成本,而且为客户对高性能存储提供了有效的解决方案。
需要说明的是,本申请创新性的设计了一种软硬件相结合的方法,利用硬件PCIeSR-IOV特性,使Raid控制器支持多NVMe Controller,使其每个Controller在主机侧拥有独立的NVMe指令队列,在软件设计上将不同存储介质组成的Namespace绑定不同的Controller,从而达到不同存储介质组成的Namespace在进行IO时,直接被主机侧的NVMe指令队列隔离,使两者IO通路互不影响,即保证了NVMe的高性能,又保持了HDD原有性能,从而达到Raid控制器整体IO加速的效果。
需要说明的是,本发明设计的Raid控制器整体IO加速方案,不仅适用于SATA盘和NVMe盘共存Raid控制器的场景,而且适用于任何低速和高速存储介质混合使用于Raid控制器的场景,硬件上利用PCIe SR-IOV特性,使Raid控制器支持多NVMe Controller,软件上可通过C语言或者其他编程语言,实现将不同Namespace绑定不同Controller,达到Namespace的IO通路物理隔离,以提高Raid控制器整体性能。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种磁盘访问装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图8是根据本申请实施例的一种磁盘访问装置的结构框图,如图8所示,该装置包括:
第一创建模块82,用于在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能VF,其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
建立模块84,用于建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及所述M-1个VF对应的M-1个控制器;
访问模块86,用于通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
上述装置,使用M个IO队列访问N类不同数据读写速度的磁盘,解决了使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,达到了提高了多类磁盘的性能体现度的技术效果。
在一个示例性的实施例中,在M等于N的情况下,可以从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,达到了多类磁盘可以充分发挥各自的性能的技术效果。
通过上述装置,从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,进而避免了现有技术中主机使用一个IO队列同时对不同性能的磁盘进行访问导致多类磁盘无法充分发挥各自的性能,进而采用上述技术方案,解决了与服务器连接的磁盘中包括多类不同数据读写速度等级的磁盘的情况下,多类磁盘无法充分发挥各自的性能的问题,达到了多类磁盘可以充分发挥各自的性能的技术效果。在一个示例性的实施例中,上述装置还包括:第一配置模块,用于通过第i个IO队列向第i个控制器发送IO命令之前,获取第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系;响应于所述第i个配置信息,在所述第i个控制器与所述第i类磁盘之间建立所述IO操作关系,其中,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;访问模块86,还用于通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在一个示例性的实施例中,第一配置模块,还用于在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,并在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,访问模块86,还用于通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
在一个示例性的实施例中,上述装置还包括:绑定模块,用于将所述第i个配置信息发送至所述第i个控制器之后,获取所述第i个控制器发送的第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;向所述第i个控制器发送获取指令;获取所述第i个控制器响应于所述获取指令所发送的所述第i组命名空间中的各个命名空间的标识;在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系,或者,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系。
在一个示例性的实施例中,上述访问模块86还用于在通过第i个IO队列向第i个控制器发送IO命令之前,获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系、且所述IO命令中携带所述第i组命名空间中的一个命名空间的标识的情况下,将所述IO命令添加到所述第i个IO队列中;或者获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系、且所述IO命令中携带所述第i个控制器的标识的情况下,将所述IO命令添加到所述第i个IO队列中。
在一个示例性的实施例中,建立模块84,还用于通过以下方式建立主机与所述M个控制器中的第i个控制器之间的第i个IO队列:从所述第i个控制器对应的配置空间能力寄存器中获取所述第i个控制器支持的IO队列的深度和单个IO命令的大小;根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列;将所述第i个IO队列的地址写入所述第i个控制器对应的配置空间控制寄存器中。
在一个示例性的实施例中,上述装置还包括:初始化模块,用于根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列之后,初始化与所述第i个IO队列对应的队头寄存器和队尾寄存器的值;其中,所述第i个IO队列对应的队头寄存器的值为所述第i个IO队列的队头索引,所述第i个IO队列对应的队尾寄存器的值为所述第i个IO队列的队尾索引。
在一个示例性的实施例中,访问模块86,还用于将所述IO命令放入第i个SQ队列;通过所述第i个SQ队列向所述第i个控制器发送IO命令,其中,所述第i个IO队列包括所述第i个SQ队列。
在一个示例性的实施例中,上述装置还包括:第一更新模块,用于将所述IO命令放入第i个SQ队列之后,更新所述第i个SQ队列对应的队尾寄存器的值,其中,所述第i个SQ队列对应的队尾寄存器的值为所述第i个SQ队列的队尾索引。
在一个示例性的实施例中,上述装置还包括:获取模块,用于通过第i个IO队列向第i个控制器发送IO命令之后,从第i个CQ队列中获取所述IO命令对应的IO操作结果,其中,所述第i个控制器在执行所述IO命令之后,将所述IO操作结果放入所述第i个CQ队列中,所述第i个IO队列包括所述第i个CQ队列。
在一个示例性的实施例中,上述装置还包括:第二更新模块,用于从第i个CQ队列中获取所述IO命令对应的IO操作结果之后,更新所述第i个CQ队列对应的队头寄存器的值,其中,所述第i个CQ队列对应的队头寄存器的值为所述第i个CQ队列的队头索引。
在一个示例性的实施例中,在所述N等于2时,N类磁盘包括:串行先进技术附接SATA磁盘,快速非易失性存储NVME磁盘。
图9是根据本申请实施例的另一种磁盘访问装置的结构框图,如图9所示,该装置包括:
第二创建模块92,用于在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
确定模块94,用于确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;
操作模块96,用于在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
上述装置,使用M个IO队列访问N类不同数据读写速度的磁盘,解决了使用一个IO队列访问与服务器连接的多类不同数据读写速度等级的磁盘,导致多类磁盘的性能体现度较低的问题,达到了提高了多类磁盘的性能体现度的技术效果。
在一个示例性的实施例中,在M等于N的情况下,可以从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,达到了多类磁盘可以充分发挥各自的性能的技术效果。
通过上述装置,从物理上做到了将不同性能的磁盘的IO通路相互隔离,使得主机与每类磁盘都有单独的IO队列,进而避免了现有技术中主机使用一个IO队列同时对不同性能的磁盘进行访问导致多类磁盘无法充分发挥各自的性能,进而采用上述技术方案,解决了与服务器连接的磁盘中包括多类不同数据读写速度等级的磁盘的情况下,多类磁盘无法充分发挥各自的性能的问题,达到了多类磁盘可以充分发挥各自的性能的技术效果。
在一个示例性的实施例中,确定模块94,还用于通过以下方式确定第i个控制器与所述主机之间的第i个IO队列:从所述第i个控制器对应的配置空间控制寄存器中获取所述第i个IO队列的地址,以确定所述第i个IO队列。
在一个示例性的实施例中,上述装置还包括:第三创建模块,用于确定N个控制器中每个控制器与主机之间的输入输出IO队列之前或之后,获取所述主机发送的第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;通过所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;操作模块96,还用于通过所述第i个控制器对所述第i个磁盘阵列进行IO操作。
在一个示例性的实施例中,上述装置还包括:第四创建模块,用于将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列之后,在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
在一个示例性的实施例中,操作模块96,还用于通过所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
在一个示例性的实施例中,上述装置还包括:发送模块,用于在所述第i个磁盘阵列上创建第i组命名空间之后,向所述主机发送第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;响应于所述主机基于所述第i个事件信息所发送的获取指令,向所述主机发送所述第i组命名空间中的各个命名空间的标识。
在一个示例性的实施例中,所述第i个控制器通过第i个SQ队列获取到IO命令,其中,所述第i个IO队列包括所述第i个SQ队列。
在一个示例性的实施例中,上述装置还包括:第三更新模块,用于在所述第i个控制器通过第i个SQ队列获取到IO命令之后,通过所述第i个控制器更新所述第i个SQ队列对应的队头寄存器的值,其中,所述第i个SQ队列对应的队头寄存器的值为所述第i个SQ队列的队头索引。
在一个示例性的实施例中,上述装置还包括:放入模块,用于通过所述第i个控制器对第i类磁盘进行IO操作之后,通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列,其中,所述第i个IO队列包括所述第i个CQ队列。
在一个示例性的实施例中,上述装置还包括:第四更新模块,用于通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列之后,通过所述第i个控制器更新所述第i个CQ队列对应的队尾寄存器的值,其中,所述第i个CQ队列对应的队尾寄存器的值为所述第i个CQ队列的队尾索引。
在一个示例性的实施例中,在N等于2时,所述N类磁盘包括:SATA磁盘,NVME磁盘。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (28)

1.一种磁盘访问方法,其特征在于,包括:
在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能VF,其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及所述M-1个VF对应的M-1个控制器;
通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
2.根据权利要求1所述的方法,其特征在于,
通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:获取第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系;响应于所述第i个配置信息,在所述第i个控制器与所述第i类磁盘之间建立所述IO操作关系,其中,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;
所述通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列进行IO操作。
3.根据权利要求2所述的方法,其特征在于,所述将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,包括:
在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,将所述第i个配置信息发送至所述第i个控制器,以指示所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列,并在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
4.根据权利要求3所述的方法,其特征在于,所述通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,包括:
通过所述第i个IO队列向所述第i个控制器发送所述IO命令,以指示所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
5.根据权利要求3所述的方法,其特征在于,将所述第i个配置信息发送至所述第i个控制器之后,所述方法还包括:
获取所述第i个控制器发送的第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;
向所述第i个控制器发送获取指令;
获取所述第i个控制器响应于所述获取指令所发送的所述第i组命名空间中的各个命名空间的标识;
在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系,或者,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系。
6.根据权利要求5所述的方法,其特征在于,在通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:
获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个IO队列的标识之间建立绑定关系、且所述IO命令中携带所述第i组命名空间中的一个命名空间的标识的情况下,将所述IO命令添加到所述第i个IO队列中;或者
获取所述IO命令,在所述第i组命名空间中的各个命名空间的标识与所述第i个控制器的标识之间建立绑定关系、且所述IO命令中携带所述第i个控制器的标识的情况下,将所述IO命令添加到所述第i个IO队列中。
7.根据权利要求1所述的方法,其特征在于,建立主机与M个控制器中每个控制器之间的IO队列,包括:
通过以下方式建立主机与所述M个控制器中的第i个控制器之间的第i个IO队列:
从所述第i个控制器对应的配置空间能力寄存器中获取所述第i个控制器支持的IO队列的深度和单个IO命令的大小;
根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列;
将所述第i个IO队列的地址写入所述第i个控制器对应的配置空间控制寄存器中。
8.根据权利要求7所述的方法,其特征在于,根据所述第i个控制器支持的IO队列的深度和单个IO命令的大小在所述主机的内存中创建所述第i个IO队列之后,所述方法还包括:
初始化与所述第i个IO队列对应的队头寄存器和队尾寄存器的值;
其中,所述第i个IO队列对应的队头寄存器的值为所述第i个IO队列的队头索引,所述第i个IO队列对应的队尾寄存器的值为所述第i个IO队列的队尾索引。
9.根据权利要求1所述的方法,其特征在于,通过第i个IO队列向第i个控制器发送IO命令之前,所述方法还包括:
将所述IO命令放入第i个SQ队列,其中,所述第i个IO队列包括所述第i个SQ队列;
通过第i个IO队列向第i个控制器发送IO命令,包括:通过所述第i个SQ队列向所述第i个控制器发送IO命令。
10.根据权利要求9所述的方法,其特征在于,将所述IO命令放入第i个SQ队列之后,所述方法还包括:
更新所述第i个SQ队列对应的队尾寄存器的值,其中,所述第i个SQ队列对应的队尾寄存器的值为所述第i个SQ队列的队尾索引。
11.根据权利要求1所述的方法,其特征在于,通过第i个IO队列向第i个控制器发送IO命令之后,所述方法还包括:
从第i个CQ队列中获取所述IO命令对应的IO操作结果,其中,所述第i个控制器在执行所述IO命令之后,将所述IO操作结果放入所述第i个CQ队列中,所述第i个IO队列包括所述第i个CQ队列。
12.根据权利要求11所述的方法,其特征在于,从第i个CQ队列中获取所述IO命令对应的IO操作结果之后,所述方法还包括:
更新所述第i个CQ队列对应的队头寄存器的值,其中,所述第i个CQ队列对应的队头寄存器的值为所述第i个CQ队列的队头索引。
13.根据权利要求1所述的方法,其特征在于,在所述N等于2时,N类磁盘包括:串行先进技术附接SATA磁盘,快速非易失性存储NVME磁盘。
14.一种磁盘访问方法,其特征在于,包括:
在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;
在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
15.根据权利要求14所述的方法,其特征在于,确定M个控制器中每个控制器与主机之间的输入输出IO队列,包括:
通过以下方式确定第i个控制器与所述主机之间的第i个IO队列:
从所述第i个控制器对应的配置空间控制寄存器中获取所述第i个IO队列的地址,以确定所述第i个IO队列。
16.根据权利要求14所述的方法,其特征在于,
确定N个控制器中每个控制器与主机之间的输入输出IO队列之前或之后,所述方法还包括:获取所述主机发送的第i个配置信息,其中,所述第i个配置信息用于请求在所述第i个控制器与所述第i类磁盘之间建立IO操作关系,所述IO操作关系用于允许所述第i个控制器对所述第i类磁盘进行IO操作;通过所述第i个控制器将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列;
通过所述第i个控制器对第i类磁盘进行IO操作,包括:通过所述第i个控制器对所述第i个磁盘阵列进行IO操作。
17.根据权利要求16所述的方法,其特征在于,将所述服务器连接的磁盘中的一个或多个所述第i类磁盘组成第i个磁盘阵列之后,所述方法还包括:
在所述第i个配置信息还用于指示为所述第i类磁盘配置第i组命名空间的情况下,在所述第i个磁盘阵列上创建第i组命名空间,其中,所述第i组命名空间包括一个或多个命名空间。
18.根据权利要求17所述的方法,其特征在于,通过所述第i个控制器对第i类磁盘进行IO操作,包括:
通过所述第i个控制器对所述第i个磁盘阵列中与目标命名空间对应的磁盘进行IO操作,其中,所述IO命令中携带有所述第i组命名空间中的所述目标命名空间的标识。
19.根据权利要求17所述的方法,其特征在于,在所述第i个磁盘阵列上创建第i组命名空间之后,所述方法还包括: 向所述主机发送第i个事件信息,其中,所述第i个事件信息用于指示在所述第i个磁盘阵列上创建的命名空间发生变化;
响应于所述主机基于所述第i个事件信息所发送的获取指令,向所述主机发送所述第i组命名空间中的各个命名空间的标识。
20.根据权利要求14所述的方法,其特征在于,所述第i个控制器通过第i个SQ队列获取到IO命令,其中,所述第i个IO队列包括所述第i个SQ队列。
21.根据权利要求20所述的方法,其特征在于,所述方法还包括:
在所述第i个控制器通过第i个SQ队列获取到IO命令之后,通过所述第i个控制器更新所述第i个SQ队列对应的队头寄存器的值,其中,所述第i个SQ队列对应的队头寄存器的值为所述第i个SQ队列的队头索引。
22.根据权利要求14所述的方法,其特征在于,通过所述第i个控制器对第i类磁盘进行IO操作之后,所述方法还包括:
通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列,其中,所述第i个IO队列包括所述第i个CQ队列。
23.根据权利要求22所述的方法,其特征在于,通过所述第i个控制器将所述IO命令对应的IO操作结果放入至第i个CQ队列之后,所述方法还包括:
通过所述第i个控制器更新所述第i个CQ队列对应的队尾寄存器的值,其中,所述第i个CQ队列对应的队尾寄存器的值为所述第i个CQ队列的队尾索引。
24.根据权利要求14所述的方法,其特征在于,在N等于2时,所述N类磁盘包括:SATA磁盘,NVME磁盘。
25.一种磁盘访问装置,其特征在于,包括:
第一创建模块,用于在与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建M-1个虚拟功能VF,其中,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
建立模块,用于建立主机与M个控制器中每个控制器之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及所述M-1个VF对应的M-1个控制器;
访问模块,用于通过第i个IO队列向第i个控制器发送IO命令,以指示所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1、小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
26.一种磁盘访问装置,其特征在于,包括:
第二创建模块,用于在主机为磁盘阵列Raid控制器创建了M-1个虚拟功能VF的情况下,创建所述M-1个VF对应的M-1个控制器,其中,所述主机在确定与服务器连接的磁盘中包括N类磁盘的情况下,为磁盘阵列Raid控制器创建所述M-1个VF,所述N类磁盘的数据读写速度位于不同的等级,所述N为大于1的正整数,M为大于或等于2、小于或等于N的正整数;
确定模块,用于确定M个控制器中每个控制器与主机之间的输入输出IO队列,其中,所述M个控制器包括:所述Raid控制器的物理功能PF对应的控制器以及M-1个VF对应的M-1个控制器;
操作模块,用于在第i个控制器通过第i个IO队列获取到所述主机发送的IO命令的情况下,通过所述第i个控制器对第i类磁盘进行IO操作,其中,i为大于或等于1,小于或等于M的整数,所述第i个IO队列是所述主机与所述M个控制器中的所述第i个控制器之间的IO队列,所述N类磁盘包括所述第i类磁盘。
27.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1至13任一项中所述的方法的步骤,或者权利要求14至24任一项中所述的方法的步骤。
28.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至13任一项中所述的方法的步骤,或者权利要求14至24任一项中所述的方法的步骤。
CN202310823999.9A 2023-07-06 2023-07-06 磁盘访问方法及装置、存储介质、电子设备 Active CN116540952B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310823999.9A CN116540952B (zh) 2023-07-06 2023-07-06 磁盘访问方法及装置、存储介质、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310823999.9A CN116540952B (zh) 2023-07-06 2023-07-06 磁盘访问方法及装置、存储介质、电子设备

Publications (2)

Publication Number Publication Date
CN116540952A CN116540952A (zh) 2023-08-04
CN116540952B true CN116540952B (zh) 2024-01-09

Family

ID=87449237

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310823999.9A Active CN116540952B (zh) 2023-07-06 2023-07-06 磁盘访问方法及装置、存储介质、电子设备

Country Status (1)

Country Link
CN (1) CN116540952B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116991335B (zh) * 2023-09-26 2024-01-16 苏州元脑智能科技有限公司 队列资源分配方法、装置、磁盘阵列卡、设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
WO2020259418A1 (zh) * 2019-06-24 2020-12-30 华为技术有限公司 一种数据访问方法、网卡及服务器
CN115344200A (zh) * 2022-07-11 2022-11-15 陕西千山航空电子有限责任公司 一种基于NVMe接口的存储系统
CN116027985A (zh) * 2023-02-10 2023-04-28 山东云海国创云计算装备产业创新中心有限公司 一种提高NVMe加速器可用性的方法、装置、设备及介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
WO2020259418A1 (zh) * 2019-06-24 2020-12-30 华为技术有限公司 一种数据访问方法、网卡及服务器
CN115344197A (zh) * 2019-06-24 2022-11-15 华为技术有限公司 一种数据访问方法、网卡及服务器
CN115344200A (zh) * 2022-07-11 2022-11-15 陕西千山航空电子有限责任公司 一种基于NVMe接口的存储系统
CN116027985A (zh) * 2023-02-10 2023-04-28 山东云海国创云计算装备产业创新中心有限公司 一种提高NVMe加速器可用性的方法、装置、设备及介质

Also Published As

Publication number Publication date
CN116540952A (zh) 2023-08-04

Similar Documents

Publication Publication Date Title
CN110830392B (zh) 启用存储介质上的虚拟功能
TWI752066B (zh) 讀寫請求處理方法及裝置
US10713074B2 (en) Method, apparatus, and system for accessing storage device
US7685335B2 (en) Virtualized fibre channel adapter for a multi-processor data processing system
JP6138275B2 (ja) データ・ストレージ方法およびストレージ・デバイス
US11068203B2 (en) NVMe direct virtualization with configurable storage
JP6273353B2 (ja) 計算機システム
CN106598480B (zh) 具有接口控制机制的电子系统及其操作方法
US10073705B1 (en) Techniques for automated data storage system port initialization
US20060195663A1 (en) Virtualized I/O adapter for a multi-processor data processing system
US7903677B2 (en) Information platform and configuration method of multiple information processing systems thereof
CN107077447B (zh) 共享的虚拟化本地存储装置
CN111722786A (zh) 基于NVMe设备的存储系统
CN116540952B (zh) 磁盘访问方法及装置、存储介质、电子设备
US10938730B2 (en) Data transmission techniques between systems having different communication speeds
US11016817B2 (en) Multi root I/O virtualization system
CN113312143A (zh) 云计算系统、命令处理方法及虚拟化仿真装置
CN104731635A (zh) 一种虚拟机访问控制方法,及虚拟机访问控制系统
CN105739930A (zh) 一种存储架构及其初始化方法和数据存储方法及管理装置
CN111651269A (zh) 实现设备虚拟化的方法、装置及计算机可读存储介质
US11379128B2 (en) Application-based storage device configuration settings
CN112015352B (zh) 存储块设备识别装置、系统和存储块设备读写方法
EP3388937A1 (en) Local disks erasing mechanism for pooled physical resources
US11513690B2 (en) Multi-dimensional I/O service levels
US9760505B2 (en) Network interface controller emulation

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