内存性能测试方法

写于 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 ) ,将运算结果写入到另一个内存单元。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AVFormatContext 再分析二

说明 &#xff1a;将 avfromatContext 的变量依次打印分析&#xff0c;根据ffmpeg 给的说明&#xff0c;猜测&#xff0c;结合网上的文章字节写测试代码分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…

深入了解Linux系统—— 进程优先级

前言 我们现在了解了进程是什么&#xff0c;进程状态表示什么 &#xff0c;我们现在继续来了解进程的属性 —— 进程优先级 进程执行者 在了解进程优先级之前&#xff0c;先来思考一个问题&#xff1a;在我们进行文件访问操作时&#xff0c;操作系统是如何直到我们是谁&#x…

Expected SARSA算法详解:python 从零实现

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

1penl配置

好的&#xff0c;根据您提供的 1pctl 命令输出信息&#xff0c;我们来重新依次回答您的所有问题&#xff1a; 第一&#xff1a;1Panel 怎么设置 IP 地址&#xff1f; 根据您提供的 user-info 输出&#xff1a; 面板地址: http://$LOCAL_IP:34523/93d8d2d705 这里的 $LOCAL_I…

链表的回文结构题解

首先阅读题目&#xff1a; 1.要保证是回文结构 2.他的时间复杂度为O(n)、空间复杂度为O(1) 给出思路: 1.首先利用一个函数找到中间节点 2.利用一个函数逆置中间节点往后的所有节点 3.现在有两个链表&#xff0c;第一个链表取头节点一直到中间节点、第二个链表取头结点到尾…

【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析

一、引言 在大模型微调场景中&#xff0c;命令行操作是实现自动化、规模化训练的核心手段。LLaMA-Factory通过YAML配置文件和多GPU分布式训练技术&#xff0c;支持开发者高效管理复杂训练参数&#xff0c;突破单机算力限制。本文将结合结构图、实战代码和生产级部署经验&#…

C++负载均衡远程调用学习之 Dns-Route关系构建

目录 1.LARS-DNS-MYSQL环境搭建 2.LARSDNS-系统整体模块的简单说明 3.Lars-Dns-功能说明 4.Lars-Dns-数据表的创建 5.Lars-Dns-整体功能说明 6.Lars-DnsV0.1-Route类的单例实现 7.Lars-DnsV0.1-Route类的链接数据库方法实现 8.Lars-DnsV0.1-定义存放RouteData关系的map数…

fastapi+vue中的用户权限管理设计

数据库设计&#xff1a;RBAC数据模型 这是一个典型的基于SQLAlchemy的RBAC权限系统数据模型实现&#xff0c;各模型分工明确&#xff0c;共同构成完整的权限管理系统。 图解说明&#xff1a; 实体关系&#xff1a; 用户(USER)和角色(ROLE)通过 USER_ROLE 中间表实现多对多关系…

【Python实战】飞机大战

开发一个飞机大战游戏是Python学习的经典实战项目&#xff0c;尤其适合结合面向对象编程和游戏框架&#xff08;如Pygame&#xff09;进行实践。以下是游戏设计的核心考虑因素和模块划分建议&#xff1a; 一、游戏设计核心考虑因素 性能优化 Python游戏需注意帧率控制&#xff…

Flowable7.x学习笔记(十八)拾取我的待办

前言 本文从解读源码到实现功能&#xff0c;完整的学习Flowable的【TaskService】-【claim】方法实现的任务拾取功能。 一、概述 当调用 TaskService.claim(taskId, userId) 时&#xff0c;Flowable 会先加载并校验任务实体&#xff0c;再判断该任务是否已被认领&#xff1b;若…

SQL经典实例

第1章 检索记录 1.1 检索所有行和列 知识点&#xff1a;使用SELECT *快速检索表中所有列&#xff1b;显式列出列名&#xff08;如SELECT col1, col2&#xff09;提高可读性和可控性&#xff0c;尤其在编程场景中更清晰。 1.2 筛选行 知识点&#xff1a;通过WHERE子句过滤符合条…

HTTPcookie与session实现

1.HTTP Cookie 定义 HTTP Cookie &#xff08;也称为 Web Cookie 、浏览器 Cookie 或简称 Cookie &#xff09;是服务器发送到 用户浏览器并保存在浏览器上的一小块数据&#xff0c;它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常&#xff0…

【算法基础】冒泡排序算法 - JAVA

一、算法基础 1.1 什么是冒泡排序 冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列&#xff0c;依次比较相邻两个元素&#xff0c;如果顺序错误就交换它们&#xff0c;直到没有元素需要交换为止。 1.2 基本思想 比较相邻元素&#xff1a;从头开始&#xf…

0902Redux_状态管理-react-仿低代码平台项目

文章目录 1 Redux 概述1.1 核心概念1.2 基本组成1.3 工作流程1.4 中间件&#xff08;Middleware&#xff09;1.5 适用场景1.6 优缺点1.7 Redux Toolkit&#xff08;现代推荐&#xff09;1.8 与其他工具的对比1.9 总结 2 todoList 待办事项案例3 Redux开发者工具3.1 核心功能3.2…

《ATPL地面培训教材13:飞行原理》——第6章:阻力

翻译&#xff1a;Leweslyh&#xff1b;工具&#xff1a;Cursor & Claude 3.7&#xff1b;过程稿 第6章&#xff1a;阻力 目录 引言寄生阻力诱导阻力减少诱导阻力的方法升力对寄生阻力的影响飞机总阻力飞机总重量对总阻力的影响高度对总阻力的影响构型对总阻力的影响速度稳…

C++总结01-类型相关

一、数据存储 1.程序数据段 • 静态&#xff08;全局&#xff09;数据区&#xff1a;全局变量、静态变量 • 堆内存&#xff1a;程序员手动分配、手动释放 • 栈内存&#xff1a;编译器自动分配、自动释放 • 常量区&#xff1a;编译时大小、值确定不可修改 2.程序代码段 •…

【Hot 100】94. 二叉树的中序遍历

目录 引言二叉树的中序遍历我的解题代码优化更清晰的表述建议&#xff1a; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】94. 二叉树的中序遍历❣️ 寄语&#xff1a;书到用时方恨少&#xff…

大语言模型(LLMs)微调技术总结

文章目录 全面总结当前大语言模型&#xff08;LLM&#xff09;微调技术1. 引言2. 为什么需要微调&#xff1f;3. 微调技术分类概览4. 各种微调技术详细介绍4.1 基础微调方法4.1.1 有监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;4.1.2 全参数微调&#xff08;F…

解决Maven项目中报错“java不支持版本6即更高的版本 7”

错误背景 当Maven项目编译或运行时出现错误提示 Java不支持版本6即更高的版本7&#xff0c;通常是由于项目配置的JDK版本与当前环境或编译器设置不一致导致的。例如&#xff1a; 项目配置的Java版本为6或7&#xff0c;但实际使用的是JDK 17。Maven或IDE的编译器未正确指定目标…

C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)

1.多态的概念 多态(polymorphism)的概念:通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)&#xff0c;这里我们重点讲运行时多态&#xff0c;编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函…