基准压测sysbench配置使用
本文以sysbench为出发点,先从Lua/LuaJIT到sysbench概念上进行初步的认识,然后到编译安装和使用,最后介绍了怎么来实现CPU、内存、文件IO、数据库各种模式的测试。总共4大块循序渐进来了解sysbench的概念、安装、使用、系统资源及MySQL和PostreSQL数据库场景的测试。
1 关于sysbench
在介绍sysbench之前,先了解下Lua语言和LuaJIT两个概念
Lua
什么是Lua? Lua是一种强大、高效、轻量级、可嵌入的脚本语言。它支持过程式编程、面向对象编程、函数式编程、数据驱动编程和数据描述。
Lua结合了简单的过程语法和基于关联数组和可扩展语义的强大数据描述结构。Lua是动态类型的,通过使用基于寄存器的虚拟机解释字节码来运行,并具有自动内存管理和增量垃圾收集,使其非常适合配置、脚本编制和快速原型。
Lua从何而来? Lua是由 PUC-Rio (巴西里约热内卢天主教大学)的一个团队设计、实现和维护的。Lua在大学中的 Tecgraf 实验室出生并长大,这里的前身是PUC-Rio计算机图形技术集团。Lua现在位于里约大学计算机科学系LabLua实验室。
名字有什么意义? “Lua”(发音为LOO-ah)在葡萄牙语中意为“月亮”。更具体地说,“Lua”是一个名字,是地球月球的名字,也是语言的名字。
为什么选择Lua?
- Lua是一种经过验证的健壮语言 Lua已被用于许多工业应用,特别是嵌入式系统(和游戏(例如魔兽世界和愤怒的小鸟)。Lua是目前游戏中最主要的脚本语言。
- Lua速度很快 Lua在性能方面享有当之无愧的声誉。宣称“和Lua一样快”是其他脚本语言的愿望。几个基准测试显示Lua是解释型脚本语言领域中最快的语言。Lua不仅在经过微调的基准程序中速度很快,在现实生活中也是如此。大部分大型应用程序都是用Lua编写的。 如果您需要更快的速度,可以尝试 LuaJIT,这是一个使用即时编译器的Lua的独立实现。
- Lua是可移植的 Lua是以一个小包的形式发布的,可以在所有具有标准C编译器的平台上开箱即用。Lua可以在各种Unix和Windows上运行,在移动设备(运行Android、iOS、BREW、Symbian、Windows Phone)上运行,在嵌入式微处理器(如ARM和Rabbit,用于乐高MindStorms等应用程序)上运行,在IBM大型机上运行等等。
- Lua是可嵌入的 Lua是一个快速的语言引擎,占用空间小,可以很容易地嵌入到应用程序中。Lua有一个简单且有良好文档的API,允许与其他语言编写的代码进行强集成。用其他语言编写的库来扩展Lua是很容易的。用Lua扩展用其他语言编写的程序也很容易。
- Lua简单但功能强大 Lua设计中的一个基本概念是为实现特性提供元机制,而不是直接在语言中提供一系列特性。例如,尽管Lua不是纯粹的面向对象语言,但它确实为实现类和继承提供了元机制。Lua的元机制带来了概念经济,并保持语言较小,同时允许以非常规的方式扩展语义。
- Lua很小 将Lua添加到应用程序中不会使其膨胀。Lua 5.4.4的tarball包含源代码和文档,压缩值为353K,未压缩值为1.3M。源代码包含大约30000行c语言。在64位Linux下,用所有标准Lua库构建的Lua解释器占用281K, Lua库占用468K。
- Lua是免费的 Lua是免费的开源软件,在一个非常自由的许可证(著名的MIT许可证)下发布。它可以用于任何目的,包括商业目的,绝对免费。下载并使用即可。
LuaJIT
LuaJIT是Lua编程语言的即时编译器(JIT),基本兼容大部分的平台。
LuaJIT已经成功地用作游戏、设备、网络和图形应用程序、数值模拟、交易平台和许多其他专业应用程序的脚本中间件。它的范围从嵌入式设备、智能手机、台式机到服务器群。它结合了高灵活性、高性能和无与伦比的低内存占用。
LuaJIT从2005年开始不断发展。它被广泛认为是最快的动态语言实现之一。自第一次发布以来,它在许多跨语言基准测试上的表现都超过了其他动态语言——通常是相当大的差距。
对于LuaJIT 2.0,整个VM从头开始重写,并对性能进行了不懈的优化。它结合了用汇编语言编写的高速解释器和最先进的JIT编译器。
创新的跟踪编译器集成了高级的、基于SSA的优化和高度调优的代码生成后端。与动态语言相关的开销的大量减少使它能够进入传统上为脱机静态语言编译器保留的性能范围。
sysbench介绍
sysbench是一个基于LuaJIT的可脚本多线程基准测试工具。它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂工作负载。
Sysbench附带了以下捆绑的基准测试:
oltp_*.lua
:类似oltp的数据库基准的集合fileio
:文件系统级基准测试cpu
:简单的cpu基准测试memory
:内存访问基准threads
:基于线程的调度器基准mutex
: POSIX互斥基准
特性
- 关于速率和延迟的大量统计数据是可用的,包括延迟百分比和直方图;
- 即使有数千个并发线程,开销也很低。Sysbench能够每秒生成和跟踪数亿个事件;
- 通过在用户提供的Lua脚本中实现预定义的钩子,可以轻松创建新的基准测试;
- 可以用作通用的Lua解释器,只需使用
#!/usr/bin/sysbench
替换#!/usr/bin/lua
。
2 sysbench安装
二进制安装
在Linux上下载和安装sysbench最简单的方法是使用 packagecloud 托管的二进制包存储库。每个sysbench版本都会自动更新存储库。目前可以使用x86_64、i386和aarch64二进制文件。
有多种下载和安装sysbench包的方法,请参见 https://packagecloud.io/akopytov/sysbench/install 。
从sysbench 1.0开始,不再支持原生Windows版本。目前在Windows环境下,sysbench的获取方式推荐使用Windows 10自带的Windows Subsystem for Linux。此处以WSL下的Ubuntu为例
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
如果是RHEL/CentOS系统可以参考如下命令进行联机在线安装:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench