【Linux】UnixBench介绍、分数调优思路以及测试2D3D的方法

  一.简介

         unixbench是一个用于测试unix系统性能的工具,也是一个比较通用的benchmark, 此测试的目的是对类Unix 系统提供一个基本的性能指示,很多测试用于系统性能的不同方面,这些测试的结果是一个指数值(index value,如520),这个值是测试系统的测试结果与一个基线系统测试结果比较得到的指数值,这样比原始值更容易得到参考价值,测试集合里面所有的测试得到的指数值结合起来得到整个系统的指数值。

         UnixBench也包含一些非常简单的2D和3D图形测试。

        UnixBench也支持多CPU系统的测试,默认的行为是测试两次,第一次是一个进程的测试,第二次是N份测试,N等于CPU个数。这样的设计是为了以下目标:

  • 测试系统的单任务性能
  • 测试系统的多任务性能
  • 测试系统并行处理的能力

        UnixBench一个基于系统的基准测试工具,不单纯是CPU 内存 或者磁盘测试工具。测试结果不仅仅取决于硬件,也取决于系统、开发库、甚至是编译器。

二.各项测试点说明

        Dhrystone测试

        测试聚焦在字符串处理,没有浮点运算操作。这个测试用于测试链接器编译、代码优化、内存缓存、等待状态、整数数据类型等,硬件和软件设计都会非常大的影响测试结果。

        Whetstone 测试

        这项测试项目用于测试浮点运算效率和速度。这项测试项目包含若干个科学计算的典型性能模块,包含大量的C语言函数,sin cos sqrt exp和日志以及使用整数和浮点的数学操作。包含数组访问、条件分支和过程调用。

        Execl Throughput(execl 吞吐,这里的execl是类unix系统非常重要的函数,非办公软件的execl)测试

        这项测试测试每秒execl函数调用次数。execl是 exec函数家族的一部分,使用新的图形处理代替当前的图形处理。有许多命令和前端的execve()函数命令非常相似。

        File Copy测试

        这项测试衡量文件数据从一个文件被传输到另外一个,使用大量的缓存。包括文件的读、写、复制测试,测试指标是一定时间内(默认是10秒)被重写、读、复制的字符数量。

        Pipe Throughput(管道吞吐)测试

        pipe是简单的进程之间的通讯。管道吞吐测试是测试在一秒钟一个进程写512比特到一个管道中并且读回来的次数。管道吞吐测试和实际编程有差距。

        Pipe-based Context Switching (基于管道的上下文交互)测试

        这项测试衡量两个进程通过管道交换和整数倍的增加吞吐的次数。基于管道的上下文切换和真实程序很类似。测试程序产生一个双向管道通讯的子线程。

        Process Creation(进程创建)测试

        这项测试衡量一个进程能产生子线程并且立即退出的次数。新进程真的创建进程阻塞和内存占用,所以测试程序直接使用内存带宽。这项测试用于典型的比较大量的操作系统进程创建操作。

        Shell Scripts测试

        shell脚本测试用于衡量在一分钟内,一个进程可以启动并停止shell脚本的次数,通常会测试1,2, 3, 4, 8 个shell脚本的共同拷贝,shell脚本是一套转化数据文件的脚本。

        System Call Overhead (系统调用消耗)测试

        这项测试衡量进入和离开系统内核的消耗,例如,系统调用的消耗。程序简单重复的执行getpid调用(返回调用的进程id)。消耗的指标是调用进入和离开内核的执行时间。

        Graphical Tests(图形)测试

        由”ubgears”程序组成,测试非常粗的2D和3D图形性能,尤其是3D测试非常有限。测试结果和硬件,系统合适的驱动关系很大。

        各项参考图示如下:

