一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的Raid卡驱动方法与流程

2022-02-22 08:26:46 来源:中国专利 TAG:

一种基于fpga的raid卡驱动方法
技术领域
1.本发明涉及一种数据存储技术、磁盘阵列技术领域,尤其涉及一种基于fpga的raid卡驱动方法。


背景技术:

2.raid:redundant array of independent disks,即独立磁盘冗余阵列,或简称磁盘阵列,是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。
3.pcie:pci-express,peripheral component interconnect express,是一种高速串行计算机扩展总线标准,是继isa和pci总线之后的第三代i/o总线,即3gio。
4.nvme:non-volatile memory express,非易失性高速传输总线,是一个逻辑设备接口规范;是host和pcie bus sdd间的数据通信协议,是专门针对pcie ssd设计的接口标准;协议定义了驱动软件与非易失存储子系统,如外设部件互连标准和接口pcie的固态硬盘等,驱动软件与非易失存储子系统之间交互的命令集、队列和寄存器的接口,它同样定义了nvm子系统的基本命令集;是一个可扩展的主机控制接口,适用于解决使用pcie ssd的企业和客户端系统的需求。
5.ssd:solid state disk或solid state drive,即固态驱动器,是用固态电子存储芯片阵列制成的硬盘。
6.对fpga所带的pcie rc端口做pcie枚举,分配总线号、bar空间等,初始化nvme ssd,配置nvme管理队列,创建nvme io队列,配置raid信息,出现坏盘时驱动创建多个线程进行重建。
7.fpga由于其相对于专门的raid芯片的灵活性、开发周期更短等,用于实现raid卡,为了使用该raid卡,需要专门的驱动,以及为应用层提供接口,同时由于软件比fpga更加灵活方便,部分工作交给了驱动。


技术实现要素:

