Linux性能测试工具

2023-10-27

在Linux Benchmark Suite Homepage网站上列举了诸多Linux性能测试工具,包括CPU/RAM/ROM/Cache/net等性能测试。

lmbench

测试工具

这个工具集中包含以下几种测试工具,我们主要使用到bw_mem工具进行Memory read和write测试。

  1. Bandwidth benchmarks(带宽测试)
  • Cached file read
  • Memory copy (bcopy)
  • Memory read
  • Memory write
  • Pipe
  • TCP
  1. Latency benchmarks(延时测试)
  • Context switching.
  • Networking: connection establishment, pipe, TCP, UDP, and RPC hot potato
  • File system creates and deletes.
  • Process creation.
  • Signal handling
  • System call overhead
  • Memory read latency
  1. Miscellanious
  • Processor clock rate calculation

交叉编译

  1. 从 How do I get LMbench? 或者从github下载源码;
  2. 设置交叉工具链和编译FLAG
    修改src/Makefile中的CC和EXFLAGS为:
CC=/home/imx8x/prebuilt/toolchains/aarch64-imx8x-linux/bin/aarch64-poky-linux-gcc
EXFLAGS=-static -march=armv8-a -mfpu=neon -mfloat-abi=hard -mtune=cortex-a35 -funroll-loops
  1. 编译
    使用make OS=arm-linux build编译。
    如果出现如下错误:
cd src && make
make[1]: Entering directory '/home/xxx/work2/util/lmbench3/src'
make[2]: Entering directory '/home/xxx/work2/util/lmbench3/src'
make[2]: *** No rule to make target '../SCCS/s.ChangeSet', needed by 'bk.ver'.  Stop.
make[2]: Leaving directory '/home/xxx/work2/util/lmbench3/src'
Makefile:117: recipe for target 'lmbench' failed
make[1]: *** [lmbench] Error 2
make[1]: Leaving directory '/home/xxx/work2/util/lmbench3/src'
Makefile:20: recipe for target 'build' failed
make: *** [build] Error 2

解决办法:

mkdir SCCS
cd SCCS
touch s.ChangeSet

上述编译好了之后,就可以在/bin/arm-linux/目录下生成可执行文件,关于各个可执行文件的用法,可以简要的参照:
lmbench1.0 manual pages
lmbench

memory性能测试
将bw_mem文件拷贝到板子上运行如下命令:

@android:/var # ./bw_mem 256M wr                                              
268.44 573.30
@android:/var # ./bw_mem 256M fwr                                             
268.44 3034.69
@android:/var # ./bw_mem 256M rd                                              
268.44 896.46
@android:/var # ./bw_mem 256M frd                                             
268.44 867.99

各个参数含义如下:

/*
* rd - 4 byte read, 32 byte stride
* wr - 4 byte write, 32 byte stride
* rdwr - 4 byte read followed by 4 byte write to same place, 32 byte stride
* cp - 4 byte read then 4 byte write to different place, 32 byte stride
* fwr - write every 4 byte word
* frd - read every 4 byte word
* fcp - copy every 4 byte word
* All tests do 512 byte chunks in a loop.                        
* XXX - do a 64bit version of this.
*/

输出结果为megabytes, megabytes_per_second。

参考资料
Lmbench-Ti
LMbench - Tools for Performance Analysis

STREAM

官方的说法是:

The STREAM benchmark is a simple synthetic benchmark program that measures sustainable memory bandwidth (in MB/s) and the corresponding computation rate for simple vector kernels.

翻译过来就是:
STREAM benchmark是一个简单的综合基准测试程序,用于测量可持续存储器带宽(以MB/s为单位)和简单矢量内核的相应计算速率。

交叉编译
1、下载源码

mkdir STREAM
cd STREAM
wget -r -R 'index*' -np -nH --cut-dirs=3 http://www.cs.virginia.edu/stream/FTP/Code/

2、指定交叉工具链:

CC=/home/xxx/work2/xxx/imx8x/prebuilt/toolchains/aarch64-imx8x-linux/bin/aarch64-poky-linux-gcc

在编译的时候,需要指定一些参数,这些参数对结果影响很大,建议直接查看stream.c源文件。

3、编译c语言版本的工具make stream_c.exe,生成stream_c.exe可执行文件。

4、执行结果为:

