CN116755639A - 闪存接口的性能评估方法及相关装置 - Google Patents
闪存接口的性能评估方法及相关装置 Download PDFInfo
- Publication number
- CN116755639A CN116755639A CN202311041826.8A CN202311041826A CN116755639A CN 116755639 A CN116755639 A CN 116755639A CN 202311041826 A CN202311041826 A CN 202311041826A CN 116755639 A CN116755639 A CN 116755639A
- Authority
- CN
- China
- Prior art keywords
- command
- state
- execution
- executor
- time
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 137
- 238000011156 evaluation Methods 0.000 title claims abstract description 30
- 238000000034 method Methods 0.000 claims description 47
- 230000005540 biological transmission Effects 0.000 claims description 44
- 238000004088 simulation Methods 0.000 claims description 26
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 3
- 230000000875 corresponding effect Effects 0.000 description 80
- 238000010586 diagram Methods 0.000 description 28
- 230000001276 controlling effect Effects 0.000 description 25
- 230000008569 process Effects 0.000 description 22
- 238000012360 testing method Methods 0.000 description 15
- 238000012546 transfer Methods 0.000 description 7
- 239000007787 solid Substances 0.000 description 6
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000008187 granular material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请实施例涉及存储设备应用领域,公开了一种闪存接口的性能评估方法及相关装置,闪存接口的性能评估方法包括:获取IO模型的信息;根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列;根据命令队列的状态执行IO命令;根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽。通过根据IO模型的信息生成IO命令,将若干个IO命令存放至不同的命令队列,并根据命令队列的状态执行IO命令,以及根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽,本申请能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能,而不依赖任何硬件实现。
Description
技术领域
本申请涉及存储设备应用领域,特别是涉及一种闪存接口的性能评估方法及相关装置。
背景技术
闪存设备,例如:固态硬盘(Solid State Drives,SSD),是采用固态电子存储芯片阵列而制成的硬盘,固态硬盘包括控制单元和存储单元(FLASH存储芯片或 DRAM存储芯片)。在对闪存设备进行性能评估时,需要评估闪存接口的性能。
目前,通常采用先计算读(写)请求数据传输时间和读(写)请求等待时间,然后根据读(写)请求等待时间和(n-1)*读(写)请求数据传输时间的关系,确定读(写)带宽的方式评估闪存接口的性能,其中,n为一个通道内裸片(Die)的数量。然而,这种方式只能针对纯读和纯写场景进行评估,无法评估混合读写场景下闪存接口的性能;且未考虑命令和地址传输时间及查询时间,性能评估不够准确。
发明内容
本申请实施例提供一种闪存接口的性能评估方法及相关装置,以准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能。
本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种闪存接口的性能评估方法,包括:
获取IO模型的信息;
根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列;
根据命令队列的状态执行IO命令;
根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽。
在一些实施例中,IO模型的信息包括命令类型、每一种命令类型对应的命令数据大小、每一种命令类型对应的带宽占比;
根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列,包括:
根据带宽占比,计算每一种命令类型对应的命令类型数量占比;
根据命令类型数量占比,确定每种命令类型对应的命令类型占比区间;
基于随机算法生成一个随机数,计算随机数对应的区间概率,其中,随机数对应的区间概率=随机数的数值/随机数的区间范围;
根据区间概率对应的命令类型占比区间,确定待生成的IO命令的命令类型,以生成IO命令;
将每一IO命令依次存放至不同的命令队列,直至生成的IO命令的个数大于或等于预设命令个数阈值。
在一些实施例中,该闪存接口的性能评估方法应用于闪存命令执行模拟器,闪存命令执行模拟器包括命令模拟执行器,命令模拟执行器包括队列调度器、写命令执行器和读命令执行器,命令队列与队列调度器一一对应;
命令队列的状态包括空闲状态和执行状态;
根据命令队列的状态执行IO命令,包括:
控制队列调度器遍历命令队列,获取处于空闲状态的命令队列中的IO命令;
根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间;
根据第一执行时间,控制队列调度器更新命令执行总时间和队列深度;
控制队列调度器将命令队列的状态修改为执行状态,并将当前队列的开始执行时间设置为更新后的命令执行总时间。
在一些实施例中,根据命令队列的状态执行IO命令,还包括:
控制写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令,以得到第二执行时间和IO命令的执行状态;
根据第二执行时间,控制队列调度器更新命令执行总时间;
在IO命令的执行状态为完成状态时,控制队列调度器将命令队列的状态修改为空闲状态,其中,IO命令的执行状态包括未完成状态和完成状态。
在一些实施例中,根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间,包括:
若写命令执行器处于发送命令状态,则控制写命令执行器计算发送写命令和地址的时间、数据传输时间与第一执行时间,并确定IO命令的执行状态为未完成状态,其中,第一执行时间=发送写命令和地址的时间+数据传输时间;
若写命令执行器不处于发送命令状态,则控制写命令执行器执行写查询命令,并记录写查询命令对应的写查询时间;
在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,确定IO命令的执行状态为完成状态,并确定第一执行时间为所述写查询时间;
在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,确定IO命令的执行状态为未完成状态,并确定第一执行时间为写查询时间。
在一些实施例中,根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间,还包括:
若读命令执行器处于发送命令状态,则控制读命令执行器计算发送读命令和地址的时间与第一执行时间,并确定IO命令的执行状态为未完成状态;
若读命令执行器不处于发送命令状态,则控制读命令执行器执行读查询命令,并记录读查询命令对应的读查询时间;
在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,控制读命令执行器进行数据传输,并计算数据传输时间;
确定IO命令的执行状态为完成状态,并计算第一执行时间;
在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,确定IO命令的执行状态为未完成状态,并确定第一执行时间为读查询时间。
在一些实施例中,每种命令类型对应的闪存接口带宽=闪存设备的通道数目*命令数据大小*IO命令的数量/命令执行总时间。
第二方面,本申请实施例提供一种闪存命令执行模拟器,应用如第一方面所述的闪存接口的性能评估方法,闪存命令执行模拟器包括:
命令生成器,用于根据IO模型的信息,生成IO命令,并将若干个IO命令存放至不同的命令队列;
命令模拟执行器,用于根据命令队列的状态,执行IO命令。
在一些实施例中,命令模拟执行器包括队列调度器、写命令执行器和读命令执行器,其中,
队列调度器,用于控制写命令执行器或读命令执行器执行IO命令,得到第一执行时间或第二执行时间,以及IO命令的执行状态,以更新命令执行总时间和命令队列的状态,其中,命令队列的状态包括空闲状态和执行状态;
写命令执行器,用于执行写命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态,其中,IO命令的执行状态包括未完成状态和完成状态;
读命令执行器,用于执行读命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态。
第三方面,本申请实施例提供一种存储控制芯片,包括:
如第二方面的闪存命令执行模拟器。
第四方面,本申请实施例提供一种闪存设备,包括:
如第三方面的存储控制芯片;
至少一个闪存介质,与存储控制芯片通信连接。
第五方面,本申请实施例还提供了一种非易失性计算机可读存储介质,非易失性计算机可读存储介质存储有计算机可执行指令,计算机可执行指令用于使闪存设备能够执行第一方面的闪存接口的性能评估方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供一种闪存接口的性能评估方法,该闪存接口的性能评估方法包括:获取IO模型的信息;根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列;根据命令队列的状态执行IO命令;根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽。通过根据IO模型的信息生成IO命令,将若干个IO命令存放至不同的命令队列,并根据命令队列的状态执行IO命令,以及根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽,本申请能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能,而不依赖任何硬件实现。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本申请实施例提供的一种闪存设备的结构示意图;
图2是本申请实施例提供的一种读命令的执行过程示意图;
图3是本申请实施例提供的一种闪存接口的性能评估方法的流程示意图;
图4是图3中的步骤S302的细化流程示意图;
图5是图3中的步骤S303的一种细化流程示意图;
图6是图5中的步骤S332的一种细化流程示意图;
图7是图5中的步骤S332的另一种细化流程示意图;
图8是图3中的步骤S303的另一种细化流程示意图;
图9是本申请实施例提供的闪存接口的性能评估方法的整体流程示意图;
图10是本申请实施例提供的一种闪存命令执行模拟器的结构示意图;
图11是本申请实施例提供的一种命令模拟执行器的详细结构示意图;
图12是本申请实施例提供的一种命令生成器的执行过程示意图;
图13是本申请实施例提供的一种队列调度器的执行过程示意图;
图14是本申请实施例提供的一种写命令执行器的执行过程示意图;
图15是本申请实施例提供的一种读命令执行器的执行过程示意图;
图16是本申请实施例提供的一种存储控制芯片的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,下面所描述的本申请各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
下面结合说明书附图具体地阐述本申请的技术方案。
请参阅图1,图1是本申请实施例提供的一种闪存设备的结构示意图;
如图1所示,闪存设备100包括连接器101、存储控制芯片102、其他外围单元103、缓存单元104和闪存介质105。
其中,连接器101,连接存储控制芯片102与主机,用于与主机通信,主机例如:计算机或者服务器;存储控制芯片102,连接连接器101、其他外围单元103、缓存单元104和闪存介质105,用于作为控制运算单元,管理闪存设备的内部系统,存储控制芯片102包括但不限于固态硬盘控制器;外围单元103,连接存储控制芯片102,包括串口、传感器、寄存器、电源芯片等部件;缓存单元104,连接存储控制芯片102,作为缓存、算法表存储单元,缓存单元104一般为动态随机存取存储器(Dynamic Random Access Memory,DRAM)。
其中,闪存介质105,作为闪存设备100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,作为存储单元,用于存储用户数据、系统数据等。存储控制芯片102与闪存介质105之间呈现多个通道,一个通道独立连接一个闪存介质,例如:通道0连接一个闪存介质、通道1连接一个闪存介质、……、通道x连接一个闪存介质。其中,闪存介质105的特性是写入之前,必须进行擦除,且每个闪存擦除次数有限,
对于闪存, 裸片(Die)是独立执行命令的单元。闪存设备,例如:固态硬盘, 通常包括多个通道,每个通道可以并行执行命令和数据传输。每个通道连接多个选通信号(ChipEnable,CE), 在每个通道中,CE可以连接到多个Die, 通道内的Die的命令和数据传输只能串行执行。
Die上面的命令执行通常由以下几部分组成:命令和地址、等待时间、数据传输,这些部分共同协作,完成Die上面的命令执行过程。当一个Die执行命令时,它会占用通道的一部分时间来传输命令和地址,但需要一段时间等待闪存的状态准备就绪进行。在这个等待时间内,通道能被其他Die使用。在读取和写入操作中,数据传输需要占用通道的一部分时间。
请参阅图2,图2是本申请实施例提供的一种读命令的执行过程示意图;
在本申请实施例中,DQ[7:0]表示数据线或数据总线,用于传输读取、写入或其他操作的数据;(Read/Busy)信号用于指示闪存设备是否正在执行读取操作并且是否忙碌。/>表示闪存的时序约束,即命令发送之后,需要等待/>时间结束才能去查询闪存的状态是否准备就绪。
如图2所示,一个Die执行一条读命令时,先发送读命令和地址,例如:读命令和地址为00h-C1-C2-R1-R2-R3-30h,其中,00h -30h是读命令,C1-C2-R1-R2-R3是地址;然后需要等待闪存的状态准备就绪,这个读取等待时间被称为,/>与闪存的原厂规格相关,不同原厂的闪存参数可能有所差异。在/>时间内,存储控制芯片可以切换到通道内其他的Die,以执行其他命令,但是,通常情况下,对于不支持独立多平面读的闪存,每个Die只能同时执行一条命令。可以理解的是,通常/>不是一个绝对固定的值,存储控制芯片需要不停地取查询闪存的状态是否准备就绪, 查询到闪存的状态准备就绪之后才开始读取数据。
在等待时间结束后,发送命令,例如:发送05h-C1-C2-R1-R2-R3-E0h命令,以选择特定的闪存芯片或通道进行操作,并通过选择特定的块(C1、C2)和页(R1、R2、R3)指定要读取的数据位置,其中,E0h命令用于结束闪存操作。在等待/>时间结束后,进行数据传输,传输的数据例如:R-Data。可以理解的是,在闪存操作结束后,到进行数据传输之间的等待时间被称为/>,这个时间是为了确保闪存芯片内部的电荷状态稳定,并允许必要的电路切换和准备工作完成。
同理,与读取等待时间类似,擦除和写入操作分别对应一个等待时间,例如:擦除等待时间/>,写入等待时间/>。
目前,现有的闪存接口的性能评估方法只能针对纯读和纯写场景进行性能评估。下面对纯读场景下的方案进行说明:假定一个通道上面有n个Die,每个读请求数据大小为m,读请求数据传输时间为,读请求等待时间为/>,那么有两种情况:
1、当时,意味着数据传输时间小于读请求等待时间,也就是说在/>+/>的时间内可以完成n个读命令,那么读带宽就是:。
2、当时,意味着通道利用率非常高,没有等待间隙,那么读带宽就是:/>。
纯写场景下的方案与此相似,在此不再赘述。由于读(写)请求数据传输时间与读(写)请求等待时间不同,所以上述方案只能针对纯读和纯写场景进行评估,无法评估混合读写场景下闪存接口的性能,而且上述方案没有考虑命令和地址传输时间以及查询时间,带宽评估不够准确。
基于此,本申请实施例提供一种闪存接口的性能评估方法,通过根据IO模型的信息生成IO命令,将若干个IO命令存放至不同的命令队列,并根据命令队列的状态执行IO命令,以及根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽,本申请能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能,而不依赖任何硬件实现。
请参阅图3,图3是本申请实施例提供的一种闪存接口的性能评估方法的流程示意图;
其中,该闪存接口的性能评估方法,应用于闪存设备,具体的,该闪存接口的性能评估方法应用于闪存命令执行模拟器,闪存命令执行模拟器包括命令生成器和命令模拟执行器。
如图3所示,该闪存接口的性能评估方法,包括:
步骤S301:获取IO模型的信息;
具体的,命令生成器获取需要进行性能评估的IO模型的信息,其中,IO模型的信息包括命令类型、每一种命令类型对应的命令数据大小、每一种命令类型对应的带宽占比。
步骤S302:根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列;
具体的,命令生成器将每一种命令类型对应的带宽占比转换为每种命令类型对应的命令类型数量占比,在满足不同命令类型对应的命令类型数量占比的基础上,随机生成IO命令,并将生成的IO命令均衡地存放至不同的命令队列。
请参阅图4,图4是图3中的步骤S302的细化流程示意图;
如图4所示,步骤S302:根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列,包括:
步骤S321:根据带宽占比,计算每一种命令类型对应的命令类型数量占比;
具体的,命令生成器根据每一种命令类型对应的带宽占比与相应的命令数据大小的比值,计算每一种命令类型对应的命令类型数量占比,其中,每一种命令类型对应的命令类型数量占比为该种命令类型对应的命令类型数量与所有种类的命令类型对应的命令类型数量之和的比例,一种命令类型对应的命令类型数量占比=该命令类型对应的带宽占比与命令数据大小的比值/每一种命令类型对应的带宽占比与命令数据大小的比值之和。其中,命令类型包括读命令、写命令、擦除命令中的至少一种。
例如:有N种命令类型,每一种命令类型对应的命令数据大小分别是d0、d1、……、dn-1,每一种命令类型对应的带宽占比分别是b0、b1、……、bn-1。当带宽为1时,命令类型i的带宽为1*bi,命令类型i对应的命令类型数量为1*bi/di,那么命令类型i对应的命令类型数量占比为:(bi/di)/(b0/d0+b1/d1+……+bn-1/dn-1)。
例如:某IO模型有两种命令类型:读命令和写命令,读命令对应的命令数据大小为4K,写命令对应的命令数据大小为48K,两种命令类型对应的带宽占比均为50%,则读命令对应的命令类型数量占比为:(0.5/4)/(0.5/4+0.5/48)≈92.3%。
可以反推一下带宽来验证:读命令带宽=92.3%*4K≈(1-92.3%)*48K,可以看出,上述方法可以准确地将每一种命令类型对应的带宽占比转换为每一种命令类型对应的命令类型数量占比。
进一步地按照上述方式,可以得到不同的命令类型对应的命令类型数量占比。
具体的,请参阅表1,表1是本申请实施例提供的一种不同的命令类型与其对应的命令类型数量占比的示意表;
表1
进一步地,命令生成器可以根据表1,在满足不同命令类型对应的命令类型数量占比的基础上,随机生成IO命令序列。
步骤S322:根据命令类型数量占比,确定每种命令类型对应的命令类型占比区间;
具体的,命令生成器根据不同命令类型对应的命令类型数量占比,确定每种命令类型对应的命令类型占比区间,其中,命令类型占比区间为命令类型数量占比对应的概率区间。
请参阅表2,表2是本申请实施例提供的一种不同的命令类型与其对应的命令类型占比区间的示意表;
表2
如表2所示,命令类型1对应的命令类型数量占比为p0,则命令类型1对应的命令类型占比区间为[0,p0];命令类型2对应的命令类型数量占比为p1,则命令类型2对应的命令类型占比区间为(p0,p0+p1];依次类推,……,命令类型n-1对应的命令类型数量占比为pn-1,则命令类型n-1对应的命令类型占比区间为(p0+p1+……+ pn-1,1]。
在本申请实施例中,通过命令生成器根据命令类型数量占比,确定每种命令类型对应的命令类型占比区间,本申请能够便于后续根据生成的随机数确定需要生成的IO命令的命令类型,并且能够保证生成的IO命令满足该种命令类型对应的命令类型数量占比。
步骤S323:基于随机算法生成一个随机数,计算随机数对应的区间概率;
具体的,命令生成器基于随机算法生成一个随机数,并计算该随机数对应的区间概率,其中,随机算法用于生成随机数,随机算法包括但不限于概率算法、蒙特卡罗算法等,随机数对应的区间概率=随机数的数值/随机数的区间范围,随机数的区间范围为可生成的随机数的取值范围。
例如:随机数的区间范围为[0,N],当前生成的随机数为m(m<N),则随机数对应的区间概率x=m/N。
步骤S324:根据区间概率对应的命令类型占比区间,确定待生成的IO命令的命令类型,以生成IO命令;
具体的,命令生成器在得到随机数对应的区间概率后,确定该区间概率所在的命令类型占比区间,并确定待生成的IO命令的命令类型为该命令类型占比区间对应的命令类型,从而生成IO命令。
步骤S325:将每一IO命令依次存放至不同的命令队列,直至生成的IO命令的个数大于或等于预设命令个数阈值。
具体的,命令生成器将生成的IO命令依次存放至不同的命令队列,直至生成的IO命令的个数大于或等于预设命令个数阈值,其中,预设命令个数阈值表示命令生成器能够生成的IO命令的个数的上限,预设命令个数阈值可由本领域技术人员根据实际情况进行设置,在本申请实施例不做限制。可以理解的是,闪存设备的一个通道具有多个Die,每个Die可以独立执行命令,所以命令队列的个数就是一个通道内Die的个数。
在一些实施例中,对于同一个Die上的每个平面(plane)可以并行执行IO命令的闪存设备,命令队列的个数等于通道内Die的个数乘以平面的个数。
步骤S303:根据命令队列的状态执行IO命令;
具体的,命令模拟执行器根据命令队列的状态执行命令队列中的IO命令,其中,命令队列的状态包括空闲状态和执行状态。
在本申请实施例中,在命令模拟执行器根据命令队列的状态执行命令队列中的IO命令之前,需要配置闪存时序参数与控制器参数,其中,闪存时序参数与控制器参数用于计算IO命令在各个执行阶段对应的执行时间,闪存时序参数包括:读等待时间、编程等待时间、擦除等待时间,控制器参数包括:数据传输频率、发送命令和地址的时间、查询时间、闪存页大小。
可以理解的是,对于读命令或写命令对应的数据传输时间,需要根据命令数据大小和数据传输频率来计算,下面以编码单元为4K的闪存设备为例进行说明:
一个闪存页内的码字个数=闪存页大小/4096;码字的大小=闪存页大小/一个闪存页内的码字个数;一个码字的传输时间=码字的大小/数据传输频率;数据传输时间=命令数据大小*一个码字的传输时间。
请参阅图5,图5是图3中的步骤S303的一种细化流程示意图;
在本申请实施例中,命令模拟执行器包括队列调度器、写命令执行器和读命令执行器,其中,命令队列与队列调度器一一对应。队列调度器用于获取命令队列中的IO命令,根据该IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令。写命令执行器或读命令执行器用于根据当前的IO命令的执行状态执行相应动作。
例如:对于读命令,读命令执行器先执行发送命令,然后执行查询命令,查询闪存的状态是否准备就绪,从而确定是否进行数据传输,在数据传输完成时,该读命令执行完成。
如图5所示,步骤S303:根据命令队列的状态执行IO命令,包括:
步骤S331:控制队列调度器遍历命令队列,获取处于空闲状态的命令队列中的IO命令;
具体的,在命令生成器将生成的IO命令依次存放至不同的命令队列之后,命令模拟执行器控制每一队列调度器遍历与其对应的命令队列,在确定该命令队列处于空闲状态后,队列调度器获取该命令队列中的IO命令。
步骤S332:根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间;
具体的,命令模拟执行器根据处于空闲状态的命令队列中的IO命令的命令类型,确定该IO命令由写命令执行器执行,还是由读命令执行器执行,从而控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间。其中,第一执行时间为写命令执行器或读命令执行器执行处于空闲状态的命令队列中的一个IO命令的时间。
请参阅图6,图6是图5中的步骤S332的一种细化流程示意图;
如图6所示,步骤S332:根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间,包括:
步骤S3321:获取写命令执行器的状态;
具体的,写命令执行器的状态包括发送命令状态和非发送命令状态,其中,非发送命令状态为写命令执行器未执行发送写命令和地址的任务时的状态。
步骤S3322:判断写命令执行器是否处于发送命令状态;
具体的,若写命令执行器处于发送命令状态,则进入步骤S3323;若写命令执行器不处于发送命令状态,则进入步骤S3324。
步骤S3323:控制写命令执行器计算发送写命令和地址的时间、数据传输时间与第一执行时间,并确定IO命令的执行状态为未完成状态;
具体的,若写命令执行器处于发送命令状态,则命令模拟执行器控制写命令执行器计算发送写命令和地址的时间、数据传输时间与第一执行时间,其中,该第一执行时间为写命令执行器执行处于空闲状态的命令队列中的一个写命令的时间,具体的,第一执行时间=发送写命令和地址的时间+数据传输时间。进一步地,写命令执行器确定IO命令的执行状态为未完成状态,并将该第一执行时间与IO命令的执行状态发送给队列调度器。可以理解的是,IO命令的执行状态包括未完成状态和完成状态。
步骤S3324:控制写命令执行器执行写查询命令,并记录写查询命令对应的写查询时间;
具体的,若写命令执行器不处于发送命令状态,则命令模拟执行器控制写命令执行器执行写查询命令,并由写命令执行器记录写查询命令对应的写查询时间。
步骤S3325:判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间;
具体的,写命令执行器通过判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间,确定闪存的状态是否准备就绪。其中,命令执行总时间为命令模拟执行器从开始执行第一条IO命令至执行当前的IO命令的时间,当前队列的开始执行时间为当前的命令队列进入执行状态的时间,命令执行总时间与当前队列的开始执行时间由队列调度器根据命令的执行情况进行更新,编程等待时间由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
若命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,则确定闪存的状态准备就绪,进入步骤S3326;若命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,则确定闪存的状态未准备就绪,进入步骤S3327。
步骤S3326:确定IO命令的执行状态为完成状态,并确定第一执行时间为写查询时间;
具体的,在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,写命令执行器确定IO命令的执行状态为完成状态,并确定第一执行时间为写查询时间,将IO命令的执行状态与第一执行时间发送给队列调度器。
步骤S3327:确定IO命令的执行状态为未完成状态,并确定第一执行时间为写查询时间。
具体的,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,写命令执行器确定IO命令的执行状态为未完成状态,并确定第一执行时间为写查询时间,将IO命令的执行状态与第一执行时间发送给队列调度器。
请参阅图7,图7是图5中的步骤S332的另一种细化流程示意图;
如图7所示,步骤S332:根据IO命令的命令类型,控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间,还包括:
步骤S3328:获取读命令执行器的状态;
具体的,读命令执行器的状态包括发送命令状态和非发送命令状态,其中,非发送命令状态为读命令执行器未执行发送读命令和地址的任务时的状态。
步骤S3329:判断读命令执行器是否处于发送命令状态;
具体的,若读命令执行器处于发送命令状态,则进入步骤S3330;若读命令执行器不处于发送命令状态,则进入步骤S3331。
步骤S3330:控制读命令执行器计算发送读命令和地址的时间与第一执行时间,并确定IO命令的执行状态为未完成状态;
具体的,若读命令执行器处于发送命令状态,则命令模拟执行器控制读命令执行器计算发送读命令和地址的时间,并由读命令执行器确定第一执行时间为发送读命令和地址的时间,以及确定IO命令的执行状态为未完成状态。进一步地,读命令执行器将该第一执行时间与IO命令的执行状态发送给队列调度器。
步骤S3331:控制读命令执行器执行读查询命令,并记录读查询命令对应的读查询时间;
具体的,若读命令执行器不处于发送命令状态,则命令模拟执行器控制读命令执行器执行读查询命令,并记录读查询命令对应的读查询时间。
步骤S3332:判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间;
具体的,读命令执行器通过判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间,确定闪存的状态是否准备就绪。
若命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,则确定闪存的状态准备就绪,进入步骤S3333;若命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,则确定闪存的状态未准备就绪,进入步骤S3335。
步骤S3333:控制读命令执行器进行数据传输,并计算数据传输时间;
具体的,在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,命令模拟执行器控制读命令执行器进行数据传输,并计算数据传输时间。其中,数据传输时间的具体计算方式已在上文说明,在此不再赘述。
步骤S3334:确定IO命令的执行状态为完成状态,并计算第一执行时间;
具体的,读命令执行器确定IO命令的执行状态为完成状态,并计算第一执行时间,其中,第一执行时间=读查询时间+数据传输时间。进一步地,读命令执行器将IO命令的执行状态与第一执行时间发送给队列调度器。
步骤S3335:确定IO命令的执行状态为未完成状态,并确定第一执行时间为读查询时间。
具体的,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,读命令执行器确定IO命令的执行状态为未完成状态,并确定第一执行时间为读查询时间。进一步地,读命令执行器将IO命令的执行状态与第一执行时间发送给队列调度器。
在本申请实施例中,通过队列调度器遍历命令队列,获取处于空闲状态的命令队列中的IO命令,由写命令执行器或读命令执行器执行对应的写命令或读命令,本申请能够快速将所有的IO命令发送到通道上。
步骤S333:根据第一执行时间,控制队列调度器更新命令执行总时间和队列深度;
具体的,闪存命令执行模拟器控制队列调度器更新命令执行总时间和队列深度,其中,队列深度为命令队列中存放的IO命令的个数。具体的,在队列调度器接收到读命令执行器或写命令执行器发送的第一执行时间后,队列调度器通过将第一执行时间累加到命令执行总时间的方式,更新命令执行总时间,并将队列深度的数值减一。
步骤S334:控制队列调度器将命令队列的状态修改为执行状态,并将当前队列的开始执行时间设置为更新后的命令执行总时间。
具体的,闪存命令执行模拟器控制队列调度器将当前的命令队列的状态修改为执行状态,并将当前队列的开始执行时间设置为更新后的命令执行总时间。
请参阅图8,图8是图3中的步骤S303的另一种细化流程示意图;
如图8所示,步骤S303:根据命令队列的状态执行IO命令,还包括:
步骤S335:控制写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令,以得到第二执行时间和IO命令的执行状态;
具体的,在写命令执行器或读命令执行器执行所有处于空闲状态的命令队列中的IO命令之后,命令模拟执行器控制写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令,以得到第二执行时间和IO命令的执行状态。其中,第二执行时间为写命令执行器或读命令执行器执行处于执行状态的命令队列中的一个IO命令的时间。
可以理解的是,写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令,得到第二执行时间和IO命令的执行状态的具体实施方式与步骤S332中写命令执行器或读命令执行器执行处于空闲状态的命令队列中的IO命令,得到第一执行时间和IO命令的执行状态的具体实施方式相似,在此不再赘述。其中,第二执行时间与第一执行时间的计算方式相同。
步骤S336:根据第二执行时间,控制队列调度器更新命令执行总时间;
具体的,闪存命令执行模拟器控制队列调度器更新命令执行总时间。具体的,在队列调度器接收到读命令执行器或写命令执行器发送的第二执行时间后,队列调度器通过将第二执行时间累加到命令执行总时间的方式,更新命令执行总时间。
步骤S337:在IO命令的执行状态为完成状态时,控制队列调度器将命令队列的状态修改为空闲状态。
具体的,在队列调度器接收到读命令执行器或写命令执行器发送的IO命令的执行状态为完成状态时,闪存命令执行模拟器控制队列调度器将命令队列的状态修改为空闲状态。
可以理解的是,若队列调度器接收到读命令执行器或写命令执行器发送的IO命令的执行状态为未完成状态,则队列调度器不修改命令队列的状态。
步骤S304:根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽。
具体的,在测试时间大于或等于预设测试时间时,闪存命令执行模拟器根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽,每种命令类型对应的闪存接口带宽=闪存设备的通道数目*命令数据大小*IO命令的数量/命令执行总时间。
其中,测试时间为闪存命令执行模拟器执行该闪存接口的性能评估方法的时间,预设测试时间为测试结束的时间,预设测试时间可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
可以理解的是,每种命令类型对应的闪存接口带宽为整个闪存设备的闪存接口带宽,每种命令类型对应的单个通道的闪存接口带宽=命令数据大小*IO命令的数量/命令执行总时间。
在本申请实施例中,闪存命令执行模拟器是通道级别的,因此可以计算出闪存设备的单个通道的带宽,闪存理论带宽等于通道带宽乘以通道数目。可以理解的是,命令执行模拟器也可以是CE或Die级别的。
请参阅图9,图9是本申请实施例提供的闪存接口的性能评估方法的整体流程示意图;
如图9所示,该闪存接口的性能评估方法的整体流程,包括:
步骤S901:初始化相关变量;
具体的,闪存命令执行模拟器初始化相关变量,并配置闪存时序参数与控制器参数。其中,相关变量包括测试时间、预设测试时间、命令执行总时间、命令计数、当前队列位置等。其中,命令执行总时间与测试时间不同。
步骤S902:命令生成器根据IO模型的信息,生成IO命令,并将若干个IO命令存放至不同的命令队列;
具体的,该步骤与步骤S302相似,在此不再赘述。
步骤S903:队列调度器遍历命令队列,获取处于空闲状态的命令队列中的IO命令;
具体的,该步骤与步骤S331相似,在此不再赘述。
步骤S904:写命令执行器或读命令执行器执行处于空闲状态的命令队列中的IO命令;
具体的,该步骤与步骤S332相似,在此不再赘述。
步骤S905:写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令;
具体的,该步骤与步骤S335相似,在此不再赘述。
步骤S906:判断测试时间是否小于预设测试时间;
具体的,若测试时间小于预设测试时间,则返回步骤S902;若测试时间大于或等于预设测试时间,则进入步骤S907。
步骤S907:计算每种命令类型对应的闪存接口带宽。
具体的,该步骤与步骤S304相似,在此不再赘述。
在本申请实施例中,由于闪存命令执行模拟器是软件模拟的,在任意通用计算平台均可实现,因此,本申请中的应用于该闪存命令执行模拟器的闪存接口的性能评估方法不依赖任何硬件实现。
在本申请实施例中,提供一种闪存接口的性能评估方法,该闪存接口的性能评估方法包括:获取IO模型的信息;根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列;根据命令队列的状态执行IO命令;根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽。
通过根据IO模型的信息生成IO命令,将若干个IO命令存放至不同的命令队列,并根据命令队列的状态执行IO命令,以及根据在命令执行总时间内执行完成的IO命令的数量,计算每种命令类型对应的闪存接口带宽,一方面,本申请能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能,而不依赖任何硬件实现,另一方面,本申请能够根据实际业务场景IO模型来评估此种IO模型在不同NAND上的性能。
请参阅图10,图10是本申请实施例提供的一种闪存命令执行模拟器的结构示意图;
在本申请实施例中,该闪存命令执行模拟器应用上述任一实施例的闪存接口的性能评估方法。
如图10所示,闪存命令执行模拟器1000包括命令生成器1001和命令模拟执行器1002。
命令生成器1001,用于根据IO模型的信息,生成IO命令,并将若干个IO命令存放至不同的命令队列。
命令模拟执行器1002,用于根据命令队列的状态,执行IO命令。
请参阅图11,图11是本申请实施例提供的一种命令模拟执行器的详细结构示意图;
如图11所示,命令模拟执行器110包括队列调度器1021、写命令执行器1022和读命令执行器1023。
队列调度器1021,用于控制写命令执行器或读命令执行器执行IO命令,得到第一执行时间或第二执行时间,以及IO命令的执行状态,以更新命令执行总时间和命令队列的状态,其中,命令队列的状态包括空闲状态和执行状态。
写命令执行器1022,用于执行写命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态,其中,IO命令的执行状态包括未完成状态和完成状态。
读命令执行器1023,用于执行读命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态。
在本申请实施例中,提供一种命令模拟执行器,该命令模拟执行器包括:队列调度器,用于控制写命令执行器或读命令执行器执行IO命令,得到第一执行时间或第二执行时间,以及IO命令的执行状态,以更新命令执行总时间和IO命令队列的状态,其中,命令队列的状态包括空闲状态和执行状态;写命令执行器,用于执行写命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态,其中,IO命令的执行状态包括未完成状态和完成状态;读命令执行器,用于执行读命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态。本申请能够根据命令队列的状态,执行IO命令,从而根据命令数据大小、IO命令的数量、命令执行总时间准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能。
在本申请实施例中,提供一种闪存命令执行模拟器,该闪存命令执行模拟器包括:命令生成器,用于根据IO模型的信息,生成IO命令,并将若干个IO命令存放至不同的命令队列;命令模拟执行器,用于根据命令队列的状态,执行命IO令。本申请能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能,而不依赖任何硬件实现。
请参阅图12,图12是本申请实施例提供的一种命令生成器的执行过程示意图;
如图12所示,命令生成器的执行过程,包括:
步骤S121:确定生成的IO命令的个数;
具体的,命令生成器在根据IO模型的信息生成IO命令的同时,确定生成的IO命令的个数。
步骤S122:判断生成的IO命令的个数是否小于预设命令个数阈值;
具体的,若生成的IO命令的个数小于预设命令个数阈值,则进入步骤S123,继续生成IO命令;若生成的IO命令的个数大于或等于预设命令个数阈值,则结束流程。
步骤S123:根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列。
具体的,若生成的IO命令的个数小于预设命令个数阈值,则命令生成器继续根据IO模型的信息生成IO命令,并将若干个IO命令存放至不同的命令队列。该步骤与步骤S302的具体实现方式相似,在此不再赘述。
请参阅图13,图13是本申请实施例提供的一种队列调度器的执行过程示意图;
如图13所示,队列调度器的执行过程,包括:
步骤S131:获取命令队列的状态;
具体的,队列调度器获取命令队列的状态。
步骤S132:判断命令队列是否处于空闲状态;
具体的,队列调度器判断命令队列是否处于空闲状态,若命令队列处于空闲状态,则进入步骤S133;若命令队列不处于空闲状态,则进入步骤S135。
步骤S133:获取IO命令,并控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间;
具体的,若命令队列处于空闲状态,则队列调度器获取IO命令,并控制写命令执行器或读命令执行器执行IO命令,以得到第一执行时间。该步骤与步骤S332的具体实现方式相同,在此不再赘述。
步骤S134:根据第一执行时间,更新命令执行总时间、队列深度、命令队列的状态;
具体的,该步骤与步骤S333和步骤S334的具体实现方式相同,在此不再赘述。
步骤S135:控制写命令执行器或读命令执行器,执行IO命令,以得到第二执行时间和IO命令的执行状态;
具体的,若命令队列不处于空闲状态,则队列调度器控制写命令执行器或读命令执行器,执行IO命令,以得到第二执行时间和IO命令的执行状态。该步骤与步骤S335的具体实现方式相同,在此不再赘述。
进一步地,队列调度器根据第二执行时间,更新命令执行总时间。该步骤与步骤S336的具体实现方式相同,在此不再赘述。
步骤S136:判断IO命令的执行状态是否为完成状态;
具体的,队列调度器判断IO命令的执行状态是否为完成状态,若IO命令的执行状态为完成状态,则进入步骤S137;若IO命令的执行状态不为完成状态,则结束流程。
步骤S137:修改命令队列的状态。
具体的,若IO命令的执行状态为完成状态,则修改命令队列的状态为空闲状态。
请参阅图14,图14是本申请实施例提供的一种写命令执行器的执行过程示意图;
如图14所示,写命令执行器的执行过程,包括:
步骤S141:获取写命令执行器的状态;
步骤S142:判断写命令执行器是否处于发送命令状态;
具体的,若写命令执行器处于发送命令状态,则进入步骤S143;若写命令执行器不处于发送命令状态,则进入步骤S144。
步骤S143:计算发送写命令和地址的时间、数据传输时间与第一执行时间,或者,计算发送写命令和地址的时间、数据传输时间与第二执行时间;
具体的,若写命令执行器处于发送命令状态,则在写命令执行器执行处于空闲状态的命令队列中的写命令时,写命令执行器计算发送写命令和地址的时间、数据传输时间与第一执行时间,确定IO命令的执行状态为未完成状态,并将该第一执行时间与IO命令的执行状态发送给队列调度器。
或者,若写命令执行器处于发送命令状态,则在写命令执行器执行处于执行状态的命令队列中的写命令时,写命令执行器计算发送写命令和地址的时间、数据传输时间与第二执行时间,确定IO命令的执行状态为未完成状态,并将该第二执行时间与IO命令的执行状态发送给队列调度器。
步骤S144:执行写查询命令,并记录写查询命令对应的写查询时间;
具体的,若写命令执行器不处于发送命令状态,则写命令执行器执行写查询命令,并记录写查询命令对应的写查询时间。
步骤S145:判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间;
具体的,写命令执行器通过判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间,确定闪存的状态是否准备就绪。
若命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,则确定闪存的状态准备就绪,进入步骤S146;若命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,则确定闪存的状态未准备就绪,进入步骤S147。
步骤S146:确定IO命令的执行状态为完成状态,并确定第一执行时间或第二执行时间为写查询时间;
具体的,在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,且写命令执行器执行处于空闲状态的命令队列中的写命令时,写命令执行器确定IO命令的执行状态为完成状态,并确定第一执行时间为写查询时间,将IO命令的执行状态与第一执行时间发送给队列调度器。
或者,在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,且写命令执行器执行处于执行状态的命令队列中的写命令时,写命令执行器确定IO命令的执行状态为完成状态,并确定第二执行时间为写查询时间,将IO命令的执行状态与第二执行时间发送给队列调度器。
步骤S147:确定IO命令的执行状态为未完成状态,并确定第一执行时间或第二执行时间为写查询时间。
具体的,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,且写命令执行器执行处于空闲状态的命令队列中的写命令时,写命令执行器确定IO命令的执行状态为未完成状态,并确定第一执行时间为写查询时间,将IO命令的执行状态与第一执行时间发送给队列调度器。
或者,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,且写命令执行器执行处于执行状态的命令队列中的写命令时,写命令执行器确定IO命令的执行状态为未完成状态,并确定第二执行时间为写查询时间,将IO命令的执行状态与第二执行时间发送给队列调度器。
请参阅图15,图15是本申请实施例提供的一种读命令执行器的执行过程示意图;
如图15所示,读命令执行器的执行过程,包括:
步骤S151:获取读命令执行器的状态;
步骤S152:判断读命令执行器是否处于发送命令状态;
具体的,若读命令执行器处于发送命令状态,则进入步骤S153;若读命令执行器不处于发送命令状态,则进入步骤S154。
步骤S153:计算发送读命令和地址的时间与第一执行时间,或者,计算发送读命令和地址的时间与第二执行时间;
具体的,若读命令执行器处于发送命令状态,且读命令执行器执行处于空闲状态的命令队列中的读命令,则读命令执行器计算发送读命令和地址的时间,确定第一执行时间为发送读命令和地址的时间,以及确定IO命令的执行状态为未完成状态,并将该第一执行时间与IO命令的执行状态发送给队列调度器。
或者,若读命令执行器处于发送命令状态,且读命令执行器执行处于执行状态的命令队列中的读命令,则读命令执行器计算发送读命令和地址的时间,确定第二执行时间为发送读命令和地址的时间,以及确定IO命令的执行状态为未完成状态,并将该第二执行时间与IO命令的执行状态发送给队列调度器。
步骤S154:执行读查询命令,并记录读查询命令对应的读查询时间;
具体的,若读命令执行器不处于发送命令状态,则读命令执行器执行读查询命令,并记录读查询命令对应的读查询时间。
步骤S155:判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间;
具体的,读命令执行器通过判断命令执行总时间与当前队列的开始执行时间之差是否大于编程等待时间,确定闪存的状态是否准备就绪。
若命令执行总时间与当前队列的开始执行时间之差大于编程等待时间,则确定闪存的状态准备就绪,进入步骤S156;若命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间,则确定闪存的状态未准备就绪,进入步骤S158。
步骤S156:进行数据传输,并计算数据传输时间;
具体的,在命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,读命令执行器进行数据传输,并计算数据传输时间。
步骤S157:确定IO命令的执行状态为完成状态,并计算第一执行时间或第二执行时间;
具体的,在读命令执行器执行处于空闲状态的命令队列中的读命令时,读命令执行器确定IO命令的执行状态为完成状态,计算第一执行时间,并将IO命令的执行状态与第一执行时间发送给队列调度器,其中,第一执行时间=读查询时间+数据传输时间。
或者,在读命令执行器执行处于执行状态的命令队列中的读命令时,读命令执行器确定IO命令的执行状态为完成状态,计算第二执行时间,并将IO命令的执行状态与第二执行时间发送给队列调度器,其中,第二执行时间=读查询时间+数据传输时间。
步骤S158:确定IO命令的执行状态为未完成状态,并确定第一执行时间或第二执行时间为读查询时间。
具体的,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,若读命令执行器执行处于空闲状态的命令队列中的读命令,则读命令执行器确定IO命令的执行状态为未完成状态,确定第一执行时间为读查询时间,并将IO命令的执行状态与第一执行时间发送给队列调度器。
或者,在命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,若读命令执行器执行处于执行状态的命令队列中的读命令,则读命令执行器确定IO命令的执行状态为未完成状态,确定第二执行时间为读查询时间,并将IO命令的执行状态与第二执行时间发送给队列调度器。
请参阅图16,图16是本申请实施例提供的一种存储控制芯片的结构示意图;
如图16所示,存储控制芯片160包括闪存命令执行模拟器1601。该闪存命令执行模拟器1601的具体结构和功能与图10中的闪存命令执行模拟器1000的具体结构和功能相同,在此不再赘述。
在本申请实施例中,提供一种存储控制芯片,该存储控制芯片包括闪存命令执行模拟器。本申请能够通过存储控制芯片执行上述任一实施例中的闪存接口的性能评估方法,从而能够准确评估闪存接口在纯读、纯写或混合读写场景下的理论性能。
本申请实施例还提供了一种非易失性计算机存储介质,非易失性计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,可使得上述一个或多个处理器可执行上述任意方法实施例中的闪存接口的性能评估方法,例如,执行上述任意方法实施例中的闪存接口的性能评估方法。
以上所描述的装置或设备实施例仅仅是示意性的,其中作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (11)
1.一种闪存接口的性能评估方法,其特征在于,包括:
获取IO模型的信息;
根据所述IO模型的信息生成IO命令,并将若干个所述IO命令存放至不同的命令队列;
根据所述命令队列的状态执行所述IO命令;
根据在命令执行总时间内执行完成的所述IO命令的数量,计算每种命令类型对应的闪存接口带宽。
2.根据权利要求1所述的方法,其特征在于,所述IO模型的信息包括命令类型、每一种命令类型对应的命令数据大小、每一种命令类型对应的带宽占比;
所述根据所述IO模型的信息生成IO命令,并将若干个所述IO命令存放至不同的命令队列,包括:
根据所述带宽占比,计算每一种命令类型对应的命令类型数量占比;
根据所述命令类型数量占比,确定每种命令类型对应的命令类型占比区间;
基于随机算法生成一个随机数,计算所述随机数对应的区间概率,其中,所述随机数对应的区间概率=随机数的数值/随机数的区间范围;
根据所述区间概率对应的命令类型占比区间,确定待生成的IO命令的命令类型,以生成IO命令;
将每一所述IO命令依次存放至不同的命令队列,直至生成的IO命令的个数大于或等于预设命令个数阈值。
3.根据权利要求1所述的方法,其特征在于,所述方法应用于闪存命令执行模拟器,所述闪存命令执行模拟器包括命令模拟执行器,所述命令模拟执行器包括队列调度器、写命令执行器和读命令执行器,所述命令队列与所述队列调度器一一对应;
所述命令队列的状态包括空闲状态和执行状态;
所述根据所述命令队列的状态执行所述IO命令,包括:
控制所述队列调度器遍历所述命令队列,获取处于空闲状态的命令队列中的IO命令;
根据所述IO命令的命令类型,控制写命令执行器或读命令执行器执行所述IO命令,以得到第一执行时间;
根据所述第一执行时间,控制所述队列调度器更新所述命令执行总时间和队列深度;
控制所述队列调度器将所述命令队列的状态修改为执行状态,并将当前队列的开始执行时间设置为更新后的命令执行总时间。
4.根据权利要求3所述的方法,其特征在于,所述根据所述命令队列的状态执行所述IO命令,还包括:
控制写命令执行器或读命令执行器,执行处于执行状态的命令队列中的IO命令,以得到第二执行时间和IO命令的执行状态;
根据所述第二执行时间,控制所述队列调度器更新所述命令执行总时间;
在所述IO命令的执行状态为完成状态时,控制所述队列调度器将所述命令队列的状态修改为空闲状态,其中,所述IO命令的执行状态包括未完成状态和完成状态。
5.根据权利要求3所述的方法,其特征在于,所述根据所述IO命令的命令类型,控制写命令执行器或读命令执行器执行所述IO命令,以得到第一执行时间,包括:
若所述写命令执行器处于发送命令状态,则控制所述写命令执行器计算发送写命令和地址的时间、数据传输时间与第一执行时间,并确定所述命令队列的状态为未完成状态,其中,所述第一执行时间=发送写命令和地址的时间+数据传输时间;
若所述写命令执行器不处于发送命令状态,则控制所述写命令执行器执行写查询命令,并记录所述写查询命令对应的写查询时间;
在所述命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,确定所述命令队列的状态为完成状态,并确定第一执行时间为所述写查询时间;
在所述命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,确定所述命令队列的状态为未完成状态,并确定第一执行时间为所述写查询时间。
6.根据权利要求3所述的方法,其特征在于,所述根据所述IO命令的命令类型,控制写命令执行器或读命令执行器执行所述IO命令,以得到第一执行时间,还包括:
若所述读命令执行器处于发送命令状态,则控制所述读命令执行器计算发送读命令和地址的时间与第一执行时间,并确定所述命令队列的状态为未完成状态,其中,所述第一执行时间为发送读命令和地址的时间;
若所述读命令执行器不处于发送命令状态,则控制所述读命令执行器执行读查询命令,并记录所述读查询命令对应的读查询时间;
在所述命令执行总时间与当前队列的开始执行时间之差大于编程等待时间时,控制所述读命令执行器进行数据传输,并计算数据传输时间;
控制所述读命令执行器确定所述命令队列的状态为完成状态,并计算第一执行时间,其中,所述第一执行时间=读查询时间+数据传输时间;
在所述命令执行总时间与当前队列的开始执行时间之差小于或等于编程等待时间时,确定所述命令队列的状态为未完成状态,并确定第一执行时间为所述读查询时间。
7.根据权利要求1所述的方法,其特征在于,每种命令类型对应的闪存接口带宽=闪存设备的通道数目*命令数据大小*IO命令的数量/命令执行总时间。
8.一种闪存命令执行模拟器,其特征在于,应用如权利要求1-7任一项所述的闪存接口的性能评估方法,所述闪存命令执行模拟器包括:
命令生成器,用于根据IO模型的信息,生成IO命令,并将若干个所述IO命令存放至不同的命令队列;
命令模拟执行器,用于根据所述命令队列的状态,执行所述IO命令。
9.根据权利要求8所述的闪存命令执行模拟器,其特征在于,所述命令模拟执行器包括队列调度器、写命令执行器和读命令执行器,其中,
所述队列调度器,用于控制写命令执行器或读命令执行器执行IO命令,得到第一执行时间或第二执行时间,以及IO命令的执行状态,以更新命令执行总时间和命令队列的状态,其中,所述命令队列的状态包括空闲状态和执行状态;
所述写命令执行器,用于执行写命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态,其中,所述IO命令的执行状态包括未完成状态和完成状态;
所述读命令执行器,用于执行读命令,计算第一执行时间或第二执行时间,并确定IO命令的执行状态。
10.一种存储控制芯片,其特征在于,包括:
如权利要求8或9所述的闪存命令执行模拟器。
11.一种闪存设备,其特征在于,包括:
如权利要求10所述的存储控制芯片;
至少一个闪存介质,与所述存储控制芯片通信连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311041826.8A CN116755639B (zh) | 2023-08-18 | 2023-08-18 | 闪存接口的性能评估方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311041826.8A CN116755639B (zh) | 2023-08-18 | 2023-08-18 | 闪存接口的性能评估方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116755639A true CN116755639A (zh) | 2023-09-15 |
CN116755639B CN116755639B (zh) | 2024-03-08 |
Family
ID=87959493
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311041826.8A Active CN116755639B (zh) | 2023-08-18 | 2023-08-18 | 闪存接口的性能评估方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116755639B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101498994A (zh) * | 2009-02-16 | 2009-08-05 | 华中科技大学 | 一种固态硬盘控制器 |
CN101694610A (zh) * | 2009-10-16 | 2010-04-14 | 成都市华为赛门铁克科技有限公司 | 命令处理方法、装置和存储设备 |
CN102129412A (zh) * | 2010-01-18 | 2011-07-20 | 厄塞勒拉特公司 | 存取调度器 |
CN106527967A (zh) * | 2015-09-10 | 2017-03-22 | 蜂巢数据有限公司 | 减小存储设备中的读命令时延 |
WO2018016659A1 (ko) * | 2016-07-18 | 2018-01-25 | 주식회사 파두 | 플래시 스토리지 대역폭의 비례 지분 스케줄링을 위한 방법 및 시스템 |
CN109062514A (zh) * | 2018-08-16 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种基于命名空间的带宽控制方法、装置和存储介质 |
US20200065027A1 (en) * | 2018-08-24 | 2020-02-27 | Micron Technology, Inc. | Memory sub-system for increasing bandwidth for command scheduling |
CN111176962A (zh) * | 2019-12-02 | 2020-05-19 | 深圳先进技术研究院 | Fpga平台及其性能评估与设计优化的方法、存储介质 |
CN111522725A (zh) * | 2020-04-23 | 2020-08-11 | 深圳忆联信息系统有限公司 | Ssd性能自动评估方法、装置、设备及介质 |
CN111930578A (zh) * | 2020-07-14 | 2020-11-13 | 杭州电子科技大学 | 一种基于fpga的板载ddr带宽测试方法及系统 |
CN115440294A (zh) * | 2022-09-01 | 2022-12-06 | 山东华芯半导体有限公司 | 一种NAND Flash控制器多命令混合测试方法 |
CN116382581A (zh) * | 2023-03-24 | 2023-07-04 | 山东云海国创云计算装备产业创新中心有限公司 | 一种加速执行NVMe协议的方法、系统、设备和存储介质 |
-
2023
- 2023-08-18 CN CN202311041826.8A patent/CN116755639B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101498994A (zh) * | 2009-02-16 | 2009-08-05 | 华中科技大学 | 一种固态硬盘控制器 |
CN101694610A (zh) * | 2009-10-16 | 2010-04-14 | 成都市华为赛门铁克科技有限公司 | 命令处理方法、装置和存储设备 |
CN102129412A (zh) * | 2010-01-18 | 2011-07-20 | 厄塞勒拉特公司 | 存取调度器 |
CN106527967A (zh) * | 2015-09-10 | 2017-03-22 | 蜂巢数据有限公司 | 减小存储设备中的读命令时延 |
WO2018016659A1 (ko) * | 2016-07-18 | 2018-01-25 | 주식회사 파두 | 플래시 스토리지 대역폭의 비례 지분 스케줄링을 위한 방법 및 시스템 |
CN109062514A (zh) * | 2018-08-16 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种基于命名空间的带宽控制方法、装置和存储介质 |
US20200065027A1 (en) * | 2018-08-24 | 2020-02-27 | Micron Technology, Inc. | Memory sub-system for increasing bandwidth for command scheduling |
CN111176962A (zh) * | 2019-12-02 | 2020-05-19 | 深圳先进技术研究院 | Fpga平台及其性能评估与设计优化的方法、存储介质 |
CN111522725A (zh) * | 2020-04-23 | 2020-08-11 | 深圳忆联信息系统有限公司 | Ssd性能自动评估方法、装置、设备及介质 |
CN111930578A (zh) * | 2020-07-14 | 2020-11-13 | 杭州电子科技大学 | 一种基于fpga的板载ddr带宽测试方法及系统 |
CN115440294A (zh) * | 2022-09-01 | 2022-12-06 | 山东华芯半导体有限公司 | 一种NAND Flash控制器多命令混合测试方法 |
CN116382581A (zh) * | 2023-03-24 | 2023-07-04 | 山东云海国创云计算装备产业创新中心有限公司 | 一种加速执行NVMe协议的方法、系统、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116755639B (zh) | 2024-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110135985B (zh) | 一种区块链上交易的并行执行方法及系统 | |
KR102152281B1 (ko) | 불휘발성 메모리의 다수의 파티션을 동시에 액세스하기 위한 장치 및 방법 | |
CN110705705B (zh) | 卷积神经网络模型同步训练方法、集群及可读存储介质 | |
TWI744632B (zh) | 半導體設備及在一記憶體裝置上執行操作之方法 | |
US20130007488A1 (en) | Power management of a storage device including multiple processing cores | |
CN109242099B (zh) | 强化学习网络的训练方法、装置、训练设备及存储介质 | |
CN112596681A (zh) | 一种重读命令处理方法、闪存控制器及固态硬盘 | |
US11500543B2 (en) | Data storage device and method for memory operation and iterative polling | |
CN112199040B (zh) | 存储访问方法及智能处理装置 | |
US8230138B2 (en) | Memory control device, data processor, and data read method | |
US9529536B2 (en) | Semiconductor memory device, memory system including the same, and operating method thereof | |
CN111930578A (zh) | 一种基于fpga的板载ddr带宽测试方法及系统 | |
KR20160007824A (ko) | 데이터 저장 장치 | |
CN116755639B (zh) | 闪存接口的性能评估方法及相关装置 | |
CN113033785B (zh) | 芯片、神经网络训练系统、内存管理方法及装置、设备 | |
CN105094742B (zh) | 一种写数据的方法和设备 | |
CN111723907B (zh) | 一种模型训练设备、方法、系统及计算机可读存储介质 | |
CN116679887B (zh) | 用于NAND Flash的通用控制模块及方法 | |
CN110659043A (zh) | 固件升级方法、装置、设备和存储介质 | |
CN113868899B (zh) | 一种分支指令处理方法、系统、设备及计算机存储介质 | |
CN110046075A (zh) | 一种hpl测试方法以及设备 | |
CN114780460A (zh) | 一种dma控制器和方法 | |
US20140244887A1 (en) | Data processing apparatus and control method | |
CN114822634A (zh) | 参考电压确定方法、装置、计算机设备和存储介质 | |
CN108845765B (zh) | 一种nand数据读取方法、系统、设备及存储介质 |
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 |