Benchmark

目录

Benchmark

Benchmark组成

数据集

结构化数据 : 

半结构数据 :

非结构数据 :

工作负载

度量指标

Benchmark的运用

Benchmarking(基准测试)的关键

测试工具

测试方法

性能指标


Benchmark

Benchmark 是一种通过测量和评估计算机硬件、软件或系统的性能的方法,也叫基准测。基准测试通常与评估计算机硬件的性能特征有关,例如CPU的浮点操作性能,但在某些情况下,该技术也适用于软件。例如,软件基准测试是针对编译器或数据库管理系统运行的和软件基准测试针对编译器或者数据库管理系统(DBMS)运行。

其目的在于提供有关系统性能、稳定性和可靠性的指标,以便用户和开发人员能够做出更好的决策。


Benchmark组成

Benchmark核心由三部分组成 : 数据集、工作负载、度量指标。

数据集

Benchmark 数据集是用于评估计算机算法、模型或系统性能的一组标准测试数据。这些数据集通常是在特定领域或任务上精心设计和收集的,以确保测试的全面性和公正性。在选择 Benchmark 数据集时,重要的是确保数据集与研究问题或应用场景相匹配,以便能够有效地评估性能。

数据集又分为结构化数据、半结构化数据和非结构化数据。

  • 结构化数据 : 

结构化数据是以表格、数据库或类似的表现形式存储和组织的数据。这种数据具有清晰的结构,通常以行和列的形式呈现,其中每一行表示一个记录或实例,每一列表示一个属性或特征。(个人认为的结构化数据就是一目了然可以快速获取信息的数据 , 人言:看一眼就能获取到数据信息的数据)

  • 半结构数据 :

半结构数据通常指的是介于结构化数据和非结构化数据之间的数据类型。它不像传统的关系型数据库中的表格那样严格定义,但也不是完全无结构的数据。半结构数据的一个典型例子是 XML(可扩展标记语言)数据。XML 具有层次结构,但不像关系数据库表格那样需要遵循预定义的模式。相较于结构化数据,半结构数据具有更大的灵活性,但在某种程度上也可能导致数据的复杂性增加。

  • 非结构数据 :

非结构化数据"是指没有按照传统数据库表格或其他预定义模式组织的数据。这类数据通常不容易以表格、行和列的形式进行存储和处理。非结构化数据可能包括文本文档、图像、音频、视频、日志文件、社交媒体帖子等形式。(人言:一眼看不出数据的就是非结构数据)

工作负载

在计算机科学和性能评估领域,工作负载指的是一组任务或操作,用于评估计算机系统、应用程序或其他技术的性能。Benchmark工作负载是一种模拟真实使用情境的任务集合,它可以用来衡量计算机系统在不同条件下的性能表现。

以下是关于工作负载理解的几个维度:

  • 密集计算类型
    • CPU密集型计算、IO密集型计算、网络密集型计算;
  • 计算范式
    • SQL、批处理、流计算、图计算、机器学习;
  • 计算延迟
    • 在线计算、离线计算、实时计算;
  • 应用领域
    • 搜索引擎、社交网络、电子商务、地理位置、媒体、游戏。

以下是一些工作负载的例子:

  1. TPC(Transaction Processing Performance Council)工作负载: 用于数据库性能测试,模拟了在线事务处理(OLTP)环境。

  2. SPEC CPU Benchmark工作负载: 用于评估计算机系统的CPU性能,包含一系列计算密集型任务。

  3. Web服务器负载测试: 模拟了网站服务器在同时处理多个用户请求时的性能。

  4. 图形渲染工作负载: 用于测试图形处理单元(GPU)性能,包含图形渲染和处理任务。

  5. 大数据工作负载: 模拟了处理大规模数据集的场景,用于评估大数据处理系统性能。

度量指标

在benchmarking中,有许多用于度量系统性能的指标。这些指标涵盖了不同层面的性能,包括处理器、内存、磁盘、网络等。以下为benchmark的常见的度量指标:

  1. 处理器性能:

    • 时钟周期: 指令执行所需的时钟周期数。
    • 指令每周期: 每个时钟周期完成的指令数量。
    • IPS: 每秒执行的指令数量。
  2. 内存性能:

    • 内存带宽: 内存系统每秒传输的数据量。
    • 延迟: 内存访问的响应时间。
    • 内存吞吐量: 每秒读/写的数据量。
  3. 存储性能:

    • IOPS: 每秒的输入/输出操作数量。
    • 吞吐量: 存储系统每秒传输的数据量。
  4. 网络性能:

    • 带宽: 网络连接每秒传输的数据量。
    • 时延: 数据从发送端到接收端所需的时间。
  5. 整体系统性能:

    • 响应时间: 系统对用户请求的响应时间。
    • 吞吐量: 系统每秒完成的任务数量。
  6. 能效性能:

    • 性能功耗比: 系统性能与其能耗之间的比率。

Benchmark的运用

1、Hibench:由Intel开发的针对Hadoop的基准测试工具,开源的,用户可以到Github库中下载

2、Berkeley BigDataBench:随着Spark的推出,由AMPLab开发的一套大数据基准测试工具,官网介绍

