benchmark系列——Unixbench跑分优化之shell测试项优化

一、shell测试项源码分析

通过查看unixbench Run文件,可以看到unixbench的shell测试项调用了pgms/looper

    "shell8" => {

        "logmsg" => "Shell Scripts (8 concurrent)",

        "cat"    => 'system',

        "prog" => "${BINDIR}/looper",

        "options" => "60 \"${BINDIR}/multi.sh\" 8",

    },

查看工程Makefile文件,可知looper由looper.c编译得到

$(PROGDIR)/looper: $(SRCDIR)/looper.c $(SRCDIR)/timeit.c

查看looper.c的源码,核心是调用execvp函数,:execvp()会从环境变量所指的目录中查找符合参数 file 的文件名, 找到后执行该文件, 然后将第二个参数argv 传给该执行的文件。

execvp函数参数使用了multi.sh脚本,整个测试项就是不停调用该脚本

multi.sh中调用了tst.sh,tst.sh中的命令就是最终跑的命令。

优化方向分析

1. 该测试项是测试sh脚本,可以升级bash/dash来查看优化效果

2. tst.sh调用了sort od rm wc命令,这些命令在coreutils包中

3. 调用了grep命令,升级优化grep

二、sh优化

shell优化可以通过升级版本+静态编译来优化

可以分别尝试bash和dash,查看优化效果

1. 升级bash

下载链接:

https://mirrors.ustc.edu.cn/gnu/bash/bash-5.1.8.tar.gz

./configure –prefix=/usr/local/bash-5.1.8

修改Makefile,CFLAGS后面添加-static,修改为静态链接

make -j

make install

ln -sf /usr/local/bash-5.1.8/bin/bash /usr/bin/sh#重定向软链接

测试优化结果略。

2. 升级dash

wget https://git.kernel.org/pub/scm/utils/dash/dash.git/snapshot/dash-0.5.11.5.tar.gz

./autogen.sh

./configure –prefix=/usr/local/dash-0.5.11.5

修改src/Makfile,添加-static静态编译

make -j

make install

优化结果略。

3. coreutils优化

下载链接:

https://mirrors.ustc.edu.cn/gnu/coreutils/coreutils-9.1.tar.gz

./configure --prefix=/usr/local/coreutils-9.1 --without-libgmp

make -j

make install

export PATH=/usr/local/coreutils-9.1/bin:$PATH

4. grep 优化

wget https://mirrors.ustc.edu.cn/gnu/grep/grep-3.7.tar.gz

./configure –prefix=/usr/local/grep-3.7

make -j

make install

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

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

相关文章

IP地址介绍

一、IP地址的点分十进制 ip地址在计算机内部使用中,ip地址实际上是一个4字节、32bit的二进制数,但是为了让人好识别,将每个字节换为十进制数,在以地点分开的方式表示,这种方式就是点分十进制。 二、ABCDE这几类IP、网…

解决element-plus没有导出的成员FormInstance

使用element-plus的el-form时,报错“"element-plus"”没有导出的成员“FormInstance”。你是否指的是“FooterInstance”? 解决方法: 引入ElForm类型,在外重新定义FormInstance的类型为ElForm的实例类型 示例: import…

React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装

文章目录 前言Header头部相关组件1. 功能分析2. 相关组件代码详细注释3. 使用方式4. Gif图效果展示 总结 前言 在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用 React hooks 和styled-components库来…

Oracle最终还是杀死了MySQL

起因 大约15年前,Oracle收购了Sun公司,从而也拥有了MySQL,互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论:从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争,到干掉 MySQL 开源项目&…

【React】ECharts柱状图的使用和封装

使用步骤: 1.安装 npm install echarts2.引入 ECharts // 柱状图组件 import * as echarts from echarts import { useEffect, useRef } from react // 1. 把功能代码都放到这个组件中 // 2. 把可变的部分抽象成prop参数const BarChart ({ title }) > {const…

qt开发-07_radioButton

QRadioButton 部件提供了一个带有文本标签的单选框(单选按钮)。 QRadioButton 是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。 单选框通常呈现给用户一个“多选一”的选择。也就是说&…

