CN115292147A - 便捷高效的内存压力测试方法、系统和可读存储介质 - Google Patents
便捷高效的内存压力测试方法、系统和可读存储介质 Download PDFInfo
- Publication number
- CN115292147A CN115292147A CN202210698343.4A CN202210698343A CN115292147A CN 115292147 A CN115292147 A CN 115292147A CN 202210698343 A CN202210698343 A CN 202210698343A CN 115292147 A CN115292147 A CN 115292147A
- Authority
- CN
- China
- Prior art keywords
- memory
- thread
- data
- target device
- thread pool
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3414—Workload generation, e.g. scripts, playback
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开的一种便捷高效的内存压力测试方法、系统和可读存储介质,其中方法包括:识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;基于所述线程池调度器启动日志管理线程以及数据填充线程池。本发明简化了内存压力测试工具繁琐的测试参数配置,去除了内存测试最小单位的限制,提供统一的测试标准流程,为用户提供了便捷、高效、统一的测试方案,取得准确和统一的测试结果。
Description
技术领域
本发明涉及计算机硬件测试技术领域,更具体的,涉及一种便捷高效的内存压力测试方法、系统和可读存储介质。
背景技术
衡量一个计算机系统的性能,除了主处理器之外另一个倍受关注的硬件就是内存,即计算机系统中的存储介质。而内存介质的压力测试成为了计算机系统设计的一个必要环节,目前常用的内存压力测试工具为google提供的一款stressapptest压力测试软件以及memtester工具。随着内存技术的发展,SNIA(Storage Networking IndustryAssociation)组织发表的NVM(Non-volatile Memory)的硬件接口规范和编程模型规范,定义了NVDIMM(Non-volatile DualIn-line Memory Module)规范。
NVDIMM是一种用于计算机的非易失性随机存取存储器,其读写速度与Cache相近。由于memtester功能比较单一,不能够给满足所有用户对内存压力测试测要求,若使用stressapptest内存压力测试工具对NVDIMM内存设备做压力测试,则会需要按照stressapptest的内存映射流程,先将NVDIMM设备的物理内存地址以页为单位的映射到内核Page Cache上,再将stressapptest通过查表的方式对Page Cache读写,并通过PageCache同步到NVDIMM设备。该流程不仅仅存在这一种原因导致访存速度慢,并且还存在有Cache命中率的问题,若为命中则Page Cache需要重新做Load操作而带来的性能损失。由于NVDIMM设备的读写速度已经与Cache的读写速度相近,因此在这里可以无需将NVDIMM设备内存Load进Page Cache中再给应用程序操作。
若用stressapptest内存压力测试工具对NVDIMM内存设备进行压力测试将会带来严重的性能差,即测试结果不符合实际情况,而且stressapptest工具由于支持功能较多,所以该工具在用户操作上存在一定不便,参数较为繁多和复杂,并且stressapptest工具对内存的测试最小单位为1MB,存在内存测试的限制。而大部分的用户几乎只是用到了其中一小部分功能来测试,不了解该工具特性和功能支持的话,可能存在无法测出内存数据的准确数据,且针对特殊测试用户需要针对小于1MB内存压力测试时,就无法使用该工具。因此针对现有技术的不足,提出一种全新的便捷高效的内存压力测试方法及系统是非常必要的。
发明内容
鉴于上述问题,本发明的目的是提供一种便捷高效的内存压力测试方法、系统和可读存储介质,解决的技术问题有以下三点,分别为常用现有的内存压力测试软件工具不能适用于NVDIMM内存设备,无法准确检测出其真实压测数据;存在最小测试单位限制,无法满足特定用户的测试需求;工具需要用户配置参数繁杂众多,用户无法完全使用,从而测试结果不统一,使用方法较为复杂。
本发明第一方面提供了一种便捷高效的内存压力测试方法,包括以下步骤:
识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
本方案中,所述识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射,具体包括:
判断当前所述待测内存设备是否为所述目标设备,其中,
识别到所述待测内存设备为所述目标设备时,提取所述目标设备信息数据以从中获取所述目标设备对应的所述内存值,其中,所述目标设备包括NVDIMM内存设备;
基于所述预设形式将物理内存地址按照所述内存值映射到当前进程的内存空间,其中,所述预设形式包括mmap的dax分支。
本方案中,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
本方案中,所述方法还包括:在测试停止前,基于预设循环机制保证所述压力测试数据组列表中的测试数据全部测试完毕。
本方案中,所述启动内存复制线程池的各线程,具体包括:
以预设单位由待测内存段低地址复制到高地址,并校验,其中,若校验出错则由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;
以所述预设单位由待测内存段的高地址复制到低地址,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息,反之记录运行时间。
本方案中,所述启动内存反转线程池各线程,具体包括:
各反转线将待测内存段低地址到高地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息;
各所述反转线将待测内存段高地址到低地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息。
本发明第二方面还提供一种便捷高效的内存压力测试系统,包括存储器和处理器,所述存储器中包括便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被所述处理器执行时实现如下步骤:
识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
本方案中,所述识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射,具体包括:
判断当前所述待测内存设备是否为所述目标设备,其中,
识别到所述待测内存设备为所述目标设备时,提取所述目标设备信息数据以从中获取所述目标设备对应的所述内存值,其中,所述目标设备包括NVDIMM内存设备;
基于所述预设形式将物理内存地址按照所述内存值映射到当前进程的内存空间,其中,所述预设形式包括mmap的dax分支。
本方案中,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
本方案中,所述方法还包括:在测试停止前,基于预设循环机制保证所述压力测试数据组列表中的测试数据全部测试完毕。
本方案中,所述启动内存复制线程池的各线程,具体包括:
以预设单位由待测内存段低地址复制到高地址,并校验,其中,若校验出错则由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;
以所述预设单位由待测内存段的高地址复制到低地址,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息,反之记录运行时间。
本方案中,所述启动内存反转线程池各线程,具体包括:
各反转线将待测内存段低地址到高地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息;
各所述反转线将待测内存段高地址到低地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息。
本发明第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中包括机器的一种便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被处理器执行时,实现如上述任一项所述的一种便捷高效的内存压力测试方法的步骤。
本发明公开的一种便捷高效的内存压力测试方法、系统和可读存储介质,利用了Linux中DAX+pmem模块为NVDIMM提供的字节级别的内存直接访问,成功为NVDIMM避开使用Page Cache机制,从而保障了对NVDIMM内存设备的压力测试结果的准确性;同时该程序简化了传统常用内存压力测试工具繁琐的测试参数配置,并去除了内存测试最小单位的限制,提供统一的测试标准流程,为用户提供了便捷、高效、统一的测试方案,从而达到准确和统一的测试结果。通过使用本发明的内存压力测试软件,将会更直观的对比出不同的内存设备以及在不同的计算机环境中的内存设备性能。
附图说明
图1示出了本发明一种便捷高效的内存压力测试方法于一实施例中的方法步骤图;
图2示出了本发明一种便捷高效的内存压力测试方法于一实施例中空间映射的方法步骤图;
图3示出了本发明一种便捷高效的内存压力测试方法于一实施例中的测试计算示意图;
图4示出了本发明一种便捷高效的内存压力测试方法于一实施例中的线程关系示意图;
图5示出了本发明一种便捷高效的内存压力测试方法于一实施例中的压力测试流程图;
图6示出了本发明一种便捷高效的内存压力测试系统于一实施例中的框图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
本发明的内存压力测试方法程序需要运行在Linux 4.3以后的内核版本之上,即要求Linux内核需要支持libnvdimm子系统和DAX(Direct Access)文件系统。
图1示出了本申请一种便捷高效的内存压力测试方法的流程图。
如图1所示,本申请公开了一种便捷高效的内存压力测试方法,包括以下步骤:
S102,识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
S104,检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
S106,基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
S108,待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
S110,待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
需要说明的是,首先判断所述待测内存设备是否为所述目标设备,其中,所述目标设备为NVDIMM设备,若识别到所述待测内存设备为NVDIMM设备时,检测NVDIMM设备信息(即所述目标设备信息数据)以获取其内存大小,而后依据所述预设形式对所述内存值进行空间映射,具体为:以mmap的dax分支将物理内存地址按其实际内存大小直接映射到当前进程的内存空间,具体如图2所示,所述基于所述内存值依据预设形式进行空间映射,具体包括如下步骤:
S202,为NVDIMM设备创建dax设备节点;
S204,利用mmap的dax分支发出缺页请求;
S206,将NVDIMM设备物理内存地址转换为虚拟地址;
S208,基于mmap将所述虚拟地址返回到当前进程。
需要说明的是,通过为NVDIMM设备创建DAX(Direct Access)设备节点,并通过以DAX文件的形式,利用libnvdimm子系统中的pmem模块配合mmap的DAX模式将NVDIMM的物理内存地址直接映射到当前应用进程可直接访问的内存空间上,为当前进程提供可以字节为单位的直接读写NVDIMM物理内存,而不经过Page Cache缓存映射机制,可以解决现有内存压力测试工具无法适用于NVDIMM设备的测试问题。
值得一提的是,libnvdimm子系统提供对3种NVDIMM设备的支持:持久内存(persistent memory,PMEM)模式的NVDIMM设备,块设备(block,BLK)模式的NVDIMM设备,以及同时支持PMEM和BLK两种访问模式的NVDIMM设备,其中,PMEM访问模式是把NVDIMM设备当作内存,BLK访问模式是把NVDIMM设备当作块设备,每种NVDIMM设备需要实现自己的驱动程序。
进一步地,于本实施例中,采用运行时间(即所述时间阈值)为“20”秒,运行在具有“8”核心的CPU,且以Linux kernel 5.16版本为内核的“64”位Linux操作系统的计算机系统环境上,并使用本发明的内存压力测试方法程序对该计算机系统环境中的“16”GB大小的NVDIMM内存设备做内存压力测试为例,在完成NVDIMM设备内存值的空间映射后,检测当前系统位数以及可用处理器核数,其中,所述系统位数为“64”位系统,所述可用处理器核数为“8”个,基于所述系统位数初始化对应的压力测试数据组列表vector<vector<uint64>*>data_list,测试数据的具体计算方法可参考图3;基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间,检测到当前可获得8个处理器核心数量,根据该数量确定工作线程池中的线程个数,并初始化线程池调度器Thread_pool_Scheduler以及其中的各线程,线程池调度器与各线程池以及各个工作线程与处理器核心关系如图4所示。
更进一步地,基于所述线程池调度器启动日志管理线程logger_th以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,同时开启全局计时以及处理测试结果并输出;启动所述数据填充线程池fill_th_pool以填充所述压力测试数据组列表中的数据,其中,fill_th_pool将启动填充池内的“8”个工作线程,开始将所述压力测试数据组队列中组“1”数据写入待测内存段中,数据填充线程池的各线程在数据填充到最大地址后将退出,即填充完“16”GB内存,所述数据填充线程池将发送完成信号给线程池调度器,而后线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试,其中,所述预设时间为“20”秒,待测试停止后,回收并释放进程空间的内存,分析并处理各线程池记录的测试结果,由所述日志管理线程输出最终测试评定结果。
值得一提的是,本实施例中通过为包含NVDIMM设备和其它存储设备提供的全局可以字节级别的读写访问,可以解决现有技术中存在最小测试单位的限制;通过简化用户配置参数并统一压力测试流程的手段,可以解决现有技术中使用不便和测试结果标准不统一的问题。
根据本发明实施例,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
需要说明的是,如图5所示,上述实施例中针对同时支持PMEM和BLK两种访问模式的NVDIMM设备采用的是mmap及其dax形式进行压力测试,但是针对识别到的所述待测设备为非所述目标设备的情况时,即设备为DRAM设备的情况下,首先判断当前用户是否采用所述预设形式映射内存,即若采用以mmap的dax分支将物理内存地址按其实际内存大小直接映射的形式则可以直接将用户所需测试的物理内存地址段进行映射,而后进行页缓存再到块缓存完成DRAM设备的压力测试,若不是mmap的dax分支形式,则采用文件I/O的形式打开对应内存设备节点,而后通过块设备驱动完成DRAM设备的压力测试。
根据本发明实施例,所述方法还包括:在测试停止前,基于预设循环机制保证所述压力测试数据组列表中的测试数据全部测试完毕。
需要说明的是,所述线程池调度器等待所述复制线程池和所述反转线程池对组“1”数据完全测试退出后,将所述压力测试数据组列表中的数据组加“1”写入,直至写入第n+1组测试数据以完成全部测试,所述预设循环机制即为完成一组测试后带入下一组测试数据进行测试直至测试完全。
根据本发明实施例,所述启动内存复制线程池的各线程,具体包括:
以预设单位由待测内存段低地址复制到高地址,并校验,其中,若校验出错则由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;
以所述预设单位由待测内存段的高地址复制到低地址,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息,反之记录运行时间。
需要说明的是,检测到待测内存大小为“16”GB,则采用最大拷贝模式,取所述预设单位为“1”MB,从16GB的低地址拷贝到高地址并校验,此过程若校验出错则会由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;以及取所述预设单位为“1”MB,从“16”GB的高地址拷贝到低地址并校验,此过程若校验出错则会由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间。
根据本发明实施例,所述启动内存反转线程池各线程,具体包括:
各反转线将待测内存段低地址到高地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息;
各所述反转线将待测内存段高地址到低地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息。
需要说明的是,各反转线将待测内存段低地址到高地址对应的数据依次按位取反并校验,此过程若校验出错则会由日志管理线程根据调用等级输出错误信息;以及各反转线将待测内存段高地址到低地址对应的数据依次按位取反并校验,此过程若校验出错则会由日志管理线程根据调用等级输出错误信息。
图6示出了本发明一种便捷高效的内存压力测试系统的框图。
如图6所示,本发明公开了一种便捷高效的内存压力测试系统,包括存储器和处理器,所述存储器中包括便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被所述处理器执行时实现如下步骤:
识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
需要说明的是,首先判断所述待测内存设备是否为所述目标设备,其中,所述目标设备为NVDIMM设备,若识别到所述待测内存设备为NVDIMM设备时,检测NVDIMM设备信息(即所述目标设备信息数据)以获取其内存大小,而后依据所述预设形式对所述内存值进行空间映射,具体为:以mmap的dax分支将物理内存地址按其实际内存大小直接映射到当前进程的内存空间,具体如图2所示,所述基于所述内存值依据预设形式进行空间映射,具体包括如下步骤:为NVDIMM设备创建dax设备节点;利用mmap的dax分支发出缺页请求;将NVDIMM设备物理内存地址转换为虚拟地址;基于mmap将所述虚拟地址返回到当前进程。
需要说明的是,通过为NVDIMM设备创建DAX(Direct Access)设备节点,并通过以DAX文件的形式,利用libnvdimm子系统中的pmem模块配合mmap的DAX模式将NVDIMM的物理内存地址直接映射到当前应用进程可直接访问的内存空间上,为当前进程提供可以字节为单位的直接读写NVDIMM物理内存,而不经过Page Cache缓存映射机制,可以解决现有内存压力测试工具无法适用于NVDIMM设备的测试问题。
值得一提的是,libnvdimm子系统提供对3种NVDIMM设备的支持:持久内存(persistent memory,PMEM)模式的NVDIMM设备,块设备(block,BLK)模式的NVDIMM设备,以及同时支持PMEM和BLK两种访问模式的NVDIMM设备,其中,PMEM访问模式是把NVDIMM设备当作内存,BLK访问模式是把NVDIMM设备当作块设备,每种NVDIMM设备需要实现自己的驱动程序。
进一步地,于本实施例中,采用运行时间(即所述时间阈值)为“20”秒,运行在具有“8”核心的CPU,且以Linux kernel 5.16版本为内核的“64”位Linux操作系统的计算机系统环境上,并使用本发明的内存压力测试方法程序对该计算机系统环境中的“16”GB大小的NVDIMM内存设备做内存压力测试为例,在完成NVDIMM设备内存值的空间映射后,检测当前系统位数以及可用处理器核数,其中,所述系统位数为“64”位系统,所述可用处理器核数为“8”个,基于所述系统位数初始化对应的压力测试数据组列表vector<vector<uint64>*>data_list,测试数据的具体计算方法可参考图3;基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间,检测到当前可获得8个处理器核心数量,根据该数量确定工作线程池中的线程个数,并初始化线程池调度器Thread_pool_Scheduler以及其中的各线程,线程池调度器与各线程池以及各个工作线程与处理器核心关系如图4所示。
更进一步地,基于所述线程池调度器启动日志管理线程logger_th以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,同时开启全局计时以及处理测试结果并输出;启动所述数据填充线程池fill_th_pool以填充所述压力测试数据组列表中的数据,其中,fill_th_pool将启动填充池内的“8”个工作线程,开始将所述压力测试数据组队列中组“1”数据写入待测内存段中,数据填充线程池的各线程在数据填充到最大地址后将退出,即填充完“16”GB内存,所述数据填充线程池将发送完成信号给线程池调度器,而后线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试,其中,所述预设时间为“20”秒,待测试停止后,回收并释放进程空间的内存,分析并处理各线程池记录的测试结果,由所述日志管理线程输出最终测试评定结果。
值得一提的是,本实施例中通过为包含NVDIMM设备和其它存储设备提供的全局可以字节级别的读写访问,可以解决现有技术中存在最小测试单位的限制;通过简化用户配置参数并统一压力测试流程的手段,可以解决现有技术中使用不便和测试结果标准不统一的问题。
根据本发明实施例,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
需要说明的是,如图5所示,上述实施例中针对同时支持PMEM和BLK两种访问模式的NVDIMM设备采用的是mmap及其dax形式进行压力测试,但是针对识别到的所述待测设备为非所述目标设备的情况时,即设备为DRAM设备的情况下,首先判断当前用户是否采用所述预设形式映射内存,即若采用以mmap的dax分支将物理内存地址按其实际内存大小直接映射的形式则可以直接将用户所需测试的物理内存地址段进行映射,而后进行页缓存再到块缓存完成DRAM设备的压力测试,若不是mmap的dax分支形式,则采用文件I/O的形式打开对应内存设备节点,而后通过块设备驱动完成DRAM设备的压力测试。
根据本发明实施例,所述方法还包括:在测试停止前,基于预设循环机制保证所述压力测试数据组列表中的测试数据全部测试完毕。
需要说明的是,所述线程池调度器等待所述复制线程池和所述反转线程池对组“1”数据完全测试退出后,将所述压力测试数据组列表中的数据组加“1”写入,直至写入第n+1组测试数据以完成全部测试,所述预设循环机制即为完成一组测试后带入下一组测试数据进行测试直至测试完全。
根据本发明实施例,所述启动内存复制线程池的各线程,具体包括:
以预设单位由待测内存段低地址复制到高地址,并校验,其中,若校验出错则由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;
以所述预设单位由待测内存段的高地址复制到低地址,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息,反之记录运行时间。
需要说明的是,检测到待测内存大小为“16”GB,则采用最大拷贝模式,取所述预设单位为“1”MB,从16GB的低地址拷贝到高地址并校验,此过程若校验出错则会由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;以及取所述预设单位为“1”MB,从“16”GB的高地址拷贝到低地址并校验,此过程若校验出错则会由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间。
根据本发明实施例,所述启动内存反转线程池各线程,具体包括:
各反转线将待测内存段低地址到高地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息;
各所述反转线将待测内存段高地址到低地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息。
需要说明的是,各反转线将待测内存段低地址到高地址对应的数据依次按位取反并校验,此过程若校验出错则会由日志管理线程根据调用等级输出错误信息;以及各反转线将待测内存段高地址到低地址对应的数据依次按位取反并校验,此过程若校验出错则会由日志管理线程根据调用等级输出错误信息。
本发明第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中包括机器的一种便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被处理器执行时,实现如上述任一项所述的一种便捷高效的内存压力测试方法的步骤。
本发明公开的一种便捷高效的内存压力测试方法、系统和可读存储介质,利用了Linux中DAX+pmem模块为NVDIMM提供的字节级别的内存直接访问,成功为NVDIMM避开使用Page Cache机制,从而保障了对NVDIMM内存设备的压力测试结果的准确性;同时该程序简化了传统常用内存压力测试工具繁琐的测试参数配置,并去除了内存测试最小单位的限制,提供统一的测试标准流程,为用户提供了便捷、高效、统一的测试方案,从而达到准确和统一的测试结果。通过使用本发明的内存压力测试软件,将会更直观的对比出不同的内存设备以及在不同的计算机环境中的内存设备性能。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种便捷高效的内存压力测试方法,其特征在于,包括以下步骤:
识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
2.根据权利要求1所述的一种便捷高效的内存压力测试方法,其特征在于,所述识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射,具体包括:
判断当前所述待测内存设备是否为所述目标设备,其中,
识别到所述待测内存设备为所述目标设备时,提取所述目标设备信息数据以从中获取所述目标设备对应的所述内存值,其中,所述目标设备包括NVDIMM内存设备;
基于所述预设形式将物理内存地址按照所述内存值映射到当前进程的内存空间,其中,所述预设形式包括mmap的dax分支。
3.根据权利要求2所述的一种便捷高效的内存压力测试方法,其特征在于,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
4.根据权利要求1所述的一种便捷高效的内存压力测试方法,其特征在于,所述方法还包括:在测试停止前,基于预设循环机制保证所述压力测试数据组列表中的测试数据全部测试完毕。
5.根据权利要求1所述的一种便捷高效的内存压力测试方法,其特征在于,所述启动内存复制线程池的各线程,具体包括:
以预设单位由待测内存段低地址复制到高地址,并校验,其中,若校验出错则由所述日志管理线程根据调用等级输出错误信息,反之记录运行时间;
以所述预设单位由待测内存段的高地址复制到低地址,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息,反之记录运行时间。
6.根据权利要求5所述的一种便捷高效的内存压力测试方法,其特征在于,所述启动内存反转线程池各线程,具体包括:
各反转线将待测内存段低地址到高地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息;
各所述反转线将待测内存段高地址到低地址对应的数据依次按位取反,并校验,其中,若校验出错则由所述日志管理线程根据所述调用等级输出错误信息。
7.一种便捷高效的内存压力测试系统,其特征在于,包括存储器和处理器,所述存储器中包括便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被所述处理器执行时实现如下步骤:
识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射;
检测当前系统位数以及可用处理器核数,基于所述系统位数初始化对应的压力测试数据组列表,基于所述处理器核数确定工作线程池的线程数,并初始化线程池调度器以确定各所述线程池工作时间;
基于所述线程池调度器启动日志管理线程以及数据填充线程池,其中,启动所述日志管理线程以实时输出当前进度信息,启动所述数据填充线程池以填充所述压力测试数据组列表中的数据;
待所述线程池调度器接收到填充完成信号后,启动内存复制线程池的各线程以及内存反转线程池各线程直至所述压力测试数据组列表中的数据测试时间超过预设时间阈值时停止测试;
待测试停止后,回收并释放进程空间的内存,并对测试结果进行分析处理,由所述日志管理线程输出最终测试评定结果。
8.根据权利要求7所述的一种便捷高效的内存压力测试系统,其特征在于,所述识别到待测内存设备为目标设备时,提取所述目标设备信息数据以从中获取设备内存值,并基于所述内存值依据预设形式进行空间映射,具体包括:
判断当前所述待测内存设备是否为所述目标设备,其中,
识别到所述待测内存设备为所述目标设备时,提取所述目标设备信息数据以从中获取所述目标设备对应的所述内存值,其中,所述目标设备包括NVDIMM内存设备;
基于所述预设形式将物理内存地址按照所述内存值映射到当前进程的内存空间,其中,所述预设形式包括mmap的dax分支。
9.根据权利要求8所述的一种便捷高效的内存压力测试系统,其特征在于,若识别到所述待测设备为非所述目标设备时,所述方法还包括:
判断用户是否采用所述预设形式映射内存,其中,
若是,则以所述预设形式将用户所需测试的物理内存地址段映射到当前进程;
若不是,则以文件I/O的形式打开对应内存设备节点。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括一种便捷高效的内存压力测试方法程序,所述便捷高效的内存压力测试方法程序被处理器执行时,实现如权利要求1至6中任一项所述的一种便捷高效的内存压力测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210698343.4A CN115292147A (zh) | 2022-06-20 | 2022-06-20 | 便捷高效的内存压力测试方法、系统和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210698343.4A CN115292147A (zh) | 2022-06-20 | 2022-06-20 | 便捷高效的内存压力测试方法、系统和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115292147A true CN115292147A (zh) | 2022-11-04 |
Family
ID=83819982
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210698343.4A Pending CN115292147A (zh) | 2022-06-20 | 2022-06-20 | 便捷高效的内存压力测试方法、系统和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115292147A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116991679A (zh) * | 2023-09-26 | 2023-11-03 | 四川华鲲振宇智能科技有限责任公司 | 一种内存压力测试时自动分配最佳线程数的方法 |
-
2022
- 2022-06-20 CN CN202210698343.4A patent/CN115292147A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116991679A (zh) * | 2023-09-26 | 2023-11-03 | 四川华鲲振宇智能科技有限责任公司 | 一种内存压力测试时自动分配最佳线程数的方法 |
CN116991679B (zh) * | 2023-09-26 | 2023-12-08 | 四川华鲲振宇智能科技有限责任公司 | 一种内存压力测试时自动分配最佳线程数的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100873943B1 (ko) | 비휘발성 컴퓨터 메모리를 독출하기 위한 시스템 및 방법 | |
CN108133732B (zh) | 闪存芯片的性能测试方法、装置、设备及存储介质 | |
US11016695B2 (en) | Methods and apparatus to perform memory copy operations | |
US9262283B2 (en) | Method for reading kernel log upon kernel panic in operating system | |
US10643736B2 (en) | Method, apparatus and electronic device for read/write speed testing | |
CN107133144B (zh) | 一种动态监测堆内存使用错误的内存监测装置及方法 | |
CN113868039A (zh) | 一种测试方法、装置及相关设备 | |
CN115292147A (zh) | 便捷高效的内存压力测试方法、系统和可读存储介质 | |
CN116382991A (zh) | 一种存储设备测试方法、装置、计算机设备及存储介质 | |
CN114048485B (zh) | 一种针对Docker容器内进程代码段完整性动态监测方法 | |
CN116913351B (zh) | 一种存储设备数据丢失测试方法、装置、介质及设备 | |
CN114138570A (zh) | 一种fpga的测试方法、系统、设备以及介质 | |
US9348723B2 (en) | Method, system, and computer program product | |
CN115712397B (zh) | 缓存验证装置、方法及系统 | |
CN109582523B (zh) | 有效分析SSD前端NVMe模块性能的方法及系统 | |
US9860155B1 (en) | Code coverage and data analysis | |
US20010051866A1 (en) | Tracing circuit, tracing method and record medium for operation monitoring device | |
CN104166583A (zh) | 一种基于移动设备虚拟化环境的数据存储方法及装置 | |
CN114446373A (zh) | 一种测试ddr器件的方法及计算机存储介质 | |
CN111897744A (zh) | 一种数据写入方法、装置、电子设备及存储介质 | |
CN113626272B (zh) | 基于mmap系统的内存读写速率测试方法、装置及系统 | |
CN116991542B (zh) | 一种虚拟机快照方法、系统、电子设备及计算机存储介质 | |
CN118155698B (zh) | 数据测试方法、电子设备及存储介质 | |
CN111208944B (zh) | 数据预判方法、装置和可读存储介质 | |
WO2023036076A1 (zh) | 一种软件监测方法以及相关装置 |
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 |