keybench:可脚本化排序键值存储性能工具,多维度测试与分析全揭秘
导航菜单
切换导航,有登录选项,还可进行外观设置。
平台
包含AI代码创作、开发者工作流、应用程序安全和探索等方面。AI代码创作有GitHub Copilot、GitHub Copilot应用、MCP注册表;开发者工作流涵盖Actions、Codespaces、Issues、代码审查;应用程序安全包括GitHub高级安全、代码安全、密钥保护;探索部分有为何选择GitHub、文档、博客、更新日志、市场等。还可查看所有功能。
解决方案
按公司规模划分有企业版、中小型团队版、初创公司版、非营利组织版;按用例划分有应用现代化、DevSecOps、DevOps、CI/CD等,还可查看所有用例;按行业划分有医疗保健、金融服务、制造业、政府机构等,也可查看所有行业。还能查看所有解决方案。
资源
按主题探索有AI、软件开发、DevOps、安全等,可查看所有主题;按类型探索有客户案例、活动与网络研讨会、电子书与报告、商业洞察、GitHub技能;支持与服务包括文档、客户支持、社区论坛、信任中心、合作伙伴。还可查看所有资源。
开源
社区有GitHub赞助;项目包括安全实验室、维护者社区、加速器、GitHub之星、存档项目;仓库有主题、热门趋势、集合。
企业版
企业解决方案是企业平台,由AI驱动;可用附加组件有GitHub高级安全、Copilot for Business、高级支持。
定价
可查看定价。
搜索
可搜索代码、仓库、用户、问题、拉取请求等,还有搜索语法提示。
提供反馈
可提供反馈,包含电子邮件地址以便联系。
保存的搜索
使用保存的搜索可更快速筛选结果,若要查看所有可用限定符,可参阅文档。
登录与注册
有登录和注册选项,还有外观设置,以及登录状态提醒。
仓库信息
有guycipher/keybench仓库,包含通知、分叉、加星等操作,还有代码、问题、拉取请求、操作、项目、安全与质量、洞察等导航选项。
keybench介绍
keybench是一款可脚本化、可扩展的排序键值存储性能工具。可使用Lua编写工作负载,在一个或多个存储引擎上运行,对操作计时,报告吞吐量和延迟,相同脚本可在各引擎上无改动运行,便于公平比较。
测量指标
keybench会报告两种速率和一个延迟分布。wu/s是每秒执行的工作负载单位数,一个单位是对 `run()` 函数的一次调用;ops/s是每秒执行的基本操作数,一个基本操作可以是一次 `put`、`get`、`del`、`range` 或 `scan` 调用,或者是 `mget`、`mput` 或 `mdel` 中处理的一个键。当每个工作负载单位只包含一个基本操作时,两种速率相等;包含多个基本操作时,报告中会分别显示。延迟以分布形式记录,每种操作都有自己的直方图,报告中会给出每个操作的p50、p99、p99.9和最大值。
工作原理
keybench由五个可替换部分组成。引擎负责并发处理,创建工作线程,分配操作预算,测试框架不锁引擎调用;工作负载是一个Lua表,包含名称、`load` 函数和 `run` 函数,`load` 函数用于填充存储,`run` 函数是被测量单位;存储是统一接口,脚本通过全局 `kv` 表调用存储操作,keybench会计时并统计基本操作数;后端是自注册插件,每个引擎在 `backends/` 目录下,可通过命令行参数选择;报告器是输出接收器,一次运行会将信息广播给指定报告器,可同时运行多个报告器。
构建
keybench自带Lua库,默认构建只需C编译器和pthreads,使用 `make` 命令生成 `./keybench`,包含内存中的跳表引擎。编译持久化引擎可指定引擎名称,还可指定分配器、引擎库和头文件位置等。若使用系统Lua,可使用 `make LUA_SYS=1` 命令。还有其他目标,如 `make run`、`make all-wl`、`make clean`。
运行
最小运行命令只需指定一个工作负载文件,默认在一个线程上对跳表引擎执行200000个工作负载单位,并输出控制台报告,报告包含系统探测信息、构建探测信息、操作延迟分布、命中率和吞吐量等。
实时进度
运行过程中,keybench每秒会向stderr输出一行状态信息,限时运行会显示已用时间、预算时间和当前速率,限操作数运行会显示已用时间、速率和操作预算完成百分比,状态信息只在stderr是终端时输出。
选择工作参数
可通过 `--ops N` 指定总操作单位数,`--secs S` 指定运行时间,`--users N` 指定用户数量,`--items N` 指定目录大小,`--seed N` 指定随机数生成器基础种子。`--ops` 和 `--secs` 只能选一个,`--users`、`--items` 和 `--seed` 始终适用。
扫描和比较
在参数中使用逗号分隔的列表可将一次运行扩展为网格,keybench会运行网格中的每个点,并输出汇总表。可通过 `--backend L` 指定引擎,`--threads L` 指定线程数,`--batch L` 指定批量大小,`--repeat N` 指定每个点运行次数。指定多个文件可按顺序运行,每个文件在新存储中独立运行。
报告器和实时时间线
可通过 `--report S` 指定输出接收器列表,`--timeline S` 指定采样间隔,`--report-dir D` 创建带时间戳的目录并打包结果文件。接收器名称包括 `console`、`tsv` 和 `timeline`,不同接收器有不同输出格式。
探测
探测用于记录基准测试上下文信息,系统探测报告主机、CPU、内存等信息,构建探测报告keybench版本、编译器和分配器。可通过 `--probe L` 指定探测列表。
配置文件和重放
一次运行可保存为配置文件并精确重放,配置文件格式为纯INI,`[bench]` 部分设置运行参数,引擎部分调整引擎。可通过 `--config F` 加载运行参数和引擎调整信息,`--save-config F` 保存重放配置。
示例
执行模型是一次运行是一个网格,由引擎列表、线程列表和批量大小列表组合构成,keybench为每个工作负载文件运行一次该网格,网格中每个单元格测量 `--repeat` 次并取中位数。有优先级规则,`--config` 文件提供默认值,命令行标志会覆盖它,`--report-dir` 会接管报告功能。持久化引擎需要 `--data-dir`,跳表引擎不需要。还给出了多个示例展示不同的运行方式。
绘图
`scripts/plot.py` 可将结果目录中的TSV文件渲染为图表,包括吞吐量柱状图、可扩展性曲线等,系统时间线图表包含系统探测记录的所有指标,引擎内部状态绘制在单独图表中,引擎颜色来自 `BACKENDPALETTE` 文件,默认图表保存为PNG格式。
