服务器测试之内存基础知识

内存:终于终于内存来了,齐活了

1.什么是内存

内存(Memory)又称主存,用于暂时存放中间态的临时数据:是外设与CPU进行沟通的桥梁。(Memory)是计算机系统中用于存储数据和程序的硬件组件。它在计算机运行过程中扮演着至关重要的角色,主要负责临时存储操作系统、应用程序和当前正在处理的数据。
在这里插入图片描述

内存条(Memory Module)是计算机中用于存储数据的物理组件,通常插入主板上的内存插槽中。内存条的主要功能是为计算机的运行提供临时存储空间,以便CPU可以快速读取和写入数据。
MemoryChip 内存芯片 颗粒:内存芯片是计算机系统中用于存储临时信息以及程序执行时需要的数据的半导体芯片。
金手指:PCB(印刷电路板)边缘上的一排金黄色导电触片。这些触片通常被镀上金,因其形状类似手指,故得名“金手指”。金手指的主要功能是在不使用焊接的情况下实现快速、可靠的电气连接
/proc/meminfo,Linux内存总览
在这里插入图片描述

2.内存规格

2.1型号:

model号内存芯片型号是内存条的重要标识,它包含了内存芯片的制造商、容量、速度、封装类型等关键信息。不同的数字字母代表着不同的信息,各家厂商有自己的命名规则

2.2生产厂商:

三星:1992年,三星完成全球第一个64M DRAM的研发,一举超越日本NEC,成为世界第一大DRAM内存制造商,至此,韩国企业在半导体行业一直处于世界领先地位,蝉联27年世界第一。
在这里插入图片描述

SK海力士:Hynix 海力士芯片生产商,源于韩国品牌英文缩写"HY"。海力士即原现代内存(2001年之前),2001年更名为海力士。2021年12月SK海力士完成了收购英特尔NAND闪存及SSD业务,新设立的公司命名为“Solidigm”
在这里插入图片描述

镁光:镁光科技于1978年成立,历经四十余年的发展,现已成为全球最大的半导体储存及影像产品制造商之一。2023年5月21日,中国国家互联网信息办公室(网信办)禁售美光科技产品,镁光近50%的营收来自中国市场
在这里插入图片描述

金士顿:1987 年,金士顿®凭借单一产品进入市场。 金士顿的全球总部设在美国加州芳泉谷
在这里插入图片描述

芝奇:始于1989年台湾,十大内存条品牌,全球领先的内存模块专业制造商
在这里插入图片描述

2.3容量:

内存容量是指计算机内存(RAM)能够存储的数据量,通常以GB(Gigabytes)为单位,企业级目前常用32G 64G也有48G和96G
1KB=1024B=1024字节
1MB=1024KB=1,048,576字节
1GB=1024MB=1,073,741,824字节
1TB=1024GB=1,099,511,627,776字节
1PB=1024TB=1,125,899,906,842,624字节

2.4频率:

内存条标签上的数值比如1333、1600、2133、2400、2666、3200这些都是等效频率,是通过技术提升后,实际传输速率,频率的单位是兆赫兹(MHz),现在最高可到6400MHz

在这里插入图片描述

2.5带宽

内存带宽是指内存在单位时间内能够传输的数据量,通常以GB/s(吉字节每秒)为单位。内存带宽的计算公式为:
带宽=内存核心频率×倍增系数×(内存总线位数/8)
其中,倍增系数是指内存每次传输的数据位数。例如,DDR4的倍增系数为16。
实际测试中计算公式2
带宽=标称频率×线宽 ÷ 8
内存带宽理论值=内存运行频率 * channel总数* 64(数据位宽)÷ 8(MB/s)* 0.7

内存模块频率:频率越高,数据传输速率越快,带宽亦随之提高。
数据位宽:位宽越大,每次传输的数据量越多,带宽亦随之增长。
通道数量:增加通道数量可以有效提升内存模块数据传输速度,进而扩大带宽。例如,双通道内存的带宽是单通道内存的两倍。
总线宽度:总线宽度越大,数据传输能力越强,带宽亦随之提高。
在这里插入图片描述

