Project Icon

sysbench

灵活可扩展的多线程基准测试工具 支持多种系统性能评估

sysbench是一款基于LuaJIT的多线程基准测试工具,具有高度可扩展性。它不仅适用于数据库性能测试,还能模拟各种复杂工作负载。sysbench内置了OLTP、文件I/O、CPU、内存等多种基准测试,支持高并发场景,并提供详细的性能统计。用户可通过Lua脚本轻松创建自定义测试。该工具支持Linux、macOS和Windows Subsystem for Linux等主流平台。

[![最新发布][release-badge]][release-url] [![构建状态][action-badge]][action-url] [![Debian 软件包][deb-badge]][deb-url] [![RPM 软件包][rpm-badge]][rpm-url] [![覆盖率状态][coveralls-badge]][coveralls-url] [![许可证][license-badge]][license-url]

目录

sysbench

sysbench 是一个基于 LuaJIT 的可脚本化多线程基准测试工具。它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂工作负载。

sysbench 附带以下内置基准测试:

  • oltp_*.lua:一系列类 OLTP 数据库基准测试
  • fileio:文件系统级基准测试
  • cpu:简单的 CPU 基准测试
  • memory:内存访问基准测试
  • threads:基于线程的调度器基准测试
  • mutex:POSIX 互斥锁基准测试

特性

  • 提供关于速率和延迟的广泛统计信息,包括延迟百分位数和直方图;
  • 即使在数千个并发线程下也能保持低开销。sysbench 能够每秒生成和跟踪数亿个事件;
  • 通过在用户提供的 Lua 脚本中实现预定义的钩子,可以轻松创建新的基准测试;
  • 也可用作通用 Lua 解释器,只需在脚本中将 #!/usr/bin/lua 替换为 #!/usr/bin/sysbench

从二进制包安装

Linux

在 Linux 上下载和安装 sysbench 的最简单方法是使用 packagecloud 托管的二进制包仓库。这些仓库会在每次 sysbench 发布时自动更新。目前提供 x86_64、i386 和 aarch64 架构的二进制文件。

有多种下载和安装 sysbench 包的方法,详细说明可在 https://packagecloud.io/akopytov/sysbench/install 找到。

快速安装说明:

  • Debian/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
    
  • Fedora:

    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash	
    sudo dnf -y install sysbench
    
  • Arch Linux:

    sudo pacman -Suy sysbench
    

macOS

在 macOS 上,可以通过 Homebrew 获取最新的 sysbench 包:

# 如果需要 PostgreSQL 支持,请添加 --with-postgresql
brew install sysbench

Windows

从 sysbench 1.0 版本开始,已停止支持原生 Windows 构建。可能会在后续版本中重新引入。目前,在 Windows 上获取 sysbench 的推荐方法是使用 Windows 10 中提供的 Windows Subsystem for Linux

安装 WSL 并进入 Windows 上的 bash 提示符后,按照 Debian/Ubuntu 的安装说明操作即可。或者,可以使用 WSL 从源代码构建和安装 sysbench,或使用旧版 sysbench 构建原生二进制文件。

从源代码构建和安装

建议按照从二进制包安装中的说明从官方二进制包安装 sysbench。以下是当您想在没有可用二进制包的架构上使用 sysbench 时的说明。

构建要求

Windows

从 sysbench 1.0 版本开始,已停止支持原生 Windows 构建。可能会在后续版本中重新引入。目前,在 Windows 上构建 sysbench 的推荐方法是使用 Windows 10 中提供的 Windows Subsystem for Linux

安装 WSL 并进入 Windows 上的 bash 提示符后,按照 Debian/Ubuntu 的构建说明操作即可。或者,可以在 Windows 上构建和使用较旧的 0.5 版本。

Debian/Ubuntu

    apt -y install make automake libtool pkg-config libaio-dev
    # 对于 MySQL 支持
    apt -y install libmysqlclient-dev libssl-dev
    # 对于 PostgreSQL 支持
    apt -y install libpq-dev

RHEL/CentOS

    yum -y install make automake libtool pkgconfig libaio-devel
    # 对于MySQL支持,在RHEL/CentOS 5上替换为mysql-devel
    yum -y install mariadb-devel openssl-devel
    # 对于PostgreSQL支持
    yum -y install postgresql-devel

Fedora

    dnf -y install make automake libtool pkgconfig libaio-devel
    # 对于MySQL支持
    dnf -y install mariadb-devel openssl-devel
    # 对于PostgreSQL支持
    dnf -y install postgresql-devel

macOS

假设你已经安装了Xcode(或Xcode命令行工具)和Homebrew:

    brew install automake libtool openssl pkg-config
    # 对于MySQL支持
    brew install mysql
    # 对于PostgreSQL支持
    brew install postgresql
    # openssl未被Homebrew链接,这是为了避免"ld: library not found for -lssl"错误
    export LDFLAGS=-L/usr/local/opt/openssl/lib 

构建和安装

    ./autogen.sh
    # 添加--with-pgsql以构建PostgreSQL支持
    ./configure
    make -j
    make install

上述步骤将默认构建带有MySQL支持的sysbench。如果你的MySQL头文件和库位于非标准位置(且在PATH中找不到mysql_config),你可以使用--with-mysql-includes--with-mysql-libs选项明确指定它们的位置。

要编译不带MySQL支持的sysbench,使用--without-mysql。如果没有可用的数据库驱动,与数据库相关的脚本将无法工作,但其他基准测试仍可正常运行。

使用方法

基本语法

sysbench的基本命令行语法为:

sysbench [选项]... [测试名称] [命令] 
  • 测试名称是可选的内置测试名称(如fileiomemorycpu等),或捆绑的Lua脚本名称(如oltp_read_only),或自定义Lua脚本的路径。如果命令行中未指定测试名称(因此也没有命令,因为这种情况下它会被解析为测试名称),或测试名称为破折号("-"),则sysbench会从标准输入中读取要执行的Lua脚本。

  • 命令是一个可选参数,sysbench会将其传递给指定的内置测试或脚本。命令定义了测试需要执行的操作。可用命令列表取决于特定测试。某些测试还实现了自己的自定义命令。

    以下是典型测试命令及其用途的描述:

    • prepare:为需要准备工作的测试执行准备操作,例如为fileio测试在磁盘上创建必要的文件,或为数据库基准测试填充测试数据库。
    • run:运行由测试名称参数指定的实际测试。所有测试都提供此命令。
    • cleanup:在那些创建临时数据的测试运行后,移除临时数据。
    • help:显示由测试名称参数指定的测试的使用信息。这包括测试提供的完整命令列表,因此应该用它来获取可用命令。
  • 选项是以'--'开头的零个或多个命令行选项列表。与命令一样,应使用sysbench 测试名称 help命令来描述特定测试提供的可用选项。

    有关sysbench本身提供的通用选项描述,请参阅通用命令行选项

你可以使用sysbench --help显示通用命令行语法和选项。

通用命令行选项

下表列出了支持的通用选项、它们的描述和默认值:

选项描述默认值
--threads要创建的工作线程总数1
--events请求总数的限制。0(默认值)表示无限制0
--time总执行时间限制(秒)。0表示无限制10
--warmup-time在实际进行统计的基准测试运行之前,禁用统计功能执行指定秒数的事件。这在您想要从统计中排除基准测试运行的初始阶段时非常有用。在许多基准测试中,初始阶段并不具有代表性,因为CPU/数据库/页面和其他缓存需要一些时间来预热0
--rate平均事务率。该数字指定所有线程平均每秒应执行多少个事件(事务)。0(默认值)表示无限制速率,即事件以尽可能快的速度执行0
--thread-init-timeout等待工作线程初始化的时间(秒)30
--thread-stack-size每个线程的堆栈大小32K
--report-interval定期报告中间统计信息,间隔时间以秒为单位。请注意,此选项生成的统计信息是每个间隔的,而不是累积的。0表示禁用中间报告0
--debug打印更多调试信息off
--validate在可能的情况下执行测试结果验证off
--help打印一般语法或指定测试的帮助信息,然后退出off
--verbosity详细程度级别(0 - 仅关键消息,5 - 调试)4
--percentilesysbench测量所有处理请求的执行时间,以显示最小、平均和最大执行时间等统计信息。对于大多数基准测试来说,了解与某个百分位数匹配的请求执行时间值也很有用(例如,95%百分位数意味着我们应该丢弃5%的最长请求,并从剩余的请求中选择最大值)。此选项允许指定查询执行时间的百分位数排名进行计数95
--luajit-cmd执行LuaJIT控制命令。此选项等同于luajit -j。有关更多信息,请参阅LuaJIT文档

请注意,所有大小选项(如本表中的--thread-stack-size)的数值可以通过附加相应的乘数后缀来指定(K表示千字节,M表示兆字节,G表示吉字节,T表示太字节)。

随机数选项

sysbench提供了多种算法来生成符合给定概率分布的随机数。下表列出了可用于控制这些算法的选项。

选项描述默认值
--rand-type默认使用的随机数分布 {uniform、gaussian、special、pareto、zipfian}。基准测试脚本可以选择使用默认分布,或明确指定分布,即覆盖默认值。special
--rand-seed随机数生成器的种子。当为0时,使用当前时间作为RNG种子。0
--rand-spec-iter特殊分布的迭代次数12
--rand-spec-pct特殊分布中"特殊"值将落入的整个范围的百分比1
--rand-spec-res特殊分布使用的"特殊"值的百分比75
--rand-pareto-h帕累托分布的形状参数0.2
--rand-zipfian-exp齐普夫分布的形状参数(theta)0.8

版本控制

为了透明度和对其发布周期的洞察,以及努力保持向后兼容性,sysbench将尽可能遵循语义化版本控制指南进行维护。

版本号将采用以下格式:

<主版本号>.<次版本号>.<修订号>

并遵循以下准则构建:

  • 破坏向后兼容性的更改会增加主版本号(并重置次版本号和修订号)
  • 在不破坏向后兼容性的情况下添加新功能会增加次版本号(并重置修订号)
  • Bug修复和其他杂项更改会增加修订号

有关语义化版本控制的更多信息,请访问http://semver.org/。 [coveralls-badge]: https://coveralls.io/repos/github/akopytov/sysbench/badge.svg?branch=master [coveralls-url]: https://coveralls.io/github/akopytov/sysbench?branch=master [action-url]: https://github.com/akopytov/sysbench/actions/workflows/ci.yml [action-badge]: https://github.com/akopytov/sysbench/actions/workflows/ci.yml/badge.svg [license-badge]: https://img.shields.io/badge/license-GPLv2-blue.svg [license-url]: COPYING [release-badge]: https://img.shields.io/github/release/akopytov/sysbench.svg [release-url]: https://github.com/akopytov/sysbench/releases/latest [deb-badge]: https://img.shields.io/badge/Packages-Debian-red.svg?style=flat [deb-url]: https://packagecloud.io/akopytov/sysbench?filter=debs [rpm-badge]: https://img.shields.io/badge/Packages-RPM-blue.svg?style=flat [rpm-url]: https://packagecloud.io/akopytov/sysbench?filter=rpms

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号