三.分数调优的思路

        1)设置UB_TMPDIR变量

        "fstime", "fsbuffer", "fsdisk"这三项测试主要测试系统采用不同的缓存大小将文件数据从一个文件被传输到另外一个文件的性能,在Run文件下发现这三项测试项的参数均使用了fstime这个测试命令:

        而在fstime.c的源码中可以知道,三项测试主要是在磁盘文件中进行读写操作,测试时指定了测试类型为c,测试时间为30s,测试目录为Run脚本中TMPDIR所指定的目录,并且还指定了缓存大小和块的数量,在测试执行之前先会在-d所指定的目录下创建dummy0dummy1两个文件,文件位置由Run脚本中的TMPDIR决定,而TMPDIR又可根据系统中UB_TMPDIR环境设置:

         因此,可在系统环境变量中设置UB_TMPDIR为/dev/shm。原因在于/dev/shm这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,而不是磁盘上。其大小是非固定的,即不是预先分配好的内存来存储的。

        2)临时文件系统

        将测试工具放置在tmpfs临时文件系统下运行,利用tmpfs临时文件系统的特性,tmpfs用于储存一些需要高速读写的文件而开辟的临时空间,会完全驻留在内存RAM中,读写几乎可以是瞬间的,避免了硬盘性能对测试成绩的影响,但又更加考验CPU访问内存的性能。所以执行以下指令:

  1. 执行指令:mkdir test(文件名不指定,路径不指定,最好在/home下)
  2. 执行指令:mount tmpfs test(新建的文件名)–t tmpfs
  3. 将测试工具复制至test文件夹下
  4. 运行测试工具

        3)提高基线

        提升基线,让测试工具可以使用64线进行测试,方法是修改Run脚本中的以下字段:'system' => { 'name' => "System Benchmarks", 'maxCopies' => 64 }

        4)优化编译等级

        修改MAKEFILE中默认的编译优化等级,测试工具默认优化等级为:O2,改成O3可以在O2的基础上进行更多的优化

        5)程序优化

        在MAKEFILE中添加编译关键字:-static –flto,其中static强制工具编译时使用静态连接的方式,使得这一些没有被调用到的方法或变量将会被丢弃掉,不会连接到目标程序中,大大减小生成二进制文件的体积。Flto目的在于编译链接期间进行程序优化,多个中间文件通过链接器合并在一起,并将它们组合为一个程序,缩减代码体积,是对整个程序的分析和跨模块的优化。

        6)切换到字符界面

        使用快捷键”alt+ctrl+F1~F10”将系统切换为字符界面,在字符界面上运行测试工具,因为系统少了图形界面的进程,测试时会有速度上的优化。

四.测试2d3d的方法

        如果你需要运行图形测试,请确保“MAKEFILE”文件中第47行“GRAPHIC_TESTS = defined”已经取消注释:

        同时将Makefile中的第50行后面追加“-lm”后缀,变成“GL_LIBS = -lGL -lXext -lX11 -lm”:

        紧接着将Run中的第141行中的"ubgears"加上注释,变成#"ubgears":

         下一步,运行“make”,重新编译一下代码,等编译完成后,可根据以下选择不同的运行指令:

功能

指令

只进行系统测试

./Run

只进行图形测试

./Run graphics

以上两个都进行

./Run gindex

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

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

相关文章

幻兽帕鲁服务器价格表_阿里云/腾讯云/京东云/华为云报价大全

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

C++类的六个默认成员函数(详细解析与总结)

目录 前言: 一、构造函数 a.特点 b.注意事项 1.首先明确什么是默认构造函数 2.默认构造函数对内置类型与自定义类型的处理 c.总结 二、析构函数 a.特点 b.注意事项 1.什么时候写析构函数? 2.析构函数对内置类型与自定义类型的处理 c.总结 …

pythonselenium自动化测试实战项目

说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码,验证是否登录成功; 2.输入格式正确的用户名和不…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一:动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一:动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串(s[0, ..., i-1])是否能被…

【Node.js】模块化

