【浪潮信息KeyarchOS (KOS)】深入探索LINUX系统性能:Lmbench基准测试工具详解

1 概述

Lmbench是一个用于测量计算机性能的工具集合。它包含一系列的微基准测试,用于评估计算机系统在不同方面的性能,如内存访问速度、CPU性能、磁盘IO性能等。Lmbench的测试结果可以帮助开发者了解系统的性能瓶颈,优化计算机程序的性能。它通常被用于操作系统开发、硬件评估和性能优化等领域。

使用Lmbench进行性能测试需要一定的技术知识和经验,因为它提供了大量的测试选项和参数。测试结果通常以数字或图表的形式呈现,开发者可以根据这些数据来优化系统设置或改进程序的性能。

2 安装准备

2.1 操作环境

操作系统版本:KOS 5.8 sp2u1(5.10.134-17.2.2.kos5.x86_64)

测试架构:x86_64,8核4G虚拟机

2.2 软件版本

Lmbench 3.0-a9

3 编译安装

要安装Lmbench,你可以按照以下步骤进行操作:

首先,确保你的系统是基于Linux的系统,比如Ubuntu、CentOS等。

下载Lmbench的部署包。可以去下面的地址下载:

https://download.youkuaiyun.com/download/qq_36393978/86261418

上传zip包到服务器解压:

unzip lmbench-3.0-a9.zip

进入lmbench-3.0-a9目录,执行make编译:

cd lmbench-3.0-a9

make

可能会报没有权限的错误:

给该目录加下权限,执行以下命令:

chmod 777 -R lmbench-3.0-a9/

或者下图的错误rpc/rpc.h:No such file or directory

这个报错首先安装依赖:

yum -y install libtirpc libtirpc-devel

