Benchmark笔记

一、Benchmark的概念

Benchmark是一个评价方式,在整个计算机领域有着长期的应用。正如维基百科上的解释“As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, tests were developed that allowed comparison of different architectures.”Benchmark在计算机领域应用最成功的就是性能测试,主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。benchmark测试在计算机领域中最广泛和最成功得应用是性能测试,主要测试响应时间、传输速率和吞吐量等。此外他也用于功能、可操作性和数据处理开发易用性等方面的测试。benchmark测试有些偏重于硬件,有些偏重于软件,还有些注重于整个系统。在硬件方面广泛应用于评价CPU、内存、I/O接口和外围设备的性能,主要测试两个方面的性能指标:一是硬件传输数据的带宽,称为带宽基准测试;二是数据传输的延迟,称为延迟基准测试。在软件方面,他用于评价操作系统、数据库和中间件以及应用软件的数据处理能力。

⼆、Benchmark的组成
Benchmark的核⼼由3部分组成:数据集、⼯作负载、度量指标。

1、数据集
数据类型分为结构化数据、半结构化数据和非结构化数据。由于大数据环境下的数据类型复杂,负载多样,所以大数据Benchmark需要生成3种类型的数据和对应负载。

1)结构化数据:传统的关系数据模型,可用二维表结构表示。典型场景有电商交易、财务系统、医疗HIS数据库、政务信息化系统等等;简单来说就是数据库。结合到典型场景中更容易理解,比如企业、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。

2)半结构化数据:类似XML、HTML之类,自描述,数据结构和内容混杂在一起。典型应用场景有邮件系统、Web搜索引擎存储、教学资源库、档案系统等等,可以考虑使用Hbase等典型的KeyValue存储;
例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <a href="下一级和上一级.html" target="_blank">youbing</a>
    <a href="http://www.4399.com">外部链接</a>
    <h4>下载链接</h4>
    <a href="https://dlqn.aoscdn.com/gitmind-setup-bd.exe?d7ac78d2a45d5183978f91f5c240e220.exe">getmind下载</a>
    <h4>网页元素链接</h4>
    <a href="https://www.baidu.com" target="_blank"><img src="apex.jpg"/></a>
</body>
</html>

既有内容,也有描述内容的相关性文字


3)非结构化数据:各种文档、图片、视频和音频等。典型的应用有视频网站、图片相册、交通视频监控等等。

2、工作负载

对工作负载的定义,安全狗CEO陈奋这样解释到:“云工作负载是信息化系统和和核心业务数据的承载体,随着信息化技术不断的演进,云工作负载已经从传统的物理机、虚拟机,拓展到现在云环境下泛指的计算节点,比如:公有云主机、私有云计算节点、Docker容器、无服务器、微服务等”。

3、度量指标

性能高估的两大利器就是Benchmark和Profile工具。Benchmark用压力测试挖掘整个系统的性能状况,而Profile工具最大限度地呈现系统的运行时状态和性能指标,方便用户诊断性能问题和进行调优。

1)工具的使用

   a)在架构层面:perf、nmon等工具和命令;

   b)在JVM层面:btrace、Jconsole、JVisualVM、JMap、JStack等工具和命令;

   c)在Spark层面:web ui、console log,也可以修改Spark源码打印日志进行性能监控。

2)度量指标

   a)从架构角度度量:浮点型操作密度、整数型操作密度、指令中断、cache命中率、TLB命中;

   b)从Spark系统执行时间和吞吐的角度度量:Job作业执行时间、Job吞吐量、Stage执行时间、Stage吞吐量、Task执行时间、Task吞吐量;

   c)从Spark系统资源利用率的角度度量:CPU在指定时间段的利用率、内存在指定时间段的利用率、磁盘在指定时间段的利用率、网络带宽在指定时间段的利用率;

   d)从扩展性的角度度量:数据量扩展、集群节点数据扩展(scale out)、单机性能扩展(scale up)。

三、Benchmark的运用

Benchmark主要是对大量的数据进行性能测试,大多数都是基于Hadoop。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,一个能够对大量数据进行分布式处理的软件框架; Hadoop以一种可靠、高效、可伸缩的方式进行数据处理;用户可以在不了解分布式底层细节的情况下,开发分布式程序。

1、利用Golang来进行benchmark

创建文件 main.go,编写我们的被测函数

package main

// 斐波那契数列
func fib(n int) int {
	if n < 2 {
		return n
	}
	return fib(n-1) + fib(n-2)
}

func sum(a, b int) int {
	return a + b
}

创建文件 main_test.go ,编写基准测试用例 

package main

import "testing"

func BenchmarkFib10(b *testing.B) {
	for n := 0; n < b.N; n++ {
		fib(10)
	}
}

func BenchmarkFib20(b *testing.B) {
	for n := 0; n < b.N; n++ {
		fib(20)
	}
}

func BenchmarkSum(b *testing.B) {
	for n := 0; n < b.N; n++ {
		sum(1, 2)
	}
}

 

  • BenchmarkFib10-12 中的 12 即 GOMAXPROCS,默认等于 CPU 核数
  • 12603 95860ns/op 表示单位时间内(默认是1s)被测函数运行了 12603 次,每次运行耗时 95860ns

  • ok   5.908s 表示本次测试总耗时

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

下载地址:https://github.com/Intel-bigdata/HiBench 

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

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

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

6、BigDataBenchmark:由中科院研发

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值