热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【性能测试工具lmbench】快来测测你的系统可以打几分

关注优麒麟,更多干货等着你!一个好的操作系统不仅仅依赖于系统基本功能趋于稳定,更取决于系统性能的好坏。系统性能测试是一个不断对系统施加压力的过程,在此过程中,不断发现系统性能指标

关注优麒麟,更多干货等着你!


一个好的操作系统不仅仅依赖于系统基本功能趋于稳定,更取决于系统性能的好坏。系统性能测试是一个不断对系统施加压力的过程,在此过程中,不断发现系统性能指标和最大负载能力。性能测试工具很多,例如 Jmeter、loadrunner、stream、lmbench 等。本文将主要介绍性能测试工具 lmbench 在优麒麟系统上的使用。


lmbench 是一款评价系统综合性能的开源工具,它不仅简易、可移植性强,而且支持多种操作系统,例如 Unix、Linux 等。它提供了一个测试框架,当测试者对系统拥有更高的测试需求时,测试者能够通过修改对应部分的代码最终实现自己的测试目的。相比其他性能测试软件,lmbench 对于测试者来说更为方便。lmbench 主要对文件读写、进程创建销毁开销、网络建立、内存操作等性能进行测试。它主要衡量系统的两个关键特征,分别为反应时间和带宽。lmbench 在优麒麟系统上的下载、安装及使用方法如下所示。



1.首先在网上下载 lmbench 的 tar 安装包,其下载的官方网址为https://sourceforge.net/projects/lmbench/,大家可以根据自己的测试需求选择对应的下载版本,本文以下内容均以 x86 架构的 lmbench 3.0-a9 版本进行展开。下载安装包的相关内容如图1所示。

图1:lmbench 下载网页

2.将下载的 lmbench 安装包解压到相应路径下,本文将其 tar 包解压至 Linux 系统中常用安装大型软件的安装目录下(/opt)。lmbench 安装包解压命令及解压情况如下所示。

将目录切换至 root 目录下:

sudo su

lmbench 安装包解压至 /opt 下的命令:

tar xzvf lmbench-3.0-a9.tar.gz -C /opt

图2:解压 lmbench 的安装包

3.当系统的内存超过 16G 时,为了避免程序由于计算溢出而无法正常退出的现象产生,测试人员需要修改 lmbench 源代码中对应程序。即修改 /opt/lmbench-3.0-a9/src/ 目录下 lib_mem.c 文件中的 line_initialize 函数,将 int i, j, nlines, npages(第367行)更改为 long i, j, nlines, npages,即 int 型变量变为 long 型变量,扩大变量的取值范围。具体命令及修改位置如下所示:

切换目录命令:

cd /opt/lmbench-3.0-a9/src/

修改命令:

vim lib_mem.c

图3:源代码修改位置

4.使用 make results 命令进行编译测试,在编译测试过程中,会对配置参数进行配置(例如 MULTIPLE COPIES,JOB placement selection,MB 等),从而生成相应的配置脚本。因此,后续的大量测试将直接根据配置脚本使用相同的配置参数进行测试。

SUBSET 参数设置的不同,lmbench 测试的测试项不同,但不会影响测试结果的大小。

SUBSET 共有 4 个可选参数,分别为 ALL,HARWARE,OS,DEVELOPMENT。



  • ALL 表示所有测试项均被测试;



  • HARWARE 表示只对数学运算,内存延时以及部分本地通讯带宽进行测试;



  • OS 表示对处理器 processor 性能,上下文切换,本地通讯延时,文件延时以及本地通讯带宽进行测试;



  • DEVELOPMENT 可选择对SYSCALL,SELECT,SIGNAL 以及 PROCESS 等进行测试。





lmbench 编译命令及编译部分结果如下所示。

编译命令:

make results

图4:make results编译结果展示

5.测试完成后,可以在 /opt/lmbench-3.0-a9/ 目录下使用 make see 命令生成 lmbench 测试结果报告,即 /results/summary.out 文件。

测试报告生成命令:

make see

6.测试结果分析:

lmbench 的性能测试结果主要包括 8 大部分,分别为:系统基本参数(Basic system parameters)、处理器 processor 性能(Process)、数学运算(Basic integer operations、Basic uint64 operations、Basic float operations、Basic double operations)、上下文切换(Context switching)、本地通讯延时(Local Communication latencies)、文件与内存延迟(File & VM system latencies)、本地通讯带宽(Local Communication bandwidths)和内存操作延迟(Memory latencies)。

在 lmbench 测试中,各部分的测试结果评估标准不同。其中本地通讯带宽比较特殊,当它的测试结果值越大时,表示它的性能越好。其他部分的测试结果反之,即测试结果值越小,代表性能越好。lmbench 的 3 次部分测试结果如图 5 所示。

图 5 lmbench 部分测试结果

以上就是关于优麒麟系统上性能测试工具 lmbench 的使用内容,如果有任何问题或需要,可随时至优麒麟论坛留言。



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
author-avatar
手机用户2502853201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有