Emacs之复制时:禁止转换成tab符号(一百三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

如何准备人防工程乙级资质所需的信用承诺书

理解要求 首先,详细阅读和理解人防工程乙级资质申请指南中关于信用承诺书的具体要求。 查阅相关的法律法规,如《中华人民共和国建筑法》、《中华人民共和国合同法》、《工程设计行政许可资质管理办法》等,确保承诺内容符合法律框架。 2. 收…

购物网站系统

摘 要 随着互联网的快速发展,不同的平台软件也不断涌出市场,在众多的平台中,购物网站深受人们的欢迎,也成为生活中不可缺少的一部分。经过对国内外购物情况的调查,社区购物在近几年来成为电商发展的新趋势&#xff0c…

构建可扩展的Python API与框架:实践与指南

构建可扩展的Python API与框架:实践与指南 一、引言 在当今的软件开发中,可扩展性已成为一个不可或缺的特性。一个可扩展的API或框架不仅能够满足当前的需求,还能轻松应对未来的变化和增长。本文将深入探讨在Python中如何设计一个可扩展的A…

递归乘法00

题目链接 递归乘法 题目描述 注意点 保证乘法范围不会溢出 解答思路 使用加法代替乘法,递归计算A * B,每个递归的过程加上一个A,且对B减1,直到B为0为止 代码 class Solution {public int multiply(int A, int B) {if (B 0…

C++ 教程 - 05 构建编译

文章目录 构建工具cmake安装与使用CMakeLists.txt编写使用案例 构建工具 cmake, Cross Platform Make, (对C)跨平台编译工具,将CMakeLists.txt 文件编译为对应的文件,如linux下的 Makefile,然后使用make命…

学习 C# 中的 Action 和 Func 委托

介绍 在 C# 中,委托是一种强大的工具,它使方法能够作为参数传递。最常用的两种委托类型是 Action 和 Func。这些通用委托通过为常见场景提供内置类型来简化委托的使用。本文探讨 Action 和 Func 委托、它们的区别以及如何有效使用它们的实际示例。 Act…

[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]

场景 在开发Windows和macOS的界面软件时,Windows用的是WTL/Win32技术,而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多,这就会给同步Windows和macOS的功能造成很大负担…

Github 2024-06-21 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3Java项目2非开发语言项目2JavaScript项目1Rust项目1Dart项目1HTML项目1Vue项目1C++项目1TensorFlow: 机器学习的开源…

用户和账号

chage、useradd、passwd、usermod、userdel、groupadd、gpasswd、groupdel、groups、 用户账号初始配置文件 .bashrc .bash_profile .bash_logout finger、w、who、users chmod、chowd、umask、last 1.用户的分类 Linux 用户三种角色 超级用户&#x…

LInux驱动开发笔记(十)SPI子系统及其驱动

文章目录 前言一、SPI驱动框架二、总线驱动2.1 SPI总线的运行机制2.2 重要数据结构2.2.1 spi_controller2.2.2 spi_driver2.2.3 spi_device2.2.4 spi_transfer2.2.5 spi_message 三、设备驱动的编写3.1 设备树的修改3.2 相关API函数3.2.1 spi_setup( )3.2.2 spi_message_init( …

使用GPG来解密和加密文件详解

文章目录 使用私钥解密文件示例步骤 注意事项加密文件前提条件导入公钥加密文件输出加密文件示例步骤注意事项邮箱不是必须的情况1:有多个公钥情况2:只有一个公钥示例步骤示例1:指定公钥ID或邮箱地址示例2:密钥环中只有一个相关的…

Linux的命令写一篇文章

Linux操作系统,以其强大的命令行界面和开源特性,深受开发者、运维人员及技术爱好者的青睐。在Linux的世界里,命令行是探索系统、自动化任务、高效解决问题的钥匙。本文将带领您初探Linux命令的基本概念、重要性和一些常用命令,帮助…

深度学习论文: Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data

深度学习论文: Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data PDF: https://arxiv.org/abs/2401.10891.pdf 代码:https://github.com/LiheYoung/Depth-Anything PyTorch代码: http…