接着将/usr/include/tirpc/rpc/*复制到/usr/include/rpc/文件夹

cp /usr/include/tirpc/rpc/* /usr/include/rpc/

上面这个报错解决了可能还会有下面这个报错:netconfig.h:No such file or directory

加个软链接:

ln -s /usr/include/tirpc/netconfig.h /usr/include

这个报错解决了可能还会出现下图的报错:

使用下面的编译方式:其中第一行执行有报错可以不用管

make clobber clean

make LDFLAGS=-ltirpc -j

至此,安装过程完成。现在你可以在该目录中运行make results命令或者直接使用bin目录下的可执行文件来使用lmbench进行网络性能测试了。使用对应的文件加 --help命令可以查看其命令行选项和使用方法。记得根据你的需求进行适当的配置和参数设置。

4 执行测试

在测试前,可以先根据第六章节硬件调优,先配置下bios,在进行测试,跑出的结果会好一些。

使用Lmbench进行网络性能测试时,可以直接在lmbench目录使用make results来运行Lmbench的默认测试并生成测试结果:

make results

make results命令会启动Lmbench的测试套件,并按照预定义的测试方案执行测试。Lmbench会自动测量计算机系统的不同性能指标,例如CPU性能、内存性能、磁盘IO性能等。测试结果将被记录下来并保存在一个或多个结果文件中。

执行后需要输入的参数配置建议如下:

MULTIPLE COPIES: 同时运行并行测试,对应生成结果中的 scal load 项;

Job placement selection: 作业调度控制方法,默认选 1,表示允许作业调度;

Options to control job placement: 默认选 1;

Memory: 官方设置为大于 4 倍的 cache size,咱们这里固定设置为54。该值越大结果越精确,同时运行时间越长;

SUBSET: 要运行的子集,包含 ALL / HARWARE / OS / DEVELOPMENT,默认选 all;

FASTMEM、SLOWFS、DISKS、REMOTE… 等选项,均保持默认即可。

实际操作演示如下:

执行make results

这里是并行数设置,我们直接回车默认1

这里是调度控制,我们直接回车默认1允许调度器放置作业

这里是设置内存官方建议大于cache size的四倍,默认值为机器总内存的60%,设置内存越大,运行时间越长,结果也越精细,我们这里用54来跑一下

这里是运行的子集,我们直接回车用默认的all

这里指的是是否使用特定的内存块作为快速内存进行测试,默认为no禁用状态,如果想要评估快速内存的性能,这里可以为yes,后面会让你指定快速内存块的大小,默认为256k,

我们这里直接回车默认

这个选项是是否要测试文件系统的延迟,默认为no测试,如果要跳过的话,输入yes,我们这里直接回车默认测试

这个选项是用于指定要测试的磁盘或存储设备,默认不测试,测试的话输入磁盘的标识符,我们这里输入我机器的其中一个磁盘/dev/sda3

然后输入一行驱动器描述,如Iomega IDE ZIP或HP C3725S 2GB on 10MB/sec NCR SCSI bus

这个选项回车默认

到这里就可以等一会等它计算完频率

计算完成后会根据计算结果给你一个默认值,这里该结果是系统负载过重、内存不足,如果使用过程中遇到了可以先用top或htop来检查系统的负载情况,等到降低负载后再尝试执行make results,我们这里为了测试流程直接回车默认

这里需要输入一个目录来存放咱们前面指定的内存大小也就是54M大小的文件,输入一个空间足够的目录即可

这里是指定一个输出文件存放目录,我们这里直接回车默认

这里是是否要将测试结果上传至lmbench数据库,我们输入no,不上传

选项配置完成,等待测试完成查看结果即可,前面指定的54M内存大概运行时间为1小时,根据测试需求配置合适的内存大小即可。

测试完成后测试结果会保存到相应的结果文件中。一旦所有测试完成,可以使用一些命令来查看和分析生成的结果。

下面是一些常用的命令和选项,用于查看和分析测试结果:

make see:显示一个概要报告,其中包含各个测试项的结果摘要。

make dotplot:以图表形式展示测试结果,可以更直观地比较不同系统的性能。

make raw:查看原始的测试结果文件,包含了详细的测试数据。

make html:生成一个HTML报告,将测试结果以更友好的方式展示。

可以根据需要选择适当的命令来查看测试结果,并进一步分析和解释这些结果。此外,如果你希望执行特定类型的测试或自定义测试配置,可以参考Lmbench的文档或相关资源,了解如何使用不同的选项和参数。

具体结果解析请翻阅第五章节。

5 注意事项

在使用Lmbench进行测试时,有几个注意事项可以帮助您获得准确和可靠的结果:

确保系统空闲:在运行Lmbench测试之前,确保系统没有其他繁重的任务运行。关闭其他程序、服务或进程可以减少干扰,使得测试结果更加准确。

关闭节能模式:确保系统处于高性能模式,以避免由于节能模式而导致的性能波动。这样可以确保测试得到一致的结果。

多次运行测试:Lmbench提供了多个测试工具和选项,可以对特定的硬件和功能进行测试。针对您感兴趣的指标或特定配置进行多次测试,取平均值可以减少误差并增加测试结果的可靠性。

注意数据解释:Lmbench提供了多个性能指标和测试结果。在解释测试结果时,要了解每个指标的含义以及如何解读。理解这些指标可以帮助您更好地理解系统的性能和特点。

参考文档和帮助:Lmbench的官方文档和相关帮助信息可以提供关于工具的更多详细信息和使用建议。在进行测试之前,建议查阅相关文档,以便了解如何正确地配置和运行测试。

6 结果解析

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

系统基本信息:

tlb: 表示转换后备缓存的页面数;

cache line bytes: 高速缓存行字节数

mem par: 存储器分层并行化;

scal load: 并行执行的 Lmbench 数目。

处理器 Processor 性能:

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

null call: 执行 getppid 需要的时间;

null I/O: 从 /dev/zero 读取一个字节的时长 t1,写一个字节到 /dev/null 的时长 t2,t1、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 来找到并运行一个新程序所用时间。

数学运算:(输出结果单位均为 ns,数值越小表示性能越好)

整型计算

无符号整型计算

浮点型计算

双精度浮点型计算

上下文切换:(输出结果单位均为 us,数值越小表示性能越好)

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

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

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

2p/16k: 每个进程 size 为 16K(执行任务),进程数为 2 时上下文切换所消耗的时间;

之后的测试项以此类推。

本地通讯时延:(输出结果单位均为 us,数值越小表示性能越好)

2p/0k: 每个进程的 size 为 0(不执行任何任务),进程数为 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 描述符和建立连接所用时间。

文件、内存延时:(输出结果单位均为 us,数值越小表示性能越好)

0K File Create: 0K 文件创建所用时间;

0K File Delete: 0K 文件删除所用时间;

10K File Create: 10K 文件创建所用时间;

10K File Delete: 10K 文件删除所用时间;

Mmap Latency: 将指定文件的开头 n 个字节 mmap 到内存,然后 unmap,并记录每次 mmap 和 unmap 共消耗的时间,去每次消耗时间的最大值;

Port Fault: 保护页延时时间;

Page Faule: 缺页延时时间;

100fd selct: 对 100 个文件描述符配置 select 的时间。

本地通信带宽:(输出结果单位均为 MB/s,数值越大表示性能越好)

Pipe: 在两个进程建立 pipe,pipe 的每个 chunk 为 64K,通过该管道移动 50MB 数据所消耗的时间;

AF UNIX: 两个进程之间建立 unix stream socket 连接,每个 chunk 为 64K,通过该 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,测试写数据到内存的带宽。

内存操作延时:(输出结果单位均为 ns,数值越小表示性能越好)

本地测试执行 lat_mem_rd,将整数数组中每第 4 个元素的值累加起来;测试的是读数据到 processor 的带宽。

L1: 缓存1

L2: 缓存2

Main Mem: 连续内存

Rand Mem: 内存随机访问延时

Guesses:

假如 L1 和 L2 近似,会显示 “No L1 cache?”

假如 L2 和 Main Mem 近似,会显示 “No L2 cache?”

7 硬件调优

在使用lmbench测试前,通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能。表1列出了服务器和性能相关的BIOS推荐配置项。

表1 BIOS性能配置选项

BIOS配置项推荐配置值配置项说明
Custom Refresh RateAuto内存刷新频率(缺省值是32ms)菜单路径:“Advanced > Memory Config > Custom Refresh Rate”
NUMAEnableNUMA特性开关选项(缺省值是Enable)菜单路径:“Advanced > Memory Config > NUMA”
Stream Write ModeAllocate share LLCStream写模式(缺省值是Allocate share LLC)菜单路径:“Advanced > Performance Config > Stream Write Mode”
CPU Prefetching ConfigurationEnabledCPU预取配置(缺省值是Enabled)菜单路径:“Advanced > MISC Config > CPU Prefetching Configuration”
Power/Performance ProfileHigh Performance ComputeCPU运行模式(缺省值是High Performance Compute)菜单路径:”Socket Configuration > Power and Performance Profile Configuration > Power/Performance Profile”

设置内存刷新频率为Auto

服务器重启,进入BIOS,依次选择“Advanced > Memory Config > Custom Refresh Rate”(KOS系统为处理器配置→内存配置→内存频率),并将值设置为auto,按下F10保存。

开启NUMA

进入BIOS,依次选择“Advanced > Memory Config > NUMA”。(KOS系统为处理器配置→通用配置→NUMA),设置“NUMA”选项为“Enable”,按F10保存BIOS配置。

设置Stream Write Mode

进入BIOS,依次选择“Advanced > Performance Config > Stream Write Mode”。(KOS系统未找到该配置项),设置“Stream Write Mode”选项为“Allocate share LLC”,按F10保存BIOS配置。

开启CPU预取配置

开启CPU预取配置选项的目的在于CPU先行提取下一段指令以提高系统效能。

说明:

在使用lmbench测试内存带宽时,建议开启CPU预取。

在使用lmbench测试内存延迟时,建议关闭CPU预取。

进入BIOS,依次选择“Advanced > MISC Config > CPU Prefetching Configuration”。(KOS系统未找到此配置项),设置“CPU Prefetching Configuration”选项为“Enabled”,按F10保存BIOS配置。

设置CPU为高性能模式

开启CPU高性能模式的目的为了进一步提升系统性能以更好的进行性能测试。

进入BIOS,依次选择“Power/Performance Profile > Power and Performance Profile Configuration > Power/Performance Profile”。设置“Power/Performance Profile”选项为“High Performance Compute”,按F10保存BIOS配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值