当前位置: 首页 > news >正文

内存性能测试方法

写于 2022 年 6 月 24 日

内存性能测试方法 - Wesley’s Blog

dd方法测试

cat proc/meminfo

console:/ # cat proc/meminfo 
MemTotal:        3858576 kB
MemFree:          675328 kB
MemAvailable:    1142452 kB
Buffers:           65280 kB
Cached:           992252 kB
SwapCached:           40 kB
Active:          1144480 kB
Inactive:         923220 kB
Active(anon):     875244 kB
Inactive(anon):   667400 kB
Active(file):     269236 kB
Inactive(file):   255820 kB
Unevictable:        4436 kB
Mlocked:            4436 kB
SwapTotal:        614396 kB
SwapFree:         601596 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:       1014744 kB
Mapped:           301460 kB
Shmem:            530712 kB
KReclaimable:      39912 kB
Slab:             142104 kB
SReclaimable:      39912 kB
SUnreclaim:       102192 kB
KernelStack:       33088 kB
ShadowCallStack:    2078 kB
PageTables:        39964 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2263732 kB
Committed_AS:   47064316 kB
VmallocTotal:   262930368 kB
VmallocUsed:       56632 kB
VmallocChunk:          0 kB
Percpu:             2768 kB
CmaTotal:        1921024 kB
CmaFree:          158092 kB

剩1.1G左右,所以,我们创建一个挂载在内存上面的分区,大小为可用内存的一半左右。

mount -o rw,remount /
mkdir memtest
mount -t tmpfs tmpfs /memtest  -o size=600m

内存写测试

dd if=/dev/zero of=/memtest/testfile bs=1M count=500

dd if=/dev/zero of=/memtest/testfile bs=500M count=1

dd if=/dev/zero of=/memtest/testfile bs=512K count=1000

console:/ # dd if=/dev/zero of=/memtest/testfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (500 M) copied, 0.782312 s, 639 M/s
console:/ # dd if=/dev/zero of=/memtest/testfile bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (500 M) copied, 1.272919 s, 393 M/s
console:/ # dd if=/dev/zero of=/memtest/testfile bs=512K count=1000
1000+0 records in
1000+0 records out
524288000 bytes (500 M) copied, 0.794319 s, 629 M/s

内存读测试

dd if=/memtest/testfile of=/dev/null bs=1M count=500

dd if=/memtest/testfile of=/dev/null bs=500M count=1

dd if=/memtest/testfile of=/dev/null bs=512K count=1000

console:/ # dd if=/memtest/testfile  of=/dev/null bs=1M count=500              
500+0 records in
500+0 records out
524288000 bytes (500 M) copied, 0.340277 s, 1.4 G/s
console:/ # dd if=/memtest/testfile  of=/dev/null bs=500M count=1                          <
1+0 records in
1+0 records out
524288000 bytes (500 M) copied, 0.682501 s, 733 M/s
console:/ # dd if=/memtest/testfile  of=/dev/null bs=512K count=1000                       <
1000+0 records in
1000+0 records out
524288000 bytes (500 M) copied, 0.226277 s, 2.1 G/s

Steam benchmark(推荐)

source/stream_benchmark at main · wesley666/source

Adb push到data/local/tmp目录,赋予执行权限

console:/data/local/tmp # ./stream_benchmark                                   
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
This system uses 8 bytes per array element.
-------------------------------------------------------------
Array size = 10000000 (elements), Offset = 0 (elements)
Memory per array = 76.3 MiB (= 0.1 GiB).
Total memory required = 228.9 MiB (= 0.2 GiB).
Each kernel will be executed 10 times.The *best* time for each kernel (excluding the first iteration)will be used to compute the reported bandwidth.
-------------------------------------------------------------
Your clock granularity/precision appears to be 1 microseconds.
Each test below will take on the order of 21376 microseconds.(= 21376 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
-------------------------------------------------------------
WARNING -- The above is only a rough guideline.
For best results, please be sure you know the
precision of your system timer.
-------------------------------------------------------------
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           10748.4     0.015937     0.014886     0.017156
Scale:           8149.9     0.020030     0.019632     0.020463
Add:             9070.6     0.027085     0.026459     0.028024
Triad:           8255.9     0.029891     0.029070     0.030490
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------

Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。

Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。

Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。

Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。

相关文章:

  • 如何通过文理工三类AI助理赋能HI,从而,颠覆“隔行如隔山”的旧观念和“十万小时定律”的成长限制
  • 穿越数据森林与网络迷宫:树与图上动态规划实战指南
  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • AVFormatContext 再分析零
  • 《告别试错式开发:TDD的精准质量锻造术》
  • Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录
  • 分布式事务解决方案
  • 生成对抗网络(GAN, Generative Adversarial Network)​
  • ES6/ES11知识点
  • 深入理解C++类型转换:从基础到高级应用
  • 【前缀和】和为 K 的连续子数组
  • 【iview】es6变量结构赋值(对象赋值)
  • list的迭代器详讲
  • 2025 年最新 Python 语言实现网易企业邮箱邮件推送验证码详细教程(更新中)
  • 【Redis】redis的数据类型、单线程模型和String的使用
  • 19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?
  • 单细胞测序试验设计赏析(一)
  • C++ 友元:打破封装的钥匙
  • 希洛激活器策略思路
  • Java接口全面教程:从入门到精通
  • 李云泽:支持设立新的金融资产投资公司,今天即将批复一家
  • 五月A股怎么买?券商金股电子权重第一,格力电器最热
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • IPO周报|节后首批3只新股本周申购,色谱设备龙头来了
  • 赵心童世锦赛历史性夺冠,你今天打斯诺克很可能订不到位
  • 泰国培训十万网络安全人员加强网络防御打击电诈