CN113342590B - NVMe设备调试功能实现方法、装置、设备及存储介质 - Google Patents
NVMe设备调试功能实现方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113342590B CN113342590B CN202110899143.0A CN202110899143A CN113342590B CN 113342590 B CN113342590 B CN 113342590B CN 202110899143 A CN202110899143 A CN 202110899143A CN 113342590 B CN113342590 B CN 113342590B
- Authority
- CN
- China
- Prior art keywords
- nvme
- command
- shared memory
- standard
- debugging
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 108
- 230000006870 function Effects 0.000 claims abstract description 79
- 230000008569 process Effects 0.000 claims abstract description 61
- 238000012545 processing Methods 0.000 claims description 40
- 238000004590 computer program Methods 0.000 claims description 15
- 239000004744 fabric Substances 0.000 claims description 7
- 230000008859 change Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 230000008676 import Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/221—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test buses, lines or interfaces, e.g. stuck-at or open line faults
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/263—Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了NVMe设备调试功能实现方法、装置、设备及存储介质。其中,方法包括预先创建共享内存;基于通过提示用户输入NVMe命令所需的参数信息生成NVMe标准命令,当检测到客户端发送标准NVMe请求之后,从共享内存读取该NVMe标准命令并将其发送至NVMe设备。将NVMe设备返回的命令执行结果写入至共享内存中,并通过从共享内存中读取命令执行结果进行调试结果反馈。本申请在实现对统一存储系统中的NVMe设备调试功能过程中,用户对NVMe协议理解要求不高,且NVMe调试功能的变动基本不影响核心代码。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种统一存储系统中的NVMe设备调试功能实现方法、装置、电子设备及可读存储介质。
背景技术
统一存储系统是一个能在单一设备上运行、管理文件和应用程序的存储系统,其实质是可以支持基于文件的网络附加存储以及基于数据块的存储区域网络的网络化的存储架构。NVMe(Non Volatile Memory Host Controller Interface Specification,非易失性内存主机控制器接口规范)设备也称为NVMe盘、SSD(Solid State Disk,固态硬盘)都是存储盘的演进方向,在厂商实现的统一存储系统中会提供功能全面、简单易用的对系统中接入的NVMe设备进行调试,这对于开发人员、项目实施人员及服务支持人员都有巨大的意义。
在通用的Linux系统环境中有较多的开源工具可供选择,如NVMe-cli等,通过这些工具可以在部署了Linux通用系统的服务器中实现对NVMe设备的各种调试如Identify命令等各种Admin command(即管理命令)、读写等常用的NVMe操作。基于效率及各种技术上的需求,通常厂家在统一存储系统中封装NVMe协议及更底层协议的实现,导致现有的这些为Linux通用系统设计的开源工具无法在厂家的统一存储系统中使用,必须由厂家自己实现产品中的NVMe设备调试功能。而对于目前提供NVMe调试接口的统一存储系统来说,用户需要手动组织NVMe命令中的数十字节的二进制指令来实现NVMe设备调试功能。由于统一存储系统对性能要求极高,这就要求核心代码精简,避免核心代码因为用户交互逻辑被污染。此外,NVMe协议本身比较复杂,这也导致了对调试接口的功能经常变更,而统一存储系统基于效率考虑通常由超大规模的C或C++代码实现,由于NVMe调试功能的需求变更对存储核心代码变更是不可接受的。基于此,用户手动组织NVMe命令中的数十字节的二进制指令来实现NVMe设备调试功能的这种现有方式要求用户对协议的理解极高。
发明内容
本申请提供了一种统一存储系统中的NVMe设备调试功能实现方法、装置、电子设备及可读存储介质,在实现对统一存储系统中的NVMe设备调试功能过程中,用户对NVMe协议理解要求不高,且NVMe调试功能的变动基本不影响核心代码。
为解决上述技术问题,本发明实施例提供以下技术方案:
本发明实施例一方面提供了一种统一存储系统中的NVMe设备调试功能实现方法,包括:
预先创建调试业务处理线程、客户端输入进程和共享内存;所述调试业务处理线程用于执行NVMe设备调试功能业务;所述客户端输入进程用于将客户端输入信息写入至所述共享内存,并从所述共享内存读取所述命令执行结果;
当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备;所述NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成;
将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈。
可选的,所述创建共享内存,包括:
调用所述调试业务处理线程创建请求共享内存及对应的请求信号量、回复共享内存及其对应的回复信号量。
可选的,所述当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备,包括:
当检测到所述客户端发送标准NVMe请求,调用所述客户端输入进程将所述标准NVMe请求对应的NVMe标准命令及目标对象标识写入至所述请求共享内存,并触发所述请求信号量;
当所述调试业务处理线程检测到所述请求信号量,从所述请求共享内存中读取所述NVMe标准命令及目标对象;
基于所述目标对象,将所述NVMe标准命令发送至NVMe设备。
可选的,所述将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈,包括:
将所述NVMe设备的返回值及所述命令执行结果写入至所述回复共享内存,同时触发所述回复信号量;
当所述客户端输入进程检测到所述回复信号量,从所述回复共享内存中读取所述命令执行结果;
调用所述客户端输入进程将所述命令执行结果写入标准数据或指定目标文件中。
可选的,所述当检测到客户端发送标准NVMe请求之前,还包括:
预先利用Python语言创建用于基于NVMe协议将输入指令生成NVMe标准命令的nvm脚本文件;
当调用所述nvm脚本文件生成所述NVMe标准命令,通过接口获得所述输入指令对应的NVMe标准命令,并提示用户输入目标环境;
其中,调用所述nvm脚本文件生成所述NVMe标准命令包括:
当检测到所述nvm脚本文件成功启动,向所述客户端展示所需输入的NVMe命令;
若同目录下存在与所述NVMe命令同名的目标Python模块,导入所述目标Python模块;
通过实例化所述目标Python模块中的对象将所述NVMe命令需要的参数提示给用户;
根据用户输入响应的参数完成对应NVMe命令的组装,生成所述NVMe标准命令。
可选的,预先创建客户端输入进程,所述提示用户输入目标环境之后,还包括:
若所述目标环境为本地,启动所述客户端输入进程,并将所述NVMe标准命令通过系统调用传递给所述客户端输入进程。
可选的,预先创建客户端输入进程,所述提示用户输入目标环境之后,还包括:
若所述目标环境为远程地址,通过Python fabric库执行目标机上的客户端输入进程传入所述NVMe标准命令,并获取返回结果。
本发明实施例另一方面提供了一种统一存储系统中的NVMe设备调试功能实现装置,包括:
接口创建模块,用于预先创建共享内存;
线程创建模块,用于预先创建调试业务处理线程和客户端输入进程;所述调试业务处理线程用于执行NVMe设备调试功能业务;所述客户端输入进程用于将客户端输入信息写入至所述共享内存,并从所述共享内存读取所述命令执行结果;
调试命令下发模块,用于当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备;所述NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成;
调试结果反馈模块,用于将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈。
本发明实施例还提供了一种电子设备,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前任一项所述统一存储系统中的NVMe设备调试功能实现方法的步骤。
本发明实施例最后还提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前任一项所述统一存储系统中的NVMe设备调试功能实现方法的步骤。
本申请提供的技术方案的优点在于,用户通过客户端在输入NVMe命令时,只需要根据系统提示输入所需信息,系统便会根据用户输入信息组装生成NVMe标准命令,不需要用户对NVMe协议理解太深,实用性更强。编译语言如C语言的客户端与统一存储系统中的主进程通过高效的共享内存作为统一调用接口的方式实现通用命令的交互,非侵入式地实现了统一存储系统中NVMe设备的调试功能,NVMe调试功能的变动基本不影响核心代码,保证了统一存储系统核心代码的精简,不被测试功能打乱。
此外,本发明实施例还针对统一存储系统中的NVMe设备调试功能实现方法提供了相应的实现装置、电子设备及可读存储介质,进一步使得所述方法更具有实用性,所述装置、电子设备及可读存储介质具有相应的优点。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
为了更清楚的说明本发明实施例或相关技术的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种统一存储系统中的NVMe设备调试功能实现方法的流程示意图;
图2为本发明实施例提供的示意性例子中的统一存储系统中的NVMe设备调试功能实现的交互流程示意图;
图3为本发明实施例提供的示意性例子的一种统一存储系统中的NVMe设备调试功能实现方法的流程示意图;
图4为本发明实施例提供的Python层类关系示意图;
图5为本发明实施例提供的统一存储系统中的NVMe设备调试功能实现装置的一种具体实施方式结构图;
图6为本发明实施例提供的电子设备的一种具体实施方式结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。
在介绍了本发明实施例的技术方案后,下面详细的说明本申请的各种非限制性实施方式。
首先参见图1,图1为本发明实施例提供的一种统一存储系统中的NVMe设备调试功能实现方法的流程示意图,本发明实施例可包括以下内容:
S101:预先创建共享内存。
本步骤的共享内存可看作为是客户端调试统一存储系统的NVMe设备的接口,共享内存是在统一存储系统中开辟的,客户端是用户输入指令的那一端,或者是说采用编码语言如C语言、C++语言进行编译的输入环境。
S102:当检测到客户端向共享内存发送标准NVMe请求,将从共享内存读取的NVMe标准命令发送至NVMe设备。
可以理解的是,在本申请中,用户在客户端编译NVMe命令并将编译好的NVMe命令即NVMe标准命令携带目标对象等信息生成的符合NVMe协议的标准NVMe请求,然后将该标准NVMe请求下发给统一存储系统,并将该标准NVMe请求写入至S101构建的共享内存中,统一存储系统从共享内存中读取NVMe标准命令,通过该NVMe标准命令实现NVMe设备调试功能。
其中,基于NVMe协议,NVMe标准命令由16个双字结构组成,共64字节,即Dword0~Dword15。这些命令分为两类,第一类是管理命令即Admin Command,例如如对盘或namespace的格式化,删除,识别identify操作等;另一类是读写命令也即NVM Command,例如数据读写或仲裁相关操作等,两类中的任何一个命令都有相应的在 Dword0~Dword15中各个字节或比特位的设值规定,NVMe设备通过读取这些Dword0~Dword15指令进行指令处理。由于NVMe标准命令都由NVMe协议所规定,且统一存储系统中所有对NVMe设备的操作最后都转化为对Admin Command或NVM Command的组装并寻址下发,但是这些组装是不对系统外部开发的。为了解决现有技术中对输入NVMe标准命令的用户要求对NVMe协议要有很深的理解的现状,本申请的用户在客户端输入调试NVMe设备的指令时,客户端会根据用户想要的NVMe标准命令向用户提示可组装生成该NVMe标准命令所需要的参数信息,客户端在接收到用户响应所输入的参数信息之后,根据这些参数信息组装生成NVMe标准命令,也即NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成。
S103:将NVMe设备返回的命令执行结果写入至共享内存中,并通过从共享内存中读取命令执行结果进行调试结果反馈。
在上个步骤将NVMe标准命令发送给NVMe设备如盘之后,NVMe设备会执行接收到的该NVMe标准命令,然后将NVMe标准命令的命令执行结果返回给统一存储系统,可将该命令执行结果及返回值写入至共享内存中,系统在反馈NVMe设备的调试结果时,会从共享内存中读取该命令执行结果,然后将该命令执行结果直接反馈至客户端,或者是写入标准数据或写入指定的目标文件中。
在本发明实施例提供的技术方案中,用户通过客户端在输入NVMe命令时,只需要根据系统提示输入所需信息,系统便会根据用户输入信息组装生成NVMe标准命令,不需要用户对NVMe协议理解太深,实用性更强。编译语言如C语言的客户端与统一存储系统中的主进程通过高效的共享内存作为统一调用接口的方式实现通用命令的交互,非侵入式地实现了统一存储系统中NVMe设备的调试功能,NVMe调试功能的变动基本不影响核心代码,保证了统一存储系统核心代码的精简,不被测试功能打乱。
需要说明的是,本申请中各步骤之间没有严格的先后执行顺序,只要符合逻辑上的顺序,则这些步骤可以同时执行,也可按照某种预设顺序执行,图1只是一种示意方式,并不代表只能是这样的执行顺序。
为了使所属领域技术人员清楚明白本申请的技术方案,本申请结合图2及图3阐述统一存储系统中的NVMe设备调试功能实现过程,可包括下述内容:
A0:创建调试业务处理线程和客户端输入进程。
其中,本实施例的客户端以C语言作为编译语言为例,相应的客户端输入进程即为图2所示的C输入进程,调试业务处理线程用于执行NVMe设备调试功能业务;客户端输入进程如图3中的nvm_c_client进程,用于将客户端输入信息写入至共享内存,并从共享内存读取命令执行结果。客户端包括Python层,如图3所示的左部分,Python层负责解决NVMe命令繁杂多变而导致的Dword0~Dword15组装负责的问题,在该层中实现针对具体命令的分类解析。
A1:调用调试业务处理线程创建请求共享内存。
A2:调用调试业务处理线程创建请求信号量。
A3:调用调试业务处理线程创建回复共享内存。
A4:调用调试业务处理线程创建回复信号量。
A5:调用客户端输入进程将客户端输入的NVMe标准命令写入至请求共享内存。
当检测到客户端发送标准NVMe请求,调用客户端输入进程将标准NVMe请求对应的NVMe标准命令及目标对象标识写入至请求共享内存,并触发请求信号量。
A6:客户端输入进程触发请求信号量。
A7:调试业务处理线程检测是否有请求信号量。
A8:当调试业务处理线程检测到请求信号量,从请求共享内存中读取NVMe标准命令及目标对象。
A9:基于目标对象,将NVMe标准命令发送至NVMe设备。
A10:调用调试业务处理线程将NVMe设备的返回值及命令执行结果写入至回复共享内存。
A11:调试业务处理线程触发回复信号量。
A12:客户端输入进程检测到回复信号量。
A13:客户端输入进程从回复共享内存中读取命令执行结果。
A14:调用客户端输入进程将命令执行结果写入标准数据或指定目标文件中。
在本实施例中,在统一存储系统的核心代码中增加一个调试业务处理线程,该线程创建共享内存及对应的同步信号量,当有客户向共享内存区发送标准NVMe请求时,客户端负责触发request同步信号量,该线程响应信号量并从共享内存中取标准格式的Dword0~Dword15NVMe命令及该命令对应的目标对象,并直接将该命令通过存储系统已有的寻址机制透明传输至驱动模块并发送至目标对象,最后等待处理结果及设备返回数据并写入共享内存并触发response信号量,客户端响应response信号量并从共享内存区取出返回结果。增加一个独立的C编译模块编译成独立进程(即nvm_c_client),该模块从标准输入或文件读入一条Dword0~Dword15标准NVMe命令及目标对象标识,并向共享内存中写入改request并点亮request信号量,然后等待response信号量并在触发后从共享内存读取返回结果写入标准数据或指定的目标文件。
由上可知,本实施例通过分层设计非侵入式的实现了存储系统中NVMe设备的调试功能,通过提供存储系统提供通用nvm_c_client进程与主存储系统通过共享内存实现通用命令交互,保证了存储系统核心代码的精简不被测试功能打乱。
在上述实施例中,对如何生成NVMe标准命令并没有进行限定,本申请结合图4还提供了一种实施方式,当检测到客户端发送标准NVMe请求之后之前,还可包括下述内容:
预先利用Python语言创建用于基于NVMe协议将输入指令生成NVMe标准命令的nvm脚本文件;
当调用nvm脚本文件生成NVMe标准命令,通过接口获得输入指令对应的NVMe标准命令,并提示用户输入目标环境。
其中,调用nvm脚本文件生成NVMe标准命令包括:
当检测到nvm脚本文件成功启动,向客户端展示所需输入的NVMe命令;若同目录下存在与NVMe命令同名的目标Python模块,导入目标Python模块;通过实例化目标Python模块中的对象将NVMe命令需要的参数提示给用户;根据用户输入响应的参数完成对应NVMe命令的组装,生成NVMe标准命令。
具体来说,在本实施例中,可在客户端预先安装Python层,Python层主要负责解决NVMe命令繁杂多变而导致的Dword0~Dword15组装负责的问题,在该层中实现针对具体命令的分类解析。主文件nvm.py启动后将要求客户输入具体的NVM command命令,如Identfiy等。主文件nvm.py中根据输入的NVM命令,利用Python的动态模块导入机制即importlib库查找同目录下是否有与指定的NVM command同名的Python模块,如果有利用importlib实现动态导入,否则提示该命令不存在或尚未实现,对应实现的计算机程序可为:
def getFunction(name):
try:
importlib.import_module(name)
return True
except Excepttion,e:
print‘The command you specified is not implement yet’
return False
如果目标指令同名的py文件即Python的脚本文件存在则证明该功能已实现,在nvm.py中动态导入该模块后利用Python的动态对象创建机制实例化目标模块中的对象,例如可通过计算机程序a=eval(name+’.’+’()’)。在调用eval函数实例化命令指令的对象时,如指定identify命令,加载identify.py,eval函数将动态实例化identity中的类Identify。将调用identify的初始化函数,在各个命令模块文件的主类如identify.py中的class identify中,将根据该类对应命令需要的参数如Identify需要的namespace,或者format指令用的LBA及保护信息等提示用户输入响应的参数并完成该类的初始化。所有的具体命令实现类如Identify.py中的class Identify将在该类内部逻辑中完成对应NVMe指令的组装。所有的具体命令实现类如Identify.py中的class Identify都将提供一个相同名称的函数接口,该接口将返回组装后的对应该命令的最终Dword0~Dword15指令。nvm.py中通过具体指令类的接口获得对应输入指令的Dword0~Dword15指令,提示用户通过标准输入键入目标环境
在本实施例中,目标环境即为NVMe标准命令的接收端,目标环境可为本机或远程地址。也就是说,基于客户端和统一存储系统是否在同一个硬件环境中安装如服务器,本实施例还提供了两种不同的实施方式,可包括:
若目标环境为本地,启动客户端输入进程,并将NVMe标准命令通过系统调用传递给客户端输入进程。
若目标环境为远程地址,通过Python fabric库执行目标机上的客户端输入进程传入NVMe标准命令,并获取返回结果。
具体的,nvm.py中判断如果目标环境为本地,直接通过os模块的system调用启动nvm_c_client进程并将组织好的指令通过系统调用传递给该进程,其中XXX为组织好的具体命令。对应的计算机程序可表示为:os.system(‘nvm_c_client XXX’)。os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作。如果用户指定的是远程的地址,则通过Python fabric库执行目标机上的nvm_c_client传入组织好的命令并获取返回结果,对应的计算机程序可为:
from fabric import Connection
c=Connection('X.X.X.X',user='X',port=X,connect_kwargs= {'password':'X})
c.run(‘nvm_c_client XXX’)
由上可知,本实施例在外围上借助Python及Fabric库的功能实现了易扩展及支持远程调试等功能,通过Python扩展提供丰富的客户端输入的方式实现高效、统一及易扩展的NVMe设备调试。
本发明实施例还针对统一存储系统中的NVMe设备调试功能实现方法提供了相应的装置,进一步使得方法更具有实用性。其中,装置可从功能模块的角度和硬件的角度分别说明。下面对本发明实施例提供的统一存储系统中的NVMe设备调试功能实现装置进行介绍,下文描述的统一存储系统中的NVMe设备调试功能实现装置与上文描述的统一存储系统中的NVMe设备调试功能实现方法可相互对应参照。
基于功能模块的角度,参见图5,图5为本发明实施例提供的统一存储系统中的NVMe设备调试功能实现装置在一种具体实施方式下的结构图,该装置可包括:
接口创建模块501,用于预先创建共享内存。
调试命令下发模块502,用于当检测到客户端发送标准NVMe请求之后,将从共享内存读取的NVMe标准命令发送至NVMe设备;NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成。
调试结果反馈模块503,用于将NVMe设备返回的命令执行结果写入至共享内存中,并通过从共享内存中读取命令执行结果进行调试结果反馈。
可选的,在本实施例的一些实施方式中,上述装置还可以包括线程创建模块,用于预先创建调试业务处理线程和客户端输入进程;调试业务处理线程用于执行NVMe设备调试功能业务;客户端输入进程用于将客户端输入信息写入至共享内存,并从共享内存读取命令执行结果。
作为本实施例的一种可选的实施方式,上述接口创建模块501可进一步用于:调用调试业务处理线程创建请求共享内存及对应的请求信号量、回复共享内存及其对应的回复信号量。
可选的,在本实施例的另一些实施方式中,上述调试命令下发模块502可进一步用于:当检测到客户端发送标准NVMe请求,调用客户端输入进程将标准NVMe请求对应的NVMe标准命令及目标对象标识写入至请求共享内存,并触发请求信号量;当调试业务处理线程检测到请求信号量,从请求共享内存中读取NVMe标准命令及目标对象;基于目标对象,将NVMe标准命令发送至NVMe设备。
作为本实施例的一种可选的实施方式,上述调试结果反馈模块503可进一步用于:将NVMe设备的返回值及命令执行结果写入至回复共享内存,同时触发回复信号量;当客户端输入进程检测到回复信号量,从回复共享内存中读取命令执行结果;调用客户端输入进程将命令执行结果写入标准数据或指定目标文件中。
可选的,在本实施例的另一些实施方式中,上述装置例如还可包括命令生成模块,用于预先利用Python语言创建用于基于NVMe协议将输入指令生成NVMe标准命令的nvm脚本文件;当调用nvm脚本文件生成NVMe标准命令,通过接口获得输入指令对应的NVMe标准命令,并提示用户输入目标环境;其中,调用nvm脚本文件生成NVMe标准命令包括:当检测到nvm脚本文件成功启动,向客户端展示所需输入的NVMe命令;若同目录下存在与NVMe命令同名的目标Python模块,导入目标Python模块;通过实例化目标Python模块中的对象将NVMe命令需要的参数提示给用户;根据用户输入响应的参数完成对应NVMe命令的组装,生成NVMe标准命令。
作为本实施例的一种可选的实施例,上述命令生成模块可包括远程处理单元和本地处理单元;
本地处理单元用于若目标环境为本地,启动客户端输入进程,并将NVMe标准命令通过系统调用传递给客户端输入进程。
远程处理单元用于若目标环境为远程地址,通过Python fabric库执行目标机上的客户端输入进程传入NVMe标准命令,并获取返回结果。
本发明实施例所述统一存储系统中的NVMe设备调试功能实现装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
由上可知,本发明实施例在实现对统一存储系统中的NVMe设备调试功能过程中,用户对NVMe协议理解要求不高,且NVMe调试功能的变动基本不影响核心代码。
上文中提到的统一存储系统中的NVMe设备调试功能实现装置是从功能模块的角度描述,进一步的,本申请还提供一种电子设备,是从硬件角度描述。图6为本申请实施例提供的电子设备在一种实施方式下的结构示意图。如图6所示,该电子设备包括存储器60,用于存储计算机程序;处理器61,用于执行计算机程序时实现如上述任一实施例提到的统一存储系统中的NVMe设备调试功能实现方法的步骤。
其中,处理器61可以包括一个或多个处理核心,比如6核心处理器、8核心处理器等。处理器61可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器61也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器61还可以集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器61还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器60可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器60还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器60至少用于存储以下计算机程序601,其中,该计算机程序被处理器61加载并执行之后,能够实现前述任一实施例公开的统一存储系统中的NVMe设备调试功能实现方法的相关步骤。另外,存储器60所存储的资源还可以包括操作系统602和数据603等,存储方式可以是短暂存储或者永久存储。其中,操作系统602可以包括Windows、Unix、Linux等。数据603可以包括但不限于统一存储系统中的NVMe设备调试功能实现结果对应的数据等。
在一些实施例中,上述电子设备还可包括有显示屏62、输入输出接口63、通信接口64或者称为网络接口、电源65以及通信总线66。其中,显示屏62、输入输出接口63比如键盘(Keyboard)属于用户接口,可选的用户接口还可以包括标准的有线接口、无线接口等。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备中处理的信息以及用于显示可视化的用户界面。通信接口64可选的可以包括有线接口和/或无线接口,如WI-FI接口、蓝牙接口等,通常用于在电子设备与其他电子设备之间建立通信连接。通信总线66可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extendedindustry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本领域技术人员可以理解,图6中示出的结构并不构成对该电子设备的限定,可以包括比图示更多或更少的组件,例如还可包括实现各类功能的传感器67。
本发明实施例所述电子设备的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
由上可知,本发明实施例在实现对统一存储系统中的NVMe设备调试功能过程中,用户对NVMe协议理解要求不高,且NVMe调试功能的变动基本不影响核心代码。
可以理解的是,如果上述实施例中的统一存储系统中的NVMe设备调试功能实现方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、磁碟或者光盘等各种可以存储程序代码的介质。
基于此,本发明实施例还提供了一种可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时如上任意一实施例所述统一存储系统中的NVMe设备调试功能实现方法的步骤。
本发明实施例所述可读存储介质的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的硬件包括装置及电子设备而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上对本申请所提供的一种统一存储系统中的NVMe设备调试功能实现方法、装置、电子设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (9)
1.一种统一存储系统中的NVMe设备调试功能实现方法,其特征在于,包括:
预先创建调试业务处理线程、客户端输入进程和共享内存;所述调试业务处理线程用于执行NVMe设备调试功能业务;所述客户端输入进程用于将客户端输入信息写入至所述共享内存,并从所述共享内存读取命令执行结果;
预先利用Python语言创建用于基于NVMe协议将输入指令生成NVMe标准命令的nvm脚本文件;当调用所述nvm脚本文件生成所述NVMe标准命令,通过接口获得所述输入指令对应的NVMe标准命令,并提示用户输入目标环境;
当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备;所述NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成;
将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈;
其中,所述调用所述nvm脚本文件生成所述NVMe标准命令包括:
当检测到所述nvm脚本文件成功启动,向所述客户端展示所需输入的NVMe命令;若同目录下存在与所述NVMe命令同名的目标Python模块,导入所述目标Python模块;通过实例化所述目标Python模块中的对象将所述NVMe命令需要的参数提示给用户;根据用户输入响应的参数完成对应NVMe命令的组装,生成所述NVMe标准命令。
2.根据权利要求1所述的统一存储系统中的NVMe设备调试功能实现方法,其特征在于,创建共享内存,包括:
调用所述调试业务处理线程创建请求共享内存及对应的请求信号量、回复共享内存及其对应的回复信号量。
3.根据权利要求2所述的统一存储系统中的NVMe设备调试功能实现方法,其特征在于,所述当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备,包括:
当检测到所述客户端发送标准NVMe请求,调用所述客户端输入进程将所述标准NVMe请求对应的NVMe标准命令及目标对象标识写入至所述请求共享内存,并触发所述请求信号量;
当所述调试业务处理线程检测到所述请求信号量,从所述请求共享内存中读取所述NVMe标准命令及目标对象;
基于所述目标对象,将所述NVMe标准命令发送至NVMe设备。
4.根据权利要求2所述的统一存储系统中的NVMe设备调试功能实现方法,其特征在于,所述将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈,包括:
将所述NVMe设备的返回值及所述命令执行结果写入至所述回复共享内存,同时触发所述回复信号量;
当所述客户端输入进程检测到所述回复信号量,从所述回复共享内存中读取所述命令执行结果;
调用所述客户端输入进程将所述命令执行结果写入标准数据或指定目标文件中。
5.根据权利要求1所述的统一存储系统中的NVMe设备调试功能实现方法,其特征在于,预先创建客户端输入进程,所述提示用户输入目标环境之后,还包括:
若所述目标环境为本地,启动所述客户端输入进程,并将所述NVMe标准命令通过系统调用传递给所述客户端输入进程。
6.根据权利要求1所述的统一存储系统中的NVMe设备调试功能实现方法,其特征在于,预先创建客户端输入进程,所述提示用户输入目标环境之后,还包括:
若所述目标环境为远程地址,通过Python fabric库执行目标机上的客户端输入进程传入所述NVMe标准命令,并获取返回结果。
7.一种统一存储系统中的NVMe设备调试功能实现装置,其特征在于,包括:
接口创建模块,用于预先创建共享内存;
线程创建模块,用于预先创建调试业务处理线程和客户端输入进程;所述调试业务处理线程用于执行NVMe设备调试功能业务;所述客户端输入进程用于将客户端输入信息写入至所述共享内存,并从所述共享内存读取命令执行结果;
命令生成模块,用于预先利用Python语言创建用于基于NVMe协议将输入指令生成NVMe标准命令的nvm脚本文件;当调用所述nvm脚本文件生成所述NVMe标准命令,通过接口获得所述输入指令对应的NVMe标准命令,并提示用户输入目标环境;所述调用所述nvm脚本文件生成所述NVMe标准命令包括:当检测到所述nvm脚本文件成功启动,向所述客户端展示所需输入的NVMe命令;若同目录下存在与所述NVMe命令同名的目标Python模块,导入所述目标Python模块;通过实例化所述目标Python模块中的对象将所述NVMe命令需要的参数提示给用户;根据用户输入响应的参数完成对应NVMe命令的组装,生成所述NVMe标准命令;
调试命令下发模块,用于当检测到客户端发送标准NVMe请求,将从所述共享内存读取的NVMe标准命令发送至NVMe设备;所述NVMe标准命令为将通过提示用户所输入的参数信息进行组装后所生成;
调试结果反馈模块,用于将所述NVMe设备返回的命令执行结果写入至所述共享内存中,并通过从所述共享内存中读取所述命令执行结果进行调试结果反馈。
8.一种电子设备,其特征在于,包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现如权利要求1至6任一项所述统一存储系统中的NVMe设备调试功能实现方法的步骤。
9.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述统一存储系统中的NVMe设备调试功能实现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110899143.0A CN113342590B (zh) | 2021-08-06 | 2021-08-06 | NVMe设备调试功能实现方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110899143.0A CN113342590B (zh) | 2021-08-06 | 2021-08-06 | NVMe设备调试功能实现方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113342590A CN113342590A (zh) | 2021-09-03 |
CN113342590B true CN113342590B (zh) | 2021-10-29 |
Family
ID=77481025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110899143.0A Active CN113342590B (zh) | 2021-08-06 | 2021-08-06 | NVMe设备调试功能实现方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113342590B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11966343B2 (en) | 2021-07-19 | 2024-04-23 | Samsung Electronics Co., Ltd. | Universal mechanism to access and control a computational device |
CN116932241A (zh) * | 2022-04-08 | 2023-10-24 | 华为云计算技术有限公司 | 一种服务启动方法及相关装置 |
CN116662038B (zh) * | 2023-07-25 | 2023-10-27 | 菲特(天津)检测技术有限公司 | 基于共享内存的工业信息检测方法、装置、设备及介质 |
CN117806892B (zh) * | 2024-02-29 | 2024-06-14 | 山东云海国创云计算装备产业创新中心有限公司 | 存储芯片模型测试方法、装置、通信设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109308274A (zh) * | 2018-12-03 | 2019-02-05 | 郑州云海信息技术有限公司 | 一种转接装置和ssd硬盘开发调试系统 |
CN109460333A (zh) * | 2018-11-01 | 2019-03-12 | 郑州云海信息技术有限公司 | 一种存储系统的功能测试方法、装置及相关设备 |
CN110689915A (zh) * | 2018-07-06 | 2020-01-14 | 爱思开海力士有限公司 | 经由主机/串行接口的远程ssd调试及其执行方法 |
CN111209151A (zh) * | 2019-12-31 | 2020-05-29 | 苏州浪潮智能科技有限公司 | 基于linux的NVME SSD热拔插测试方法、系统、终端及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314218A (zh) * | 2010-07-01 | 2012-01-11 | 李峰 | 一种智能化的手机上的人机交互方法和系统 |
US9430412B2 (en) * | 2013-06-26 | 2016-08-30 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over Ethernet-type networks |
US10628353B2 (en) * | 2014-03-08 | 2020-04-21 | Diamanti, Inc. | Enabling use of non-volatile media-express (NVMe) over a network |
US10592122B2 (en) * | 2015-03-31 | 2020-03-17 | Sandisk Technologies Llc | Inherent adaptive trimming |
CN107992436B (zh) * | 2016-10-26 | 2021-04-09 | 华为技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
US10580512B2 (en) * | 2018-02-21 | 2020-03-03 | Western Digital Technologies, Inc. | Storage device with debug namespace |
CN109165105A (zh) * | 2018-08-17 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种主机和物理机系统 |
CN110825647B (zh) * | 2019-11-14 | 2022-05-13 | 广东华晟数据固态存储有限公司 | 一种自动化测试逻辑设备接口的测试方法 |
-
2021
- 2021-08-06 CN CN202110899143.0A patent/CN113342590B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110689915A (zh) * | 2018-07-06 | 2020-01-14 | 爱思开海力士有限公司 | 经由主机/串行接口的远程ssd调试及其执行方法 |
CN109460333A (zh) * | 2018-11-01 | 2019-03-12 | 郑州云海信息技术有限公司 | 一种存储系统的功能测试方法、装置及相关设备 |
CN109308274A (zh) * | 2018-12-03 | 2019-02-05 | 郑州云海信息技术有限公司 | 一种转接装置和ssd硬盘开发调试系统 |
CN111209151A (zh) * | 2019-12-31 | 2020-05-29 | 苏州浪潮智能科技有限公司 | 基于linux的NVME SSD热拔插测试方法、系统、终端及存储介质 |
Non-Patent Citations (3)
Title |
---|
Memory及其controller芯片I_O测试;马卓凡;《中国集成电路》;20180331;第60-67页 * |
PCI-Express Gen4.0 based Portable SSD Test System;Jung-Hoon Cho 等;《 2019 International Conference on Electronics, Information, and Communication (ICEIC)》;20190506;第1-4页 * |
基于用户态的NVMe驱动设计;白子秋 等;《计算机应用与软件》;20190131;第36卷(第1期);第28-33页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113342590A (zh) | 2021-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113342590B (zh) | NVMe设备调试功能实现方法、装置、设备及存储介质 | |
TWI438684B (zh) | 在分散式系統中漸進地實施宣告模型之方法及電腦程式儲存產品 | |
US20240045850A1 (en) | Systems and methods for database orientation transformation | |
CN103914315A (zh) | 驱动程序的配置方法 | |
US9184991B2 (en) | Method and apparatus for developing service processor solutions | |
EP1906275B1 (en) | Natively retaining project documentation in a controller | |
US20070288937A1 (en) | Virtual Device Driver | |
JP2007523407A (ja) | コンピュータプログラムを構成する方法 | |
CN106909362A (zh) | Bmc固件生成的方法和装置、bmc系统启动的方法和装置 | |
CN109460268B (zh) | 应用参数配置方法、装置和系统 | |
CN112395843A (zh) | 一种基于php代码的业务处理方法、装置及设备和介质 | |
KR101747424B1 (ko) | 애플리케이션 설계와 구현을 통합하는 객체 지향 프로그래밍 장치, 및 방법 | |
CN110543113B (zh) | 机器人硬件组装及管理方法、设备、介质、系统、前端组装客户端及机器人本体运行系统 | |
CN116301596A (zh) | 一种软件raid构建方法、装置、设备及存储介质 | |
CN113703781B (zh) | 存储系统接口生成方法、装置、电子设备及可读存储介质 | |
CN106600226A (zh) | 用于优化流程管理系统的方法及装置 | |
CN113360379B (zh) | 程序测试环境创建方法和程序测试环境创建装置 | |
KR101114038B1 (ko) | 공통 언어 런타임 언어에서의 리소스에 대한 어드레스 지원 | |
CN114661375A (zh) | 应用集成方法及装置 | |
US7930708B2 (en) | Device control system, device control method, and device control program | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 | |
CN111159301A (zh) | 一种基于智能合约的数据创建方法、装置、设备及存储介质 | |
CN110515671A (zh) | 初始化方法、初始化装置、终端设备及可读存储介质 | |
CN112631915B (zh) | 一种pcie设备软件仿真的方法、系统、设备及介质 | |
Borycki | Programming for the Internet of Things: Using Windows 10 IoT Core and Azure IoT Suite |
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 |