2.6DDR:

DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory,双数据率同步动态随机存储器),简称为DDR
SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,现在已经发展到DDR5 SDRAM。
在这里插入图片描述
在这里插入图片描述

2.7槽位:

服务器白皮书有不同数量内存插法图示
在这里插入图片描述

务必按照指导插内存位置否则可能会导致部分内存不识别,要注意看标识的槽位C0D0与主板丝印标识位置是否一致,有的主板上丝印与白皮书标识的顺序不一致,不同品牌容量频率内存不可混插

2.8内存列Rank

Rank也叫物理bank。内存RANK是指内存控制器同时访问的一组内存颗粒集合。内存条上的一组内存颗粒(Chip),这些颗粒并联起来组成一个64位的数据集合,以实现特定的数据传输速率。由于半导体技术发展,可以在一个芯片里面就实现多个rank,所以区分rank不要以内存芯片的数量来区分rank。
内存条上的RANK数量通常在内存条的标签上标明。常见的标识方式如下:
1R:表示内存条有1个RANK。
2R:表示内存条有2个RANK。
4R:表示内存条有4个RANK。
此外,标签上还会标明每个内存颗粒的位宽,常见的位宽有:
x2:每个存储芯片有 2 条数据线。
x4:每个存储芯片有 4 条数据线。
x8:每个存储芯片有 8 条数据线。
在这里插入图片描述

2.9内存通道Channel

内存通道是计算机系统中连接处理器(CPU)与内存(RAM)之间的物理通道,负责两者之间的数据传输。它起到了桥梁的作用,连接了处理器和内存,使得它们能够相互传递数据。内存控制器通常有一个通道、两个通道(双通道)、四通道(四通道)、六通道和八通道等,下图服务器为12channel
在这里插入图片描述

2.10Chip颗粒

内存条由若干个黑色的内存颗粒构成,每个内存颗粒称为一个Chip。在每个Chip内部,是由一层层的Bank组成的。每个Bank内部是电容的行列矩阵结构,这些矩阵由多个方块状的元素构成,每个方块元素是内存管理的最小单位,也叫内存颗粒位宽。
从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column

3.内存测试

一般测试内存有带宽延时测试,注错测试,压力测试

3.1带宽延时测试,

常见内存测试工具有stream mlc(Intel Memory Latency Checker) mbw

3.1.1 Stream

  1. 安装gcc:
    yum -y install gcc

  2. 测试工具解压编译
    上传测试工具(stream.c版本为5.10)到待测试机器。解压编译
    gcc -mtune=native -march=native -O3 -fopenmp -mcmodel=medium -DNTIMES=200 -DSTREAM_ARRAY_SIZE=1273741824 stream.c -o stream.o
    编译参数解释:
    -O3:指定最高编译优化级别,即3
    -fopenmp:启用OpenMP,适应多处理器环境,更能得到内存带宽实际最大值。开启后,程序默认运行线程为CPU线程数
    -DN=2000000:指定测试数组a[]、b[]、c[]的大小(Array size)。该值对测试结果影响较大(5.9版本默认值2000000,。若stream.c为5.10版本,参数名变为-DSTREAM_ARRAY_SIZE,默认值10000000)。注意:必须设置测试数组大小远大于CPU 最高级缓存(一般为L3 Cache)的大小,否则就是测试CPU缓存的吞吐性能,而非内存吞吐性能。
    Tips:
    DSTREAM_ARRAY_SIZE取值计算
    算法1:
    {L3缓存X MB}×1024×1024×4.1×CPU路数/8,结果取整数
    解释:由于stream.c源码推荐设置至少4倍最高级缓存,且STREAM_ARRAY_SIZE为double类型=8 Byte。所以公式为:最高级缓存(单位:Byte)×4.1倍×CPU路数/8
    算法2:
    A×1024×1024×1024=3×8×N
    A值取值不超过内存单条容量的50%,算出N值为DSTREAM_ARRAY_SIZE
    测试时长:约1分钟

    32G内存条 715827883
    48G 内存条 1073741824
    64G 内存条 1431655766
    96G 内存条 2147483648

  3. 测试
    在编译输出的可执行文件(stream)所在目录下运行:
    ./stream

    测试结果
    在这里插入图片描述
    在这里插入图片描述

    Copy操作:它先访问一个内存单元读出其中的值,
    再将值写入到另一个内存单元
    Scale操作:先从内存单元读出其中的值,作一个乘法运算,
    再将结果写入到另一个内存单元
    Add操作:先从内存单元读出两个值,做加法运算,
    再将结果写入到另一个内存单元
    Triad :将以上三个组合起来,在本测试中表示的意思是将Copy、Scale、Add
    三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,
    对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。
    4.调优
    可以测试前使用命令指定运行线程为X:
    export OMP_NUM_THREADS=X
    可以绑定CPU核心:export GOMP_CPU_AFFINITY=0-46
    例如CPU为92核时,测试指令:
    gcc -fopenmp -O3 -DSTREAM_ARRAY_SIZE=2000000000 -DNTIMES=80 stream.c -o stream &&export OMP_NUM_THREADS=92&&export GOMP_CPU_AFFINITY=0-91&&./stream

