性能测试工具 Lmbench 的使用方法以及解析运行结果

news2025/1/15 17:11:30

1. Lmbench 简介

Lmbench 是一款简易可以移植的内存测试工具,其主要功能有,带宽测评(读取缓存文件、拷贝内存、读/写内存、管道、TCP),延时测评(上下文切换、网络、文件系统的建立和删除、进程创建、信号处理、上层系统调用、内存读入反应时间)等功能。

2. 下载和安装

官网地址:http://www.bitmover.com/lmbench/
下载连接:lmbench-3.0

imaginemiracle:Downloads$ unzip lmbench-3.0-a9.zip

需要注意的是,目前解压出的 lmbench 中所有文件都不可被执行,当直接执行 make 编译后将会看到类似有 Permission denied 等一系列错误。

这里首先需要更改所有文件的权限:

imaginemiracle:Downloads$ sudo chmod 777 -R lmbench-3.0-a9/

进入 lmbench 目录,其目录结构如下。

imaginemiracle:Downloads$ cd lmbench-3.0-a9/
imaginemiracle:lmbench-3.0-a9$ ls
ACKNOWLEDGEMENTS  CHANGES    COPYING    doc              Makefile  results  src
bin               ChangeSet  COPYING-2  hbench-REBUTTAL  README    scripts

3. 使用 Lmbench 测试

执行 make results,执行后将会有以下选项提示需要设置:

  • MULTIPLE COPIES: 同时运行并行测试,对应生成结果中的 scal load 项;
  • Job placement selection: 作业调度控制方法,默认选 1,表示允许作业调度;
  • Options to control job placement: 默认选 1
  • Memory: 设置为大于 4 倍的 cache size,该值越大结果越精确,同时运行时间越长;
  • SUBSET: 要运行的子集,包含 ALL / HARWARE / OS / DEVELOPMENT,默认选 all
  • FASTMEM、SLOWFS、DISKS、REMOTE… 等选项,均保持默认即可。

设置完成后测试程序开始运行,需要注意运行时间较久,需耐心等待,或先做其他事情至少 10 min 后再看。

4. 查看结果

执行 make see 查看运行结果,若只出现两行命令,显示运行结果输出到了 summary.out 文件中,则直接查看该文件即可。cat ./results/summary.out
将会看到如下输出:

在这里插入图片描述

4.1. 系统基本信息

输出结果中开始显示系统的基本参数信息。
在这里插入图片描述
其中:

  • tlb: 表示转换后备缓存的页面数;
  • cache line bytes: 高速缓存行字节数
  • mem par: 存储器分层并行化;
  • scal load: 并行执行的 Lmbench 数目。

4.2. 处理器 Processor 性能

如下输出结果单位均为 us,数值越小表示性能越好。
在这里插入图片描述

  • null call: 执行 getppid 需要的时间;
  • null I/O:/dev/zero 读取一个字节的时长 t1,写一个字节到 /dev/null 的时长 t2t1、t2 取平均值即为该项结果;
  • stat: stat 一个文件(即得到一个文件的信息)所需时长;
  • open clos: open 一个文件接着再 close 掉该文件一共所用时间(不包含读目录和节点的时间);
  • slct TCP: 通过 TCP 网络连接选择 100 个文件描述符所消耗的时间;
  • sig inst: install signal 所耗时长;
  • sig hndl: handler signal 所耗时长;
  • fork proc: fork 一个完全相同的 process,并把原来的 process 关掉一共所消耗的时间;
  • exec proc: 模拟一个 shell 进程的工作过程:fork 一个新进程执行新命令消耗的时间。
  • sh proc: fork 一个进程,同时询问系统 shell 来找到并运行一个新程序所用时间。

4.3. 数学运算

如下输出结果单位均为 ns,数值越小表示性能越好。

(1) 整型计算

在这里插入图片描述
(2) 无符号整型计算

在这里插入图片描述
(3) 浮点型计算

在这里插入图片描述
(4) 双精度浮点型计算

在这里插入图片描述

4.4. 上下文切换

如下输出结果单位均为 us,数值越小表示性能越好。

在这里插入图片描述
多个进程用 unix pipe 环连接起来,每个进程从自己的管道中读取 token,执行任务,然后将 token 写给下一个进程。

context swithing 时间包括:切换进程的时间,加上恢复进程所有状态所用的时间(包含恢复 cache 状态)。

  • 2p/0k: 每个进程的 size0(不执行任何任务),进程数为 2 时上下文切换所消耗的时间;
  • 2p/16k: 每个进程 size16K(执行任务),进程数为 2 时上下文切换所消耗的时间;

之后的测试项以此类推。

4.5. 本地通讯时延

如下输出结果单位均为 us,数值越小表示性能越好。