8.本发明的目的解决了采用fpga直接驱动nvme ssd时,当出现坏盘时驱动会创建多个线程进行重建的问题,降低了fpga开发驱动的复杂度。
9.本发明的目的在于提供一种基于fpga的raid卡驱动方法,以解决上述技术背景中提出的问题。
10.为实现上述目的,本发明采用以下技术方案:
11.本发明第一个方面提供了一种基于fpga的raid卡驱动方法,包括:
12.首先完成pcie枚举,将fpga下属的2个pcie rc端口的配置axi_lite接口都直接映射到cpu地址空间,完成pcie rc端口下面的每个ssd的枚举和配置;通过读写fpga相关bar空间来访问rc下的各设备的pcie配置空间;其次,对各nvme ssd盘进行初始化。
13.优选地,所述pcie枚举步骤如下:
14.a1:分配并配置总线,除fpga下属2个pcie rc本身,在访问其下边的子设备的pcie配置空间前都需要配置;
15.a2:遍历和配置,遍历所有子设备,配置子设备关掉中断,找到子设备id为pcie的capability并配置mps以及mrrs值,读取子设备读取子设备的pcie header type,如果为1,则其为桥类设备,说明其下还有其他的设备,对于该子设备,执行骤a1;如果为0,则非桥类设备,说明其为nvme ssd的插槽,执行步骤a3;
16.a3:记录该插槽的槽位是第几个槽位,给该槽位分配bar空间并回溯更新其父设备至rc的bar空间。
17.优选地,所述对各nvme ssd盘进行初始化的步骤如下:
18.b1:逐个初始化nvme ssd,每个nvme ssd先进行复位,再配置管理队列,再创建驱动用的io队列;
19.b2:根据nvme ssd盘记录的raid信息,配置好相关fpga寄存器,告知fpga raid模式和盘数量;
20.b3:创建fpga io队列,用于处理应用层下发给raid盘的命令;
21.b4:创建nvme ssd的io队列,供fpga使用;
22.b5:创建块设备,使用户得以使用raid盘;
23.b6:对于不在raid组里的盘,开放给用户直接使用。
24.优选地,所述遍历过程是采用深度优先算法进行的。
25.本发明第二个方面提供了一种基于fpga的raid卡驱动装置,包含:
26.pcie枚举模块,用于将fpga下属的2个pcie rc端口的配置axi_lite接口都直接映射到cpu地址空间,完成pcie rc端口下面的每个ssd的枚举和配置;以及通过读写fpga相关bar空间来访问rc下的各设备的pcie配置空间;
27.nvme ssd盘初始化模块,用于对各nvme ssd盘进行初始化。
28.在一种优选实施例中,所述pcie枚举模块包括:
29.总线分配及配置子模块,用于除fpga下属2个pcie rc本身外,配置fpga下边的子设备的pcie配置空间;
30.子设备遍历和配置子模块,用于遍历所有子设备,配置子设备关掉中断,找到子设备id为pcie的capability并配置mps以及mrrs值;
31.判断模块,用于读取子设备的pcie header type,并判断pcie header type是否为1,如果为1,则判断该子设备为桥类设备,说明其下还有其他的设备;如果为0,则判断该子设备为非桥类设备,说明其为nvme ssd的插槽;
32.槽位记录模块,用于当判断模块判断该子设备为非桥类设备时,记录插槽的槽位是第几个槽位,给该槽位分配bar空间并回溯更新其父设备至rc的bar空间。
33.本发明第三个方面还提供了一种基于fpga的raid卡驱动系统,包括:主机、驱动、fpga和多个nvme ssd盘;其中,
34.所述主机与所述驱动通信连接;
35.所述驱动与所述fpga通信连接;
36.所述fpga和所述驱动分别与多个所述nvme ssd盘连接;
37.所述驱动包括上述的一种基于fpga的raid卡驱动装置。
38.与现有技术相比,本发明的技术方案具有以下有益效果:
39.raid卡使用方便,将部分功能交给驱动,降低了fpga的开发难度,提高了开发的灵活性。
附图说明
40.构成本技术的一部分附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
41.图1是本发明优选实施例的raid卡驱动方法;
42.图2是本发明优选实施例的系统组成框图;
43.图3是优选实施例pcie枚举步骤;
44.图4是优选实施例对各nvme ssd盘进行初始化的步骤。
具体实施方式
45.本发明提供一种基于fpga的raid卡驱动方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
46.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的数据在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
47.实施例:
48.本发明提供一种基于fpga的raid卡驱动方法应用实例,其raid卡驱动方法如图1所示。
49.图2为一种基于fpga的raid卡驱动系统组成框图,系统包括主机、驱动、fpga、4 2磁盘阵列和2个独立使用磁盘阵列。
50.驱动首先完成pcie枚举,将fpga下属的2个pcie rc端口的配置axi_lite接口都直接映射到主机cpu地址空间,完成pcie rc端口下面的每个ssd的枚举和配置;通过读写fpga相关bar空间来访问rc下的各设备的pcie配置空间;其次,对各nvme ssd盘进行初始化。
51.参阅图3所示,pcie枚举的具体步骤如下:
52.a1:分配并配置总线,除fpga下属2个pcie rc本身,在访问其下边的子设备的pcie配置空间前都需要配置;
53.a2:遍历和配置,采用深度优先算法遍历所有子设备,配置子设备关掉中断,找到子设备id为pcie的capability并配置mps以及mrrs值,读取子设备读取子设备的pcie header type,如果为1,则其为桥类设备,说明其下还有其他的设备,对于该子设备,执行骤a1;如果为0,则非桥类设备,说明其为nvme ssd的插槽,执行步骤a3;
54.a3:记录该插槽的槽位是第几个槽位,给该槽位分配bar空间并回溯更新其父设备至rc的bar空间。
55.参阅图4所示,各nvme ssd盘进行初始化的步骤如下:
56.b1:逐个初始化4 2磁盘阵列和2个独立使用磁盘阵列中nvme ssd,每个nvme ssd先进行复位,再配置管理队列,再创建驱动用的io队列;
57.b2:根据nvme ssd盘记录的raid信息,配置好相关fpga寄存器,告知fpga raid模式和盘数量;
58.b3:创建fpga io队列,用于处理应用层下发给raid盘的命令;
59.b4:创建nvme ssd的io队列,供fpga使用;
60.b5:创建块设备,使用户得以使用raid盘;
61.b6:对于不在raid组里的盘,开放给用户直接使用。
62.另一方面,本发明还提供了一种基于fpga的raid卡驱动装置,包括:pcie枚举模块和nvme ssd盘初始化模块。其中,所述pcie枚举模块,用于将fpga下属的2个pcie rc端口的配置axi_lite接口都直接映射到cpu地址空间,完成pcie rc端口下面的每个ssd的枚举和配置;以及通过读写fpga相关bar空间来访问rc下的各设备的pcie配置空间。所述nvme ssd盘初始化模块,用于对各nvme ssd盘进行初始化。
63.具体地,所述pcie枚举模块包括:
64.总线分配及配置子模块,用于除fpga下属2个pcie rc本身外,配置fpga下边的子设备的pcie配置空间;
65.子设备遍历和配置子模块,用于遍历所有子设备,配置子设备关掉中断,找到子设备id为pcie的capability并配置mps以及mrrs值;
66.判断模块,用于读取子设备的pcie header type,并判断pcie header type是否为1,如果为1,则判断该子设备为桥类设备,说明其下还有其他的设备;如果为0,则判断该子设备为非桥类设备,说明其为nvme ssd的插槽;
67.槽位记录模块,用于当判断模块判断该子设备为非桥类设备时,记录插槽的槽位是第几个槽位,给该槽位分配bar空间并回溯更新其父设备至rc的bar空间。
68.综上所述,本技术采用基于fpga的raid卡驱动方法,解决了采用fpga直接驱动nvme ssd时,当出现坏盘时驱动会创建多个线程进行重建的问题,降低了fpga开发驱动的复杂度。
69.以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献