3.1.2 mlc(Intel Memory Latency Checker)

Intel Memory Latency Checker (MLC) 是一种用于测量内存延迟和带宽的工具,测量从一组特定内核到高速缓存或内存的带宽和延迟。
下载安装包
https://www.intel.com/content/www/us/en/developer/articles/tool/intelr-memory-latency-checker.html
安装包下载拷贝到系统下
解压安装
tar -zxvf mlc_xxx.tgz -C mlc
cd mlc/Linux
./mlc
带宽测试结果
在这里插入图片描述

3.1.3 Mbw

mbw是一个内存带宽测试工具,通常用来评估用户层应用程序进行内存拷贝操作所能达到的带宽,可测试在内存拷贝(memcpy)、字符串拷贝(dumb)、和内存卡拷贝(mcblock)三种方式下的内存拷贝速度。
1.安装
ubuntu系统
安装命令:apt install -y mbw
centos系统
安装命令:
首先克隆项目到本地git clone https://github.com/raas/mbw.git
解压后切换路径cd mbw
编译并安装make
源码安装
下载:https://github.com/raas/mbw/
#rpm -ivh mbw-1.2-1.src.rpm
#locate mbw
/home/cloudtest/tools/mbw-1.2-1.src.rpm
/root/rpmbuild/SOURCES/mbw.tar.gz
/root/rpmbuild/SPECS/mbw.spec
将/root/rpmbuild/SOURCES/mbw.tar.gz解压到/opt目录下
#cd /opt/mbw
#make
vi /etc/profile,在文件末尾加入:export PATH=$PATH:/opt/mbw,
然后退出
#source /etc/profile
#mbw -h 验证

2.测试:
./mbw -q -n 10 124000
-q:隐藏日志
-n 10:表示运行10次
124000(MB):表示测试所用内存大小,用剩余内存的一半测试
#结果分析:
#只需关注平均值(AVG),内存分配速率越大,性能越好,三次AVG分别对应内存拷贝,字符串拷贝,内存卡拷贝。

使用taskset指定CPU核心可以优化结果
eg:taskset -cp 0,1 7460

-n: number of runs per test (0 to run forever) 测试次数
-a: Don’t display average
-t0: memcpy test 内存拷贝
-t1: dumb (b[i]=a[i] style) test 字符串拷贝
-t2: memcpy test with fixed block size 内存块拷贝
-b : block size in bytes for -t2 (default: 262144)
-q: quiet (print statistics only) 隐藏日志

3.1.4 HPL

AMD HPL(High-Performance Linpack)是一个用于解决双精度(64位)算术中的随机密集线性系统的软件包,适用于分布式内存计算机。它是一个可移植且免费的高性能计算Linpack基准测试实现。