概述 Nodejs 模块化规范遵循两套规范: Common JSES Module Common JS 引入模块(require)支持四种格式 支持引入内置模块例如 http os fs child_process 等const fs require(fs),高版本也可以使用const fs require(node:fs…

【Java SE】封装

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 封装1.1 封装是什么1.2 封装的意义1.3 访问修饰限定符1.3.1 在Java中如何实现封装1.3.2 各种访问修饰限定…

SpringCloud微服务集成Dubbo

1、Dubbo介绍 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服…

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例1: 输入:root [3,1,4,null,2], k 1 输出:1 解…

在 fstab文件中配置 UUID方式自动挂载数据盘、swap、目录(**)

linux如何挂在硬盘,自动挂载和手动挂载(详细说明)https://gitcode.csdn.net/65eedcea1a836825ed7a06f4.html 解决linux重启后磁盘挂载失效的问题 https://blog.csdn.net/sugarbliss/article/details/107033034 linux /etc/fstab 文件详细说…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…

探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

title: 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较 date: 2024/3/28 17:34:03 updated: 2024/3/28 17:34:03 tags: 数据格式JSONYAMLXMLCSV数据交换格式比较 1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构,不同的数据格…

【aws】架构图工具推荐

碎碎念 以前以为日本冰箱论是个梗,结果居然是真的。用光盘传真其实还能理解(毕竟我也喜欢电子古董2333),但是画架构图居然用的是excel+截图!啊苍天呐,然后看到隔壁工位用excel画web原型又感觉释…

将数字城市复制到虚拟空间,如何搭建实景三维虚拟场景?

什么是实景三维? 实景三维(3D Real Scene)是一个专业术语,它指的是对一定范围内人类生产、生活和生态空间进行真实、立体、时序化反映和表达的数字虚拟空间。它是新型基础测绘的标准化产品,也是国家重要的新型基础设施…

权限提升-系统权限提升篇数据库提权PostsqlRedis第三方软件提权密码凭据钓鱼文件

知识点 1、数据库到Linux-数据库提权-Redis 3、数据库到Linux-数据库提权-PostgreSQL 4、计算机用户到系统-第三方软件-各类应用 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 Windows提权: 1、…

Linux 基于HAProxy+KeepAlived实现

Linux 基于HAProxyKeepAlived实现 1. 介绍1.1 高可用(HA-High Avaialbility)1.2 负载均衡(LB-Load Balance)1.3 HAProxy1.4 KeepAlived 2. 后端服务为Nginx2.1 系统拓扑2.2 环境说明2.3 前提条件2.4 详细步骤2.4.1 机器初始化2.4.…

Python列表、元组、字典及集合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、列表定义方式: 二、元组1、定义方式:2、元组中的物理存储地址不可修改,如果修改则会报错,但是元组中的列表、字典项等却可以…

React-1-jsx基础-事件绑定-样式处理

一.JSX基础-概念和本质 1.1 什么是JSX JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写UI模版的方式 优势: 1. HTML的声明式模版写法 2. JS的可编程能力 JSX的本质: JSX并不是标…

vivado 手动布线

手动路由 手动路由允许您为网络选择特定的路由资源。这给了你对信号将要采用的路由路径的完全控制。手动路由不调用route_design。路线在路线数据库中直接更新。当您想精确控制网络的延迟时,可能需要使用手动路由。对于例如,假设有一个源同步接口&#…

如何查看JVM使用的是什么垃圾收集器

文章目录 一、背景分析二、查看垃圾收集器三、理解的偏差四、深挖 demo 代码五、总结 一、背景分析 无论讨论对象的内存分配,还是讨论内存的回收策略或是算法,都需要明确指出是基于哪种垃圾收集器进行的讨论。所以,很自然地就想到这个问题&a…

脱敏技术!!!

什么是数据脱敏??? 数据脱敏(Data Masking)是一种数据安全技术,旨在通过预先设定的规则和算法,对原始数据中包含的敏感信息进行变形处理,使得这些信息在非生产环境(例如…