在这里插入图片描述

  • 2p/0k: 每个进程的 size0(不执行任何任务),进程数为 2 时上下文切换所消耗的时间;
  • Pipe: 即所谓的 hot potato 测试,两个没有具体任务的进程之间使用 pipe 通信,一个 token 在两个进程间来回传递,传递一个来回所消耗时长的平均值;
  • AF UNIX:Pipe 测试项,但进程间通信使用的是 socket 通信;
  • UDP:Pipe 测试项,但进程间通信使用的是 UDP/IP 通信;
  • RPC/UDP:Pipe 测试项,但进程间通信使用的是 sun RPC 通信,默认情况下,RPC 采用 UDP 协议传输;
  • TCP:Pipe 测试项,但进程间通信使用的是 TCP/IP 通信;
  • RPC/TCP:Pipe 测试项,但进程间通信使用的是 sun RPC 通信,指定 RPC 采用 TCP 协议传输;
  • TCP conn: 创建 socket 描述符和建立连接所用时间。

4.6. 文件、内存延时

如下输出结果单位均为 us,数值越小表示性能越好。

在这里插入图片描述

  • 0K File Create: 0K 文件创建所用时间;
  • 0K File Delete: 0K 文件删除所用时间;
  • 10K File Create: 10K 文件创建所用时间;
  • 10K File Delete: 10K 文件删除所用时间;
  • Mmap Latency: 将指定文件的开头 n 个字节 mmap 到内存,然后 unmap,并记录每次 mmapunmap 共消耗的时间,去每次消耗时间的最大值;
  • Port Fault: 保护页延时时间;
  • Page Faule: 缺页延时时间;
  • 100fd selct:100 个文件描述符配置 select 的时间。

4.7. 本地通信带宽

如下输出结果单位均为 MB/s,数值越大表示性能越好。

在这里插入图片描述

  • Pipe: 在两个进程建立 pipepipe 的每个 chunk64K,通过该管道移动 50MB 数据所消耗的时间;
  • AF UNIX: 两个进程之间建立 unix stream socket 连接,每个 chunk64K,通过该 socket 传输 10MB 数据所用的时间;
  • TCP:Pipe 测试项,但进程间使用 TCP/IP socket 通信,传输数据量为 3MB
  • File reread: 读文件并将其汇总一起所用的时间;
  • Mmap reread: 将文件 mmap 到内存中,从内存中读文件并将其汇总一起所用时间;
  • Bcopy(libc): do bw_mem $i bcopy,从指定内存区域拷贝指定数量的字节内容到另一个指定内存区域的速度;
  • Bcopy(hand): do bw_mem %i fcp,把数据从磁盘的一个位置拷贝到另一个位置所用的时间;
  • Mem read: bw_mem $i frd,累加数组中的整数值,测试把数据读入 processor 的带宽;
  • Mem write: do bw_mem $i fwr,把整数数组的每个成员设置为 1,测试写数据到内存的带宽。

4.8. 内存操作延时

如下输出结果单位均为 ns,数值越小表示性能越好。

在这里插入图片描述
本地测试执行 lat_mem_rd,将整数数组中每第 4 个元素的值累加起来;测试的是读数据到 processor 的带宽。

  • L1: 缓存1
  • L2: 缓存2
  • Main Mem: 连续内存
  • Rand Mem: 内存随机访问延时
  • Guesses:
    假如 L1L2 近似,会显示 “No L1 cache?”
    假如 L2Main Mem 近似,会显示 “No L2 cache?”

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

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

相关文章

MYSQL中的14个实用的功能

1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中,名称不同的用户的具体名称有哪些? 具体sql如下: select name from `user` group by name; 但如果想把name相同的code拼接在一起,放到另外一列中该怎么办呢? 答:…

Genesis一款基于Domino的app store应用超市

大家好,才是真的好。 众所周知,App Store是苹果iOS系统生态成功的关键因素。Domino作为一款企业应用平台,很多年前,就有人提出要创建Domino平台上的App Store。 其实比IOS早很多年前就有类似的应用管理,早在2000年的…

代码随想录之回溯第一课

要领:类型题目,用具体的一个例子来记忆,就够了,印象更加深刻。 一个题目,感觉理解不深刻,不透彻,不清晰,不熟练,就是不达标。 怎么做? 每天回顾复习看一次&am…

DD-1/50 12.5-50mA【接地继电器】