AMD stream测试,安装依赖包
yum install python3-devel
yum install numactl
yum install hwloc
yum install hwloc-gui
pip3 install cpuid
pip3 install boto
内部pip源:
vim /etc/hosts
10.66.96.147 pypi.sdns.ksyun.com
vim /etc/pip.conf
[list]
format=columns
[global]
index-url = http://pypi.sdns.ksyun.com/simple/
trusted-host = pypi.sdns.ksyun.com
linpack测试
解压hpl4.5.0.tar.bz2
cd lib
./prepare-system.sh
vim install-ompi.sh
第4行修改:
ADDRESS_OPENMPI=http://10.7.96.31/pxe-download/liuboyang2/1-cpu/openmpi-4.1.4.tar.bz2 #因为无法访问外网,将openmpi安装包放在内部网络
./install-ompi.sh
cd hpl4.5/
vim run_hpl.sh #脚本默认不支持centos,只支持rhel、ubuntu、sales,修改626行增加centos
if os_name in [‘rhel’, ‘sles’, ‘ubuntu’, ‘centos’]
执行测试:
./run_hpl.sh
测试结果
在这里插入图片描述

3.2 EDAC注错

3.2.1什么是EDAC

EDAC(Error Detection And Correction,错误检测与纠正)是一种在Linux系统中用于检测和报告硬件错误的框架,尤其专注于内存错误。它的主要目的是在系统运行过程中发现并报告硬件故障,如内存的可纠正错误(Correctable Errors,简称CE)和不可纠正错误(Uncorrectable Errors,简称UE)。CE是系统能够自我修复的错误,而UE则可能导致系统宕机。EDAC通过Linux的sysfs文件系统展示错误信息,并通过内存控制器的逻辑将错误定位到具体的内存模块上。linux中提供了一个edac-utils 内存纠错诊断工具,可以用来检查服务器内存潜在的故障
EDAC核心由edac_core.ko模块和多个内存控制器驱动模块构成,能够利用精心设计的函数来管理内存控制器报告的CE和UE。例如,edac_mc_alloc()用于初始化内存控制器的结构,而edac_device_handle_ce()与edac_device_handle_ue()分别用于标记CE和UE。EDAC还通过edac_mc_handle_error()和edac_raw_mc_handle_error()向用户空间报告内存事件
EDAC在服务器内存故障预测方面发挥着重要作用。通过持续监控内存错误并分析错误日志,EDAC能够识别潜在的故障模式并预测即将发生的故障。它的优势在于能够主动预防故障,提高服务器内存子系统的整体可靠性,并帮助降低因内存故障导致的成本 47。在实施EDAC时,应遵循最佳实践,包括启用EDAC、定期监控错误日志、设置阈值和警报,以及根据预测采取预防措施
EDAC 用于内存故障预测的关键功能:
错误计数和监控: EDAC 持续跟踪内存错误的发生情况,例如位翻转、奇偶校验错误和多位错误。
故障模式分析: EDAC 分析内存错误模式以识别重复出现的错误类型和内存模块。
测算法: EDAC 使用复杂的预测算法,基于历史错误数据和特定于平台的因素,来评估即将发生的故障风险。
故障确认及定位故障内存槽位
grep “[0-9]” /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count
在这里插入图片描述

count:不为0的行即代表存在内存错误。
mc: 内存控制器
csrow:内存通道。
ch*:通道内的第几根内存
在linux中提供了一个edac-utils 内存纠错诊断工具,也可以用来检查服务器内存潜在的故障。

3.2.2 EDAC测试

Corrected Error(CE):指硬件自行恢复的故障,通常也会通知软件,软件读取Status寄存器记录故障信息;
Fata Error(FE):指严重的硬件错误,比如Processor 电源故障,Memory Control严重故障等;
Uncorrected Error(UCE):指硬件无法自行恢复的故障,在Intel MCA架构下,此类错误是MCi_STATUS寄存器PCC bit为1,表示Processor可能已经被故障损坏,同时重启Processor也不可靠,软件会根据此信息主动Panic;

