#查看内存信息 dmidecode -t memory dmidecode -t 16 sudo dmidecode -t 17 | awk -F': ' ' BEGIN { printf "%-5s %-15s %-20s %-25s %-10s\n", "Line", "Locator", "Serial", "Size-Type-Speed", "Part Number"; } /Size:/ { size = $2 } /Bank Locator:/ { locator = $2 } /Type:/ { type = $2 } /Configured Memory Speed:/ { speed = $2 } /Serial Number:/ { serial = $2 } /Part Number:/ { part = $2 } /Firmware Version:/ { combined = size "-" type "-" speed; printf "%-5d %-15s %-20s %-25s %-10s\n", line++, locator, serial, combined, part; }' lsmem free -h #stream 测试 http://www.streambench.org/ curl -OL http://www.cs.virginia.edu/stream/FTP/Code/stream.c #cleancache echo 3 > /proc/sys/vm/drop_caches #编译 gcc -fopenmp \ #适应多处理器环境;开启后,程序默认线程为CPU线程数 -mtune=native -march=native \ #GCC针对CPU指令的优化,arm版需要取消 -O3 \ #编译器编译优化级别 -DSTREAM_ARRAY_SIZE=`lscpu | awk '/L3 /{size=$3; unit=$4; if (unit == "MiB") size *= 1024 * 1024; print size}'` \ #指定计算中a[],b[],c[] 数组的大小,5.10版默认10,000,000,最高级缓存小于9.5M不用考虑修改 期望>最高级缓存X*4*CPU路数/8,通常根据cpu三级缓存L3设置最高级缓存X -DNTIMES=100 \ #执行的次数,并且从这些结果中选最优值,调大可以获取较高的值 -DOFFSET=4096 \ #数组的偏移,一般可以不定义。 -mcmodel=medium \ #解除最大内存的限制,当单个Memory Array Size 大于2GB时需要设置此参数 stream.c -o stream #让数组变成“自动变量” 避免偏移 >2 GB 报错 gcc -fopenmp -O3 -march=native -mtune=native \ -DNTIMES=100 \ -DSTREAM_ARRAY_SIZE=$(lscpu | awk '/L3/{ sz=$3; u=$4; if(u=="MiB")sz=sz*1024*1024; else if(u=="KiB")sz=sz*1024; print int(sz/8/3) }') \ -DOFFSET=0 -DSTATIC= stream.c -o stream #绑核 export GOMP_CPU_AFFINITY=0-127 #多线程 #export OMP_NUM_THREADS=$(lscpu | awk '/CPU\(s\):/{printf("%d\n",$2)}' | grep -v 0) ./stream #单线程 export OMP_NUM_THREADS=1 ./stream #三次取值 echo "" > stream.out for i in {1..3} do echo 3 > /proc/sys/vm/drop_caches export OMP_NUM_THREADS=$(lscpu | awk '/CPU\(s\):/{printf("%d\n",$2)}' | grep -v 0) ./stream >> stream.out done for i in {1..3} do echo 3 > /proc/sys/vm/drop_caches export OMP_NUM_THREADS=1 ./stream >> stream.out done #格式化结果 cat stream.out | grep -E "Copy:|Scale:|Add:|Triad:" | awk '/:/{gsub(/:/,"",$1); print $1","$2","$3","$4","$5}' > stream_results.csv #stress yum install -y epel-release yum install stress -y apt-get install stress tar -zxvf /mnt/stress-1.0.4.tar.gz ./configure make make install stress #新增4个IO进程,50个虚机,每次分配大小5G,分配后挂起100s,测试43200S stress -i 4 --vm 50 --vm-bytes 5G --vm-hang 100 --timeout 43200s #以剩余内存分配8Gvm若干,压力测试12小时 date && stress -m $(free -g | awk '/Mem/{printf("%.0f\n",$4/8)}') --vm-bytes 8G --vm-hang 5 -t 43200s #memtester 稳定性测试 官网 http://pyropus.ca/software/memtester/ curl -Ol http://pyropus.ca/software/memtester/old-versions/memtester-4.5.0.tar.gz tar -zxf memtester-4.5.0.tar.gz cd memtester-4.5.0 #make生成 memtester make #执行32G内存 执行1次 date && ./memtester 32G 1 && date #8成内存剩余内存 执行一次 date && ./memtester $(free -m | awk '/Mem/{printf("%.0f\n",$4*0.8)}') 1 && date # #####ubuntu下测试项 #lmbench 默认选择 tar -xf lmbench-3.0-a9.tgz cd lmbench-3.0-a9 make #运行 make results #再次运行 make rerun #查看结果 make see #mbw apt-get install -y mbw mbw -q -n 3 4096 #-q 隐藏日志 #-n 3 运行次数 3 #4096:使用内存大小,单位MB,用剩余内存的一半进行测试 #只需关注平均值(AVG),内存分配速率越大,性能越好,三次AVG分别对应内存拷贝,字符串拷贝,内存卡拷贝。 date && mbw -q -n 3 $(free -m | awk '/Mem/{printf("%.0f\n",$2*0.5)}') && date nohup mbw -q -n 3 130000 >> ./mbw.log 2>&1 & top -p mbw[pid] #####centos下测试项 #ramspeed 测试 官网 http://alasir.com/software/ramspeed/ curl -Ol http://alasir.com/software/ramspeed/ramsmp-3.5.0.tar.gz tar -zxf ramsmp-3.5.0.tar.gz cd ramsmp-3.5.0 ./build.sh #运行测试 echo "----------------------内存测试 ramspeed----------------------" > ramspeed.out echo >> ramspeed.out echo "-- INTmark [writing] 整型写" >> ramspeed.out | ./ramsmp -b 1 >> ramspeed.out echo "-- INTmark [reading] 整型读" >> ramspeed.out | ./ramsmp -b 2 >> ramspeed.out echo "-- FLOATmark [writing] 浮点写" >> ramspeed.out | ./ramsmp -b 4 >> ramspeed.out echo "-- FLOATmark [reading] 浮点读" >> ramspeed.out | ./ramsmp -b 5 >> ramspeed.out echo finish