系列型号: DD-1/40接地继电器 DD-1/50接地继电器 DD-1/60接地继电器 一、 用途及工作原理 DD-1型接地继电器为瞬时动作的过电流继电器,用作小电流接地电力系统高电压三相交流发电机和电动机的接地零序过电流保护。继电器线圈接零序电流互感器(电缆式、…

电脑重装系统后分辨率不对应该怎么调

越来越多的小伙伴使用小白一键重装系统给自己的电脑安装上了win10系统,但是有部分小伙伴发现安装完win10系统之后,屏幕分辨率也无法进行调整,呈灰色状态。接下来小编就给大家详细的介绍一下小白一键重装系统分辨率不对怎么调的教程。 工具/原…

【Django】(一)基础知识

文章目录一.安装二.创建项目三.项目介绍四.APP的创建五.小案例六 模板和静态文件模板静态文件7.模板语法7.1 变量7.2列表7.3 字典7.4 过滤器7.5 if/else7.6 for标签7.7 ifequal和ifnotequal7.8注释7.9csrf_token8.模板继承8.1父模板8.2 子模板9.请求和响应10.数据库10.1安装第三…

【服务器搭建个人网站】附:接入的服务商 以及 安全评估报告该如何填写?

前言 哈喽,大家好,我是木易巷! 关于公安备案的一些详细的细节没有分享出来,在公安备案期间要填写很多东西,其中比较难填写的就是接入的服务商和安全评估报告的填写。 这一篇给大家总结:公安备案接入服务商和…

⭐️【linux】关于linux-gcc,你必须要知道的知识

🌲🌲目录🌲🌲 1️⃣什么是gcc 2️⃣gcc如何生成可执行文件 3️⃣简单使用gcc 4️⃣linux的库 1️⃣什么是gcc ❄️GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的…

Java 中 Map 集合的基本使用

一、HashMap 1.1 HashMap 基本使用 import java.util.*;/*** author: yunhu* date: 2022/7/14*/ public class Test {public static void main(String[] args) {Map<String, Integer> map new HashMap<>();map.put("Alice", 12);map.put("Bob&qu…

62.Python 类的3要素语法

62.类的3要素语法 文章目录62.类的3要素语法1. 定义类的语法2. pass语句的作用3.我们学的5个缩进语法4.类的属性5.类的方法6. 创建对象7.类在爬虫中的应用8. 总结1. 定义类的语法 定义类的语法如下&#xff1a; class 类名: 代码块 从语法上来看&#xff1a;类的…

Edify Script (Android Shell)定制Twrp刷机包

本文将通过三方面向大家介绍Edify Script,相信你看完了这篇文章会对安卓系统可刷写插件有一个比较完整的认识,并且能过通过阅读此文章实现使用twrp刷入自己写的插件zipi包。网上能搜到的大部分是旧的,新版本去掉了很多的edify函数,照着他们那个写多半会报错。 本文分为如下…

LeetCode学习-第三十八天

第三十八天 我使用的C&#xff0c;错误的地方请见谅&#xff0c;文章初衷仅用来督促本人学习&#xff0c;如果恰巧能够给你带来帮助&#xff0c;我会十分开心。 文章目录第三十八天一、537. 复数乘法二、29. 两数相除一、537. 复数乘法 复数 可以用字符串表示&#xff0c;遵循…

CentOS7如何修改IP地址及UUID

CentOS7系统下&#xff0c;如果要把IP地址修改为192.168.1.80&#xff0c;子网掩码是255.255.255.0&#xff0c;网关是192.168.1.1&#xff0c;DNS是192.168.1.1&#xff0c;那么我们使用客户端连接CentOS或者打开系统终端&#xff0c;切换到root用户&#xff0c;命令&#xff…

开料的目的和子流程,一文读懂

经过多个月的分享&#xff0c;关于PCB行业&#xff0c;想必朋友们已经有了一些个人的理解&#xff0c;甚至对PCB行业&#xff0c;还产生了浓厚的兴趣。 但是&#xff0c;PCB生产工艺是非常复杂的&#xff0c;想要深入地学习并且学好PCB生产工艺&#xff0c;假如不在PCB的生产一…

如何从PyTorch中获取过程特征图

一、获取Tensor 神经网络在运算过程中实际上是以Tensor为格式进行计算的&#xff0c;我们只需稍稍改动一下forward函数即可从运算过程中抓到Tensor 代码如下&#xff1a; base_feature self.extractor.forward(x) #正常的前向传递 featurebase_feature.detach() …

JavaScript 数据类型

文章目录JavaScript 数据类型JavaScript 拥有动态类型JavaScript 字符串JavaScript 数字JavaScript 布尔JavaScript 数组JavaScript 对象Undefined 和 Null声明变量类型JavaScript 数据类型 字符串&#xff08;String&#xff09;、数字(Number)、布尔(Boolean)、数组(Array)、…

基于java eclipse+jsp+mysql+servlet+Spring的学生信息管理系统基础版

基于java eclipsejspmysqlservletSpring的学生信息管理系统基础版 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

【Python百日进阶-数据分析】Day148 - plotly直方图:px.histogram()

文章目录四、实例4.1 带有 Plotly Express 的直方图4.1.1 基本直方图4.1.2 使用一个包含分类数据的列4.1.3 选择方箱的数量4.1.4 日期数据直方图4.1.5 分类数据的直方图4.1.6 访问计数&#xff08;y 轴&#xff09;值4.1.7 标准化类型4.1.8 直方图的外观4.1.9 一列不同值的几个…

MySQL基础篇第10章(创建和管理表)

1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0c;我们才能进行有效的处理和分析。否则&#xff0c;只 能是一团乱麻&#xff0c;无从下手。 那么&#xff0c;怎样才能把用户各种经营相关的、纷繁复杂的数据&#xff…

npm 包 chalk-next 被开发者投毒,源码 SRC 目录被删除

一、事件简述 1月5日&#xff0c;有开发者在 twitter 中发文称遭遇了名为 chalk-next 的组件投毒事件&#xff0c;该组件存在收集配置信息和删除本地文件的恶意逻辑&#xff0c;当前 NPM 仓库已经下线了该组件。 chalk-next 组件的开发者也是 vue-admin-beautiful 项目的作者 …