1.安装 edac-utils 工具
yum install -y libsysfs edac-utils
2.执行检测命令,可查看纠错提示如下
在这里插入图片描述

mc X表示 表示内存控制器0;
CPU_Src_ID#0 表示源CPU0;
Channel#0 表示通道0;
DIMM#0 标示内存槽0;
Corrected Errors 代表已经纠错的次数
intel内存 MRT 技术
英特尔推出的一种内存 RAS(Reliability, Availability, and Serviceability)技术内存故障预测
MRT全称Memory Resilience Technology,官网介绍它是一种内存 RAS 技术,MRT 技术通过多维模型和算法,从微观层面分析和预测内存错误,提前采取措施隔离故障位,从而减少内存故障对系统的影响。
在这里插入图片描述

英特尔内存故障预测(Intel MFP)
英特尔内存故障预测(Intel MFP)是一项先进的技术,通过机器学习分析内存错误日志,预测潜在的内存故障,从而减少服务器宕机时间和维护成本。

3.2.3 ras-tool

RAS,是Reliabilty,Availability,Serviceability的缩写,是对一台服务器可以被可靠使用的要求。
R表示服务器提供正确输出的能力,要保证1+1=2;
A表示能提供输出的能力,要计算出1+1的结果;
S表示发现这个设备不能提供服务了(A出了问题),能把坏掉的部分换掉或者修好的能力。
ras-tool 是一套用于在 X86 和 Arm 平台上通过 APEI EINJ 接口注入和测试 RAS(可靠性、可用性、服务性)能力的优秀工具集。cmcistorm 注入一堆已纠正的错误然后迅速触发它们,hornet 向其他进程注入 UC 内存错误,以及 einj_mem_uc 注入错误并以多种方式触发它
ras-tool测试
首先设置BIOS:
(可以用SCELNX工具设置BIOS:./SCELNX_64 /o /s BIOS.cfg 导出配置
./SCELNX_64 /i /s BIOS.cfg 导入配置 )
1.Platform Configuration ->Runtime Error Logging ->System Memory Poison ->Enable
2.Platform Configuration ->Runtime Error Logging ->System Cloaking ->Disable
3.Platform Configuration ->Runtime Error Logging ->eMCA Settings ->Memory Error eLog ->Enable
4.Platform Configuration ->Runtime Error Logging ->Whea Settings ->Whea Log Memory Error->Enable
5.Platform Configuration ->Runtime Error Logging ->Error Injection Settings ->WHEA Error Injection Support ->Enable
6.Platform Configuration ->Runtime Error Logging ->UPI error enabling ->Correctable Error Threshold -> 1
7.Platform Configuration -> Runtime Error Logging -> System RAS Mode -> Custom
浪潮:Enhanced Diagnosis Support-> Enable

解压并接入ras-tools目录后,运行make,进行编译。
编译完成后,运行modprobe einj param_extension=1,dmesg -C清空日志,加载注错模块,然后运行CE测试
./cmcistorm 1 1 ,dmesg查看信息。
软件模拟注入UE错误:
运行 ./einj_mem_uc -c 1 -d 1 -f single,dmesg查看信息。
./einj_mem_uc -c 1 -d 1 -f patrol

-c 1:指定要注入错误的CPU核心ID。
-d 1:指定要注入错误的内存地址。
-f single:注入单个错误。
-f patrol:注入巡逻错误。
查看BMC页面日志信息以及dmesg日志信息

3.2.4 AMD注错测试

AMD测试注错的工具为RAS_Error_Inject_NDA_2.0.26.111-linux.zip,在AMD官网可直接下载
解压
unzip RAS_Error_Inject_NDA_2.0.26.111-linux.zip
cd RAS_Error_Inject_NDA_2.0.26.111-linux
注错
注入错误:使用 ras_error_inject 工具注入错误。该工具通过向特定的内存地址写入特定的值来模拟错误。
bash
./ras_error_inject -b -t -a