@android:/var # ./stream_c.exe                                                
-------------------------------------------------------------
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 134214 microseconds.
   (= 134214 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:            1731.3     0.106711     0.092416     0.125942
Scale:           1294.3     0.140618     0.123622     0.164197
Add:             1107.7     0.232000     0.216672     0.263167
Triad:            991.0     0.252958     0.242168     0.276101
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------

目前还不知道这个结果都是些什么,与上文的lmbench的bw_mem工具差异蛮的的,有待后续研究。

STREAM参考资料如下:
STREAM: Sustainable Memory Bandwidth in High Performance Computers
What is STREAM
stream gitlab

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux性能测试工具 的相关文章

  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • Pytorch入门教程

    作者简介 大数据专业硕士在读 CSDN人工智能领域博客专家 阿里云专家博主 专注大数据与人工智能知识分享 公众号 GoAI的学习小屋 免费分享书籍 简历 导图等资料 更有交流群分享AI和大数据 加群方式公众号回复 加群 或 点击链接 专栏推
  • 命令行打开TotoiseGit工具界面

    直接在左下角开始中打开它时 会提示 lortoiseGit is a shell extension That means it is integrated into the Windows explorer To use Tortoise
  • 【嵌入式】STM32利用arm-dsp库进行PID调节控制

    目录 一 实验简介 1 原理 2 所用外设 二 代码 1 PWM输出配置 2 定时器触发的DMA传输的ADC 3 主体代码 三 实验结果 在工程实际中 应用最为广泛的调节器控制规律为比例 积分 微分控制 简称 PID 控制 又称 PID调节
  • 重回csdn

    前段时间csdn帐号被盗 后来帐号被封 今刚找回来 所有博文付之一炬
  • Windows与Centos下的深度学习部署

    文章介绍2种深度学习部署思路 1 Windows下部署深度学习 确保只用本地机器也可以跑深度学习 GPU版本 2 Centos下部署深度学习 Windows作为可视化界面 利用Centos的CPU跑深度学习 CPU版本 一 Windows1
  • 程序设计综合实习(C语言):学生成绩文件管理

    一 目的 1 掌握文件指针的概念和运用 2 掌握文件的相关操作 打开 读 写 关闭 3 掌握文件的定位操作 二 实习环境 Visual Stdio 2022 三 实习内容与步骤 1 定义一个结构体数组 存放10个学生的学号 姓名 三门课的成
  • 转:人生比努力更重要的是选择,与时俱进是成功的源泉。

    如果有一天你隔壁开火锅店的张三 卖手机卖得比你好 你不用觉得惊讶 因为 这是一个跨界的时代 每一个行业都在整合 都在交叉 都在相互渗透 移动互联网改变生活 未来我们的生活会是什么样子呢 我们设想一下 晚上带着家人去吃饭 拿出手机点击附近餐厅
  • 汇编语言程序设计的实验环境及上机步骤

    汇编语言源程序编制完成后 在计算机上的操作过程分为四个阶段 编辑 汇编 连接 运行调试 如图1 一 实验环境 汇编语言程序设计的实验环境如下 硬件环境 微型计算机 Intel x86系列CPU 一台 软件环境 Windows98 2000
  • 类和对象

    一 类 每个类都定义了自己的作用域 每个类的成员函数和成员变量都在这个作用域内 成员函数可以任意访问所在类的其他函数和成员变量 C 的封装特性是对外的 在类内是可以任意调用和使用的 类似于C中的结构体 要访问类定义的对象的成员 类定义的对象
  • 通过css实现对勾(√)和叉号(×)

    通过css实现对勾 和叉号 第一种方式 HTML span class status correct span span class status incorrect span CSS correct display inline bloc
  • 字符编码和字符集

    编码和解码 按照某种规则 将字符存储到计算机中 称为 编码 那么 将计算机中的二进制数据按照某种规则解析显示出来 称为 解码 字符编码 就是一套自然语言的字符和二进制数据之间的对应规则 把这种对应规则 写成一张表 就是 编码表 也叫字符集
  • kv遍历

    var builder var builderKey var builderValue for var i 0 i lt message length i var c message charAt i var nextStr message
  • 互联网高可用架构探讨

    高可用指标与问题 高可用 英文单词High Availability 缩写HA 它是分布式系统架构设计中一个重要的度量 业界通常用多个9来衡量系统的可用性 如下表 既然有可用率 有一定会存在不可用的情况 系统宕机一般分为有计划的和无计划的
  • 数码管:3位6脚的数码管分析和编码

    基本简介 一个1位数码管共有8段 ABCDEFG 小数点 如下图 按照我们常规的设计方案一个 IO 口控制一个段 一个1位数码管那么就需要8个IO 当然我们也可以使用扩展 IO 芯片 例如 74HC164 74HC595 那么这种方案就占用
  • Linux 中卷组不真实存在情况下,强制删除卷组及其PV信息

    由于手误删除lVm顺序不对 导致真实pV 已经不存在 但是卷组信息及其PV信息还存在系统中 pvdisplay和vgdisplay都能看到信息 这时候可以到 dev 目录下手动rm 掉 pv 再查看卷组 就真的不存在了
  • Android取消点击效果,Android中如何取消listview的点击效果

    Android中如何取消listview的点击效果 在xml文件里面有listselecter的属性引用 android layout width match parent android layout height wrap conten
  • 【3D游戏基础】蒙皮骨骼动画与骨架

    效果 目标 画出蒙皮动画的骨架 视频 https www bilibili com video BV1pM411m7Yw PPT https zfxdvouj61 feishu cn file boxcnwgESO6zdQetO7oNhKb
  • vant Cascader 级联选择 异步加载

  • .suo介绍

    suo suo是一种文件的格式 suo 解决方案用户选项 记录所有将与解决方案建立关联的选项 以便在每次打开时 它都包含用户所做的自定义设置 比如VS布局以及项目最后编译的而又没有关掉的文件用于下次打开时用 其中 VS布局包括 监视器123
  • Linux性能测试工具

    在Linux Benchmark Suite Homepage网站上列举了诸多Linux性能测试工具 包括CPU RAM ROM Cache net等性能测试 lmbench 测试工具 这个工具集中包含以下几种测试工具 我们主要使用到bw