本申请涉及服务器,具体而言,涉及一种队列处理方法、装置、服务器、电子设备和存储介质。
背景技术:
1、随着业界对存储设备性能需求的不断提升,具有更好读写性能的nvme(nonvolatile memory express,非易失性内存主机控制器接口规范)ssd(solid state drive,固态硬盘)正在成为存储界的主流设备。nvme ssd采用的是nvme协议规范,nvme不仅仅是逻辑上的协议接口,还是一种指令标准,一种指定协议。在该协议中,存储设备通过sq(submission queue,提交队列)、cq(completion queue,完成队列)和db(doorbell,队列门铃)实现与主机设备的指令和数据交互。简单来说,主机设备将准备好的命令放置到sq中,通过db通知存储设备去sq中取命令;存储设备完成对命令的处理后,将完成消息放置到cq中,通过db告知主机设备已完成命令的处理。
2、为了更快的处理速度、更大的数据吞吐量,nvme协议支持64k(协议支持的上限)大小的队列数目和64k大小的队列深度,队列数量和深度可以由主机设备通过命令灵活设置。当ssd处于大压力的io(input output,数据读写)业务场景时,cq可能处于“满”的状态,此时存储设备无法向cq中放置完成消息,如果主机设备长时间无法收到命令的完成消息,会产生io超时错误。
3、针对此问题,业界一般通过重发机制将先前未发出的命令等待cq有可用空间时,将命令重发出去。然而在大压力业务场景下,需要重发的命令非常多,并不能有效地解决数据读写超时的技术问题。
技术实现思路
1、本申请提供一种队列处理方法、装置、服务器、电子设备和存储介质,用以解决现有技术中产生数据读写超时错误的技术问题。
2、本申请提供一种队列处理方法,包括:
3、获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值;
4、在所述反压启用标识符为真且所述空闲条目数量小于所述预设反压阈值的情况下,将所述当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为不可读;
5、其中,所述提交队列对应的控制寄存器的读写状态用于控制存储设备从所述提交队列中获取主机设备下发的数据读写命令。
6、根据本申请提供的一种队列处理方法,所述获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值之前,所述方法包括:
7、基于所述存储设备同时处理数据读写命令的数量和/或所述当前完成队列的队列深度,确定所述当前完成队列对应的预设反压阈值;
8、将所述当前完成队列对应的预设反压阈值写入所述当前完成队列对应的第一控制寄存器。
9、根据本申请提供的一种队列处理方法,所述将所述当前完成队列对应的预设反压阈值写入所述当前完成队列对应的第一控制寄存器之后,所述方法包括:
10、基于所述主机设备中的队列创建信息,确定所述当前完成队列对应的提交队列;
11、获取所述提交队列的队列标识;
12、将所述提交队列的队列标识写入所述当前完成队列对应的第二控制寄存器。
13、根据本申请提供的一种队列处理方法,所述将所述提交队列的队列标识写入所述当前完成队列对应的第二控制寄存器之后,所述方法包括:
14、将反压启用标识符设置为真,并将所述反压启用标识符写入完成队列管理控制寄存器。
15、根据本申请提供的一种队列处理方法,所述将所述当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为不可读,包括:
16、基于所述当前完成队列对应的第二控制寄存器,获取所述当前完成队列对应的提交队列的队列标识;
17、基于所述当前完成队列对应的提交队列的队列标识,确定所述提交队列对应的控制寄存器,并将所述提交队列对应的控制寄存器的读写状态设置为不可读。
18、根据本申请提供的一种队列处理方法,所述获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值之后,所述方法包括:
19、在所述反压启用标识符为假或者所述空闲条目数量大于或者等于所述预设反压阈值的情况下,将所述当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为可读,以使所述存储设备从所述提交队列中获取所述主机设备下发的数据读写命令。
20、根据本申请提供的一种队列处理方法,
21、本申请还提供一种队列处理装置,包括:
22、获取单元,用于获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值;
23、处理单元,用于在所述反压启用标识符为真且所述空闲条目数量小于所述预设反压阈值的情况下,将所述当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为不可读;
24、其中,所述提交队列对应的控制寄存器的读写状态用于控制存储设备从所述提交队列中获取主机设备下发的数据读写命令。
25、本申请还提供一种服务器,包括处理器;
26、所述处理器中设置有上述的队列处理装置。
27、本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述队列处理方法。
28、本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述队列处理方法。
29、本申请提供的队列处理方法、装置、服务器、电子设备和存储介质,通过获取反压启用标识符可以识别主机设备是否下发了启用反压的命令;通过获取当前完成队列的空闲条目数量,以及当前完成队列对应的预设反压阈值,可以判断当前完成队列的条目占用情况;在反压启用标识符为真且空闲条目数量小于预设反压阈值的情况下,即存在当前完成队列的条目即将被完成消息全部占用的情况下,将当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为不可读,可以阻止存储设备获取提交队列的新的数据读写命令,给存储设备和提交队列提供缓冲时间,在存储设备处理数据读写命令结束后,能够及时地将完成消息放置到完成队列中,也使主机设备可以及时收到命令的完成消息,防止产生数据读写超时错误,本申请实施例提供的队列处理方法无需使用重发机制将未发出的命令进行重发操作,减少了队列处理的操作步骤,提高了数据读写的效率。
1.一种队列处理方法,其特征在于,包括:
2.根据权利要求1所述的队列处理方法,其特征在于,所述获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值之前,所述方法包括:
3.根据权利要求2所述的队列处理方法,其特征在于,所述将所述当前完成队列对应的预设反压阈值写入所述当前完成队列对应的第一控制寄存器之后,所述方法包括:
4.根据权利要求3所述的队列处理方法,其特征在于,所述将所述提交队列的队列标识写入所述当前完成队列对应的第二控制寄存器之后,所述方法包括:
5.根据权利要求1所述的队列处理方法,其特征在于,所述将所述当前完成队列对应的提交队列对应的控制寄存器的读写状态设置为不可读,包括:
6.根据权利要求1至5任一项所述的队列处理方法,其特征在于,所述获取反压启用标识符、当前完成队列的空闲条目数量,以及所述当前完成队列对应的预设反压阈值之后,所述方法包括:
7.一种队列处理装置,其特征在于,包括:
8.一种服务器,其特征在于,包括处理器;
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述的队列处理方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的队列处理方法。