3、Hadoop GridMix:Hadoop自带的Benchmark,作为Hadoop自带的测试工具使用方便、负载经典,应用广泛

4、Bigbench:由Teradata、多伦多大学、InfoSizing、Oracle开发,其设计思想和利用扩展具有研究价值,可以参阅论文Bigbench:Towards an industry standard benchmark for big data analytics。

5、BigDataBenchmark:由中科院研发,官方介绍

6、TPC-DS:广泛应用于SQL on Hadoop的产品评测

7、其他的Benchmark:Malstone、Cloud Harmony、YCSB、SWIM、LinkBench、DFSIO、Hive performance Benchmark(Pavlo)等等


Benchmarking(基准测试)的关键

  1. 明确目标 : 在进行benchmarking之前需要确定评估的目标 。才能确保基准测试后结果的有效性。
  2. 选择合适的工具 : 不同的benchmark工具适用于不同的场景 , 就像从事体力劳动一般 , 选对工具是帮助你完成亦或者是阻碍你完成的一个指标 。目的在于能够模拟真实的使用情况 , 确保benchmarking的有效性。同时也要设定合理的测试方法以及需要确认的系统性能指标。
  3. 确定某个测试的场景 : 具体场景包括负载大小、并发用户数、任务类型等等 , 有助于更好的模拟实际的使用条件。
  4. 多次运行 : 可以减少偶然误差 , 有助于得到更加稳定的结果。

测试工具


(一)JMeter
        Apache JMeter是Apache组织开发的基于Java的压力测试工具。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。同时JMeter支持对性能压测结果做图形分析。

        JMeter通常是一个模拟用户就是一个线程,当模拟并发数变多的时候性能会下降,通常会搭建一个JMeter集群去模拟并发数较多的情况。

(二)Gatling
        Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等。

        Gatling对Java选手来说有一定的学习成本,并且Gatling国内好像使用得较少,但是Gatling使用得Akka Actors异步模型,他可以使用少量的线程就能支持高并发,不需要像JMeter一样搭建多个集群去使用。Gatling在我们公司使用得较多,目前只能测试Http相关的,如果要测试rpc相关的需要先将rpc协议转换成Http协议。

(三)全链路压测PTS/自研
        上面的方法都不能用来做全链路压测,都缺少很多核心功能,比如请求录制,定时压测,实时监控,报告分析等等,这个时候我们可以直接使用阿里云的PTS进行全链路压测,或者自研一套基于自己业务系统的全链路压测系统。


测试方法


微基准测试
微基准测试(Micro-benchmarks)是基准测试中的一种方法,用来测试微小代码单元的性能,通常这个微小代码单元可以是一段算法,一个方法,一个数据结构。

宏基准测试
宏基准测试(macro-benchmark),顾名思义和上面的测试相反,往往会测试一个应用的整体性能,比如模拟大量的真实用户使用这个应用,从而测试出性能。很多时候我们的全链路压测基本就会对应宏基准测试,测试所需要的的流程以及环境都和真实场景一样,这样才能真正的测试出整个应用性能的问题。在真正的全链路压测的情况下,往往会把真实的请求数据先复制下来,然后收集足够多的数据之后,利用这些真实的数据来进行压测。

介基准测试
宏基准测试对于很多场景比较重,这个时候就出现了介基准测试,介基准测试没有要求请求的真实,在整个链路上一些不是很重要的地方在介基准测试中都可以进行忽略,比如登录验证,安全验证等等,将测试的目标聚焦在我们的业务核心上,通过介基准测试能让我们更简便的测试出系统的性能。


性能指标

(一)QPS/TPS(衡量吞吐量)
        QPS是我们的每秒查询数量,TPS是每秒的事务数量。通常我们进行基准测试往往会定一个目标,比如支撑1000QPS的请求量来完成我们的目标,或者测试出我们这个系统极限的QPS是多少,同样的QPS也不是越大越好,也需要结合我们的响应时间,如果我们一味的追求QPS忽略了响应时间那么用户的体验也是极差的。

(二)TP99/TP95
        有很多认为响应时间应该看平均时间,如果写要求比较低的系统的确是可以看平均时间,这样就会导致很多用户响应的速度很慢,但是我们在监控指标上体现不出来,所以就有了百分位指标这样的概念,TP99的意思就是,取排名排到第99百分位的响应时间,即排除了一些异常的情况(剩余的那1%),又保证了大多数用户的响应时间。(平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。)

(三)CPU(并发量)
        当我们有很多CPU密集型应用的时候,可以多多关注CPU的情况,从而进行针对性的调优

(四)GC
        如果是Java的应用,GC问题绝对不会缺席,尤其是在我们基准测试中,往往如果在测试中出现了大量的GC,说不定是代码写得有问题,有时候可以通过代码进行优化,或者说也可以更换GC收集器。

(五)io
        当我们传输的数据比较多的时候,比如传输文件,或者一些大的数据结构,这个时候就需要关注I/O相关的问题,来进行针对的调优。


参考来自 : Benchmark(基准测试)初相识-CSDN博客

Benchmark 第一篇 了解Benchmark_benchmark分析是什么意思-CSDN博客

关于Benchmark_云计算_无情的小白--Cloudpods (csdn.net)

以及网上离散资料和个人相关见解

  • 44
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值