-v -m
其中:
:要注入错误的IP块,如 umc、sdma、gfx 等。
:错误类型,如 ue(多不可恢复错误)、ce(单可恢复错误)、poison(毒药错误)。

:要注入错误的内存地址。 :要写入的值。 :实例掩码,默认值为 0x1。 注入一个不可恢复错误到 umc 块:./ras_error_inject -b umc -t ue -a 0x0 -v 0x0 -m 0x1 检查错误注入结果:cat /sys/class/drm/card0/device/ras/umc_err_count

3.3压力测试

3.3.1 memtester – 内存压力测试工具

Memtester:是一个内存压力测试工具,主要是捕获内存错误和一直处于很高或者很低的坏位,其测试的主要项目有随机值,异或比较,减法,乘法,除法,与或运算等等。通过给定测试内存的大小和次数,可以对系统现有的内存进行测试,测试内存(主要DDR)的读写访问可靠性(仅正确性,与速度性能无关)
下载安装包 wget http://pyropus.ca/software/memtester/old-versions/memtester-4.5.0.tar.gz
解压 tar -zxvf memtester-4.5.0.tar.gz
cd memtester-4.5.0/
make
make install
如果要测试4G内存100次:./memtester 4G 100
如果要测试4G内存无限次:./memtester 4G
-p PHYSADDR: 用于指定起始物理内存地址开始测试(16进制的地址格式),一般是硬件工程师用来测试内存映射的设备IO等场景。指定内存地址会覆盖对应地址的内存数据(这部分内存可能是系统或者其他应用在用的),从而导致crash。
-d 默认使用/dev/mem,我们不用指定
mem: 默认使用M(MB),可以指定B, K, M, or G(分别代表 bytes, kilobytes, megabytes, or gigabytes)
loops:测试次数,默认无限次数执行下去,写100则会执行100次

3.3.2 lmbench – 内存综合性能测试工具

lmbench是个用于评价系统综合性能的多平台开源benchmark,能够测试包括文档读写、内存操作、进程创建销毁开销、网络等性能,测试方法简单。
下载安装包:http://sourceforge.net/projects/lmbench/files/latest/download
解压:tar
命令行键入:make
编译测试:在命令行执行:make results
设置除了MB(默认值较大,耗时较长或程序运行不起来,取值大于4倍的外部缓存小于80%的物理内存即可)和Mailresults(输入no敲回车,意思不发送邮件回执)外,其他都选默认值】
一定要注意设置MB值,设置值越大表示测试结果越精确测试时间也就越长
测试完毕后,
执行make results
make see
在这里插入图片描述

3.3.3 sysbench内存申请速度测试工具

sysbench 的 CPU测试是在指定时间内,循环进行素数计算,sysbench 是一个模块化的、跨凭条、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。主要包括以下几种方式的测试:1)CPU性能、2)磁盘io性能、3)线程调度性能、4)互斥锁性能、5)数据库性能、6)内存性能等。
安装
ubuntu系统sudo apt-get install sysbench
centos系统sudo yum install sysbench
检查是否安装成功:sysbench –version
CPU测试运行代码:CPU测试主要用于评估系统处理器的计算能力
sysbench cpu --cpu-max-prime=20000 run #计算20000以内素数所需的时间
cpu-max-prime:素数生成数量的上限
threads:线程数 一般设置单线程和最大线程
time:运行时长,单位秒
内存测试运行代码:
sysbench memory --memory-block-size=1M --memory-total-size=10G run
内存测试通过多次读取和写入内存块来评估内存的吞吐量。常用的参数包括:
–memory-block-size:指定内存操作的块大小(如1MB)。
–memory-total-size:设定测试总量,即总共要读写多少数据。

3.3.4 LTP 进行内存压力测试

LTP(Linux Test Project)是一个用于测试 Linux 系统稳定性和性能的工具集。它提供了多种测试脚本,可以对系统的各个方面进行压力测试,包括内存管理
安装 LTP
git clone https://github.com/linux-test-project/ltp.git
cd ltp
make autotools
./configure
make
make install

初始测试
./runltp -p -l /tmp/resultlog.20240124 -d /tmp -o /tmp/ltpscreen.20240124 -t 24h
-p:指定日志格式,确保日志可读。
-l:指定测试日志文件。
-d:指定临时存储目录,默认为 /tmp。
-o:指定测试输出文件。
-t:指定测试持续时间,例如 24h 表示 24 小时。

压力测试
压力测试用于验证系统在高负载下的健壮性。可以使用 ltpstress.sh 脚本进行压力测试:
./ltpstress.sh -d /tmp/sardata -l /tmp/ltpstress.log -I /tmp/iofile -i 5 -m 128 -t 24 -S
-d:指定 sar 或 top 记录文件,默认为 /tmp/ltpstress.data。
-l:指定测试结果文件,默认为 /tmp/ltpstress.log。(小写L表示log缩写)
-I:指定 iostat 结果文件,默认为 /tmp/ltpstress.iostat。(大写i表示磁盘IO)
-i:指定 sar 或 top 快照时间间隔,默认为 10 秒。
-m:指定最小的内存使用量,默认为 RAM + 1/2 swap。
-t:指定测试时间,例如 24 表示 24 小时。
-S:使用 sar 工具记录数据。
测试结果分析
测试完成后,可以使用以下命令分析测试结果:
yum install sysstat
#查看 CPU 平均使用率
sar -u -f /tmp/sardata
#查看内存平均使用率
sar -r -f /tmp/sardata
#查看所有失败的测试用例grep FAIL /tmp/ltpstress.log | sort | uniq > /tmp/failcase.txt
分析 ltpstress.log 文件,查看所有失败的测试用例,并进一步分析失败原因。

3.3.5 Stressapptest

Stressapptest 是一个用于在各种系统组件上施加压力的工具,特别专注于内存和 CPU。通过运行各种模式的访问测试,stressapptest 旨在模拟高负载下的系统行为,并帮助发现潜在的错误,比如硬件故障、过热或系统组件的不稳定性。
安装
git clone https://github.com/stressapptest/stressapptest.git
cd stressapptest
./configure
make
sudo make install
或者sudo apt-get install stressapptest

stressapptest -s 100 -M 2048 -m 4 -W
这条命令的含义是:
-s 100:测试持续100秒。
-M 2048:使用2048MB(即2GB)内存进行测试。
-m 4:启动4个线程执行测试。
-W:启用更强的数据完整性验证。

在 NUMA 架构下,可以将 CPU 绑定到特定的 NUMA 节点上,并使用 numactl 工具来指定节点:
numactl -N 0 -m 2 stressapptest -s 100 -M 2048 -m 4 -W
这条命令的含义是:
numactl -N 0 -m 2:将 CPU 绑定到节点 0,将内存分配绑定到节点 2。
stressapptest -s 100 -M 2048 -m 4 -W:运行 stressapptest,测试持续100秒,使用2GB内存,启动4个线程,启用更强的数据完整性验证。
可以使用以下命令查看 NUMA 节点的内存消耗情况:
watch -n 1 “numactl -H”

4.内存性能调优设置

性能还是最重要的还是这几面

1.BIOS配置

BIOS打开一些性能模式的设置,关闭节能模式
Hyper-ThreadingTechnolog/Enable LP ->Enable或者ALL LP
Numa->Enable
Snc/sub-NUMA->Enable
Turbo Mode->Enable
Package C State ->C0/C1 state
Enabled SpeedStep (PStates)->Enable
hardware p-states->Native Mode
BIOS control EPB->performance
MWAIT/monitor->Disable
Intel VT for Directed I/O->Disable
KTI prefetch->Enable

2.CPU性能模式睿频

1.设置睿频模式cpupower frequency-set -g performance
cpupower -c all frequency-set -g performance
2.安装并使用 tuned 工具,设置性能配置
apt install tuned
tuned-adm active
tuned-adm profile latency-performance
3.禁用不需要的系统服务,以减少系统资源消耗
systemctl disable unnecessary-service
4.锁频
cd /etc/default
vim grub
#在GRUB_CMDLINE_LINUX这一行中的quiet后面增加 processor.max_cstate=0 intel_idle.max_cstate=0 idle=poll,保存后退出vim
#使新增加的参数生效,重新生成grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#重启服务器
reboot

3.系统下一些设置

1.使用 numactl:控制进程和线程的NUMA策略,优化内存访问。
numactl --interleave=all your_application
2.对使用大量内存的应用(如数据库)启用大页内存,减少内存页的分配和管理开销。
echo 40000 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
3.减少系统对交换分区的依赖,提升内存使用效率。
将/proc/sys/vm/swappiness的值设置为较低值(如10),让系统更倾向于使用物理内存sysctl vm.swappiness=10
4.调整ulimit设置:为进程增加打开文件句柄的限制,以避免高负载下的资源不足
ulimit -s unlimited #只在当前终端窗口生效
永久设置:将 ulimit 命令添加到用户的 .bashrc 或 .bash_profile 文件中,或直接修改 /etc/security/limits.conf 文件,可以实现永久生效
5.测试工具、编译工具、内核、操作系统版本,测试参数的设置,CPU性能,测试环境配置这些也都有一定的影响
6./dev/shm
/dev/shm POSIX 标准定义的共享内存机制的默认实现之一,它允许我们将内存的一部分作为文件系统来使用。文件保存在内存中,因此读写速度极快,适合用来临时存储数据或在进程之间共享信息。是利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,而不是磁盘上。其大小是非固定的
查看当前容量:df -h /dev/shm
调整 /dev/shm 的大小
临时调整:
sudo mount -o remount,size=2G /dev/shm
永久调整:
编辑 /etc/fstab 文件,添加或修改以下内容:
tmpfs /dev/shm tmpfs defaults,size=2G 0 0
然后运行以下命令使修改生效:
sudo mount -o remount /dev/shm
/dev/shm在高性能需求的场景下,它能够显著提高进程间通信和数据缓存的效率,通过合理配置和使用,它能让你的应用跑得更快。注意:/dev/shm 是内存文件系统,存储的数据在系统重启后会被清空。如果需要持久化,请定期将数据备份到磁盘。

1.何为内存模块 (Memory Module)? 内存模块是指一个印刷电路板表面上有镶嵌数个记忆体芯片chips,而这内存芯片通常是DRAM芯片,但近来系统设计也有使用快取隐藏式芯片镶嵌在内存模块上内存模块是安装在PC 的主机板上的专用插槽(Slot)上镶嵌在Module上DRAM芯片(chips)的数量和个别芯片(chips)的容量,是决定内存模块的设计的主要因素。 2.什么是Parity? 早先所使用的存储器数据检错方式是Parity Check,其是以每8比特增加1比特的方式进行检错。因此若是具备Parity的存储器,其数据宽度将比非parity的存储器为大。不过若以 Parity的检错方式看,其多出的奇偶位事实上只用于分辨奇数或偶数个比特数。这种方式仅能得知是某一位发生错误,并无法确定是哪一个位置发生错误,而且无法运用在双数位的检错上。 3.什么是ECC? ECC是另一种更为进步的存储器数据检错机制。其工作的方式与Parity不同,并不是采用单一比特的方式来进行检错,而是采用数据块(block)概念与复杂的演算方法来修正数据。因此不仅能检测多位比特错误,还能进行修正单一比特的错误。 4.SPD的作用是什么? 为Serial Presence Detect 的缩写,它是烧录在EEPROM内的码,以往开机时BIOS必须侦测memory,但有了SPD就不必再去作侦测的动作,而由BIOS直接读取 SPD取得内存的相关资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂亮的丑小鸭丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值