文章目录


1. Benchmark 简介

BenchMark 是一种评价方式,在计算机领域的性能测试方面有广泛应用,主要负责测试负载的执行时间、传输速度、吞吐量和资源占用率。

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

2. Benchmark 组成

数据集、工作负载、度量指标。

2.1 数据集

数据类型分为结构化数据、半结构化数据和非结构化数据。

  • 结构化数据:传统的关系数据模型,可用二维表结构表示。典型场景有电商交易、财务系统、医疗 HIS 数据库、政务信息化系统等等;
  • 半结构化数据:类似 XML、HTML 之类,自描述,数据结构和内容混杂在一起。典型应用场景有邮件系统、Web 搜索引擎存储、教学资源库、档案系统等等,可以考虑使用 Hbase 等典型的 KeyValue 存储;
  • 非结构化数据:各种文档、图片、视频和音频等。典型的应用有视频网站、图片相册、交通视频监控等等。

2.2 工作负载

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

2.3 度量指标

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

  • 工具的使用
  • 在架构层面:perf、nmon等工具和命令;
  • 在JVM层面:btrace、Jconsole、JVisualVM、JMap、JStack等工具和命令;
  • 在Spark层面:web ui、console log,也可以修改Spark源码打印日志进行性能监控。
  • 度量指标
  • 从架构角度度量:浮点型操作密度、整数型操作密度、指令中断、cache命中率、TLB命中;
  • 从Spark系统执行时间和吞吐的角度度量:Job作业执行时间、Job吞吐量、Stage执行时间、Stage吞吐量、Task执行时间、Task吞吐量;
  • 从Spark系统资源利用率的角度度量:CPU在指定时间段的利用率、内存在指定时间段的利用率、磁盘在指定时间段的利用率、网络带宽在指定时间段的利用率;
  • 从扩展性的角度度量:数据量扩展、集群节点数据扩展(scale out)、单机性能扩展(scale up)。