ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux性能测试入门:用unixbench、sysbench与perf搭建TaoToken环境下的基准测试流程

Linux性能测试入门:用unixbench、sysbench与perf搭建TaoToken环境下的基准测试流程 1. 为什么要在 TaoToken 通道下做 Linux 性能基准测试Linux 性能测试这件事很多人第一次接触时都会有点懵工具一大堆unixbench、sysbench、perf 各自测什么、怎么装、参数怎么给、结果怎么看网上的文章要么只列工具名要么直接甩一堆命令不讲上下文。我这次想做的是把「入门三件套」串成一条能复现的流程并且把测试环境准备这一步放到 TaoToken 统一 Key/API 通道下来做——原因很简单很多性能测试脚本、自动化压测任务、结果上报服务都需要调用模型接口做日志分析或异常归因如果每个工具都单独配一套 Key环境会乱得没法复现。先说清楚这三个工具分别能干什么方便你对号入座unixbench 是综合型基准它不专门测 CPU而是把文件复制、管道吞吐、上下文切换、进程创建、系统调用、2D/3D 图形等一堆用例跑一遍最后给一个指数分。它的价值在于「系统整体」的横向对比比如你换了一台云主机想知道综合性能差多少跑一遍 unixbench 最直观。sysbench 是模块化、多线程的基准工具最常被用来测 CPU、内存、文件 I/O、线程调度也能模拟数据库负载。它比 unixbench 更「可控」因为你可以指定线程数、测试时长、事件类型适合做参数化对比。perf 是内核自带的性能分析利器perf bench子命令自带内存、调度等测试用例perf stat、perf record则能做细粒度的性能剖析。它不像前两者那样给一个总分而是告诉你「时间花在哪了」。适合谁看这篇刚接手 Linux 服务器、需要建立一套可复现性能基线的人做 CI 里加性能回归检测的人以及想把测试脚本和模型接口调用统一到一条通道下的人。下面从环境准备开始一步步来。2. TaoToken 前置准备统一 Key 与 API 通道在跑性能测试之前先把「调用通道」这件事定下来。我试过把测试脚本里的模型调用散落在各个环境变量里结果换一台机器就要重新对一遍非常痛苦。TaoToken 的做法是给你一个统一的 Base URL 和 Key所有需要模型能力的环节都走这一条通道测试环境就干净很多。你需要准备的东西只有三样Base URL、API Key、Model ID。Base URL 用https://taotoken.net/api注意这个地址不带任何查询参数直接作为 OpenAI 兼容接口的根路径使用。API Key 在控制台的 API Keys 页面创建创建后只显示一次记得立刻存到密码管理器或.env文件里。创建 Key 的入口在这里https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite如果你后面要跑 Claude Code 这类编码 Agent 做测试脚本的自动生成或结果分析可以顺带看一下 Coding Plan 的说明https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewriteModel ID 这块不同场景用的模型不一样。做日志归因、结果摘要这类文本任务选一个通用对话模型即可做代码相关的分析选代码能力强的模型。具体可用列表在模型对话页面能看到https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite把这三样写进环境变量后面所有脚本都从这里读export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_MODEL你的ModelID注意不要把 Key 硬编码进测试脚本再提交到 Git。用.env.gitignore或者用系统的 secret 管理。性能测试脚本经常要在多台机器上跑Key 泄露的风险比普通项目更高。环境变量设好之后先做一次最小连通性验证确认通道是通的再往下装测试工具。验证命令在下一节给。3. 可复制配置三件套安装与参数模板这一节是全文最「重」的部分所有命令都可以直接复制。我按 unixbench、sysbench、perf 的顺序来每个工具给安装、配置、运行三段。3.1 unixbench 安装与运行unixbench 在多数发行版仓库里没有现成包需要从源码编译。先装编译依赖# Debian/Ubuntu sudo apt update sudo apt install -y build-essential libx11-dev libgl1-mesa-dev libxext-dev perl # RHEL/CentOS/Rocky sudo yum groupinstall -y Development Tools sudo yum install -y perl mesa-libGL-devel libX11-devel libXext-devel然后拉源码编译git clone https://github.com/kdlucas/byte-unixbench.git cd byte-unixbench/UnixBench make编译完成后用Run脚本跑测试。常用参数-c指定并发数一般设为 CPU 核数-i指定迭代次数入门建议 1 到 3 次跑多了很慢-t指定单个测试的超时时间。# 查看 CPU 核数 nproc # 以 4 并发、1 次迭代运行 ./Run -c 4 -i 1跑完会在当前目录生成结果文件形如results/xxx-日期-01。里面每个用例的得分和最终的 System Benchmarks Index Score 都会列出来。这个总分就是你要记录的基线值。3.2 sysbench 安装与参数模板sysbench 在主流仓库里都有直接装# Debian/Ubuntu sudo apt install -y sysbench # RHEL/CentOS/Rocky需要 EPEL sudo yum install -y epel-release sudo yum install -y sysbenchsysbench 的测试分几类最常用的是 CPU 和内存。CPU 测试用cpu子命令--cpu-max-prime控制素数上限值越大单次计算越重# CPU 测试4 线程素数上限 20000跑 30 秒 sysbench cpu --threads4 --cpu-max-prime20000 --time30 run内存测试用memory子命令--memory-block-size是块大小--memory-total-size是总传输量--memory-oper可选 read/write# 内存顺序写测试1K 块总共 10G4 线程 sysbench memory --threads4 --memory-block-size1K --memory-total-size10G --memory-operwrite run文件 I/O 测试需要先准备测试文件再跑# 准备 2G 测试文件 sysbench fileio --file-total-size2G prepare # 随机读写测试 sysbench fileio --file-total-size2G --file-test-moderandrw --time30 --threads4 run # 测试完清理 sysbench fileio --file-total-size2G cleanup3.3 perf 安装与 bench 用例perf 属于 linux-tools装的时候注意版本要和内核匹配# Debian/Ubuntu sudo apt install -y linux-tools-common linux-tools-$(uname -r) # RHEL/CentOS/Rocky sudo yum install -y perfperf bench自带几个子命令入门先看内存和调度# 内存拷贝基准 perf bench mem memcpy # 调度器基准管道通信 perf bench sched pipe # 系统调用基准 perf bench syscall basicperf stat用来统计某个命令的硬件事件比如跑一次 sysbench 的 CPU 测试并统计perf stat -e cycles,instructions,cache-misses sysbench cpu --threads1 --cpu-max-prime10000 --time10 run3.4 把 TaoToken 配置写进测试脚本如果你想让测试脚本在跑完后自动调用模型做结果摘要可以用一个 JSON 配置文件把通道信息集中管理。下面这个taotoken.json放在项目根目录{ base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model: 你的ModelID, timeout_seconds: 60, endpoints: { chat: /v1/chat/completions, models: /v1/models } }脚本里读这个文件Key 从环境变量取不写进 JSON。这样换机器时只需要重新 export 环境变量配置文件本身可以进版本库。4. 验证请求与成功结果从连通性到基线数据配置写完先验证 TaoToken 通道是否通。用 curl 发一个最小请求curl -sS ${TAOTOKEN_BASE_URL}/v1/models \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json | head -c 500如果返回一个包含模型列表的 JSON说明 Base URL 和 Key 都没问题。接着发一个对话请求curl -sS ${TAOTOKEN_BASE_URL}/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: ${TAOTOKEN_MODEL}, messages: [{role: user, content: 回复 OK 两个字母}], max_tokens: 16 }返回体里choices[0].message.content有内容就说明通道完全可用。这一步过了再跑性能测试。现在跑一遍三件套记录基线。先 unixbenchcd byte-unixbench/UnixBench ./Run -c $(nproc) -i 1跑完后看结果文件里的总分。我实测下来一台 4 核 8G 的云主机unixbench 总分大概在 1500 到 2500 之间具体取决于磁盘和调度。这个数字本身没有绝对意义重要的是和后续对比。再跑 sysbench CPUsysbench cpu --threads$(nproc) --cpu-max-prime20000 --time30 run输出里关注events per second和total number of events。前者是每秒完成的事件数越高越好后者是总事件数。把这两个值记下来。最后跑 perf bench 内存perf bench mem memcpy输出会给出Operations per second和MB/sec这是内存拷贝的吞吐基线。把三次结果整理成一张表方便后续对比工具测试项关键指标基线值unixbench综合Index Score记录实际值sysbenchCPUevents per second记录实际值perfmemcpyMB/sec记录实际值这张表就是你后续做性能回归的参照。每次改内核参数、换硬件、调调度策略都跑一遍同样的命令对比这张表。5. 本篇常见错排查401、local proxy failed、reading choices跑这套流程时报错基本集中在两类通道认证类和工具运行类。逐个说。401 Unauthorized。这个最常见原因通常是 Key 没设对或没生效。先确认环境变量真的导出了echo ${TAOTOKEN_API_KEY:0:8}如果输出为空说明当前 shell 没读到。检查是不是在子 shell 里 export 的或者.env没 source。另一个原因是 Key 复制时带了空格或换行用printf %s $TAOTOKEN_API_KEY | wc -c看长度对不对。还有一种情况是 Base URL 写成了带路径的形式比如https://taotoken.net/api/v1而请求里又拼了一次/v1导致路径重复。Base URL 就用https://taotoken.net/api端点路径在请求时补。local proxy failed。这个报错一般出现在脚本里配置了代理但代理不可用的时候。先检查环境变量env | grep -i proxy如果有http_proxy、https_proxy之类的变量而你的网络环境不需要代理直接 unsetunset http_proxy https_proxy all_proxy然后重新跑请求。如果确实需要走代理确认代理地址和端口正确并且代理进程在运行。注意不要把代理配置和 TaoToken 的 Base URL 混在一起两者是独立的。reading choices 相关报错。这个通常出现在解析模型返回的 JSON 时。比如脚本里用jq取choices[0].message.content但返回体结构不对就会报读取失败。先看原始返回curl -sS ${TAOTOKEN_BASE_URL}/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d {model:${TAOTOKEN_MODEL},messages:[{role:user,content:hi}],max_tokens:8} | jq .如果jq报 parse error说明返回的不是 JSON可能是网关的错误页。如果返回 JSON 但没有choices字段检查 model 名是否正确、请求体是否符合 OpenAI 格式。max_tokens设太小有时会导致返回体被截断设成 64 以上再试。OAuth 相关报错。如果你用的是 Claude Code 这类工具报 OAuth 错误通常是因为认证方式没配对。Claude Code 走的是 Anthropic 兼容接口需要确认 Base URL 和 Key 的用法。接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteunixbench 编译失败。多数是缺 X11 或 GL 开发库。按第 3.1 节的依赖列表补装。如果只是想做 CPU 和系统调用测试可以在Makefile里去掉图形相关用例但入门阶段建议装全依赖保持结果可比。sysbench 报 fileio 文件不存在。文件 I/O 测试必须先prepare再run跑完记得cleanup。如果中途中断残留的测试文件会占空间手动删掉再重新 prepare。perf 报 permission denied。perf需要perf_event_paranoid权限。临时放开sudo sysctl -w kernel.perf_event_paranoid1生产环境不要长期设成 -1测试完改回去。6. 把测试流程固化下来脚本化与长期编码单次跑通不难难的是每次都能复现。我的做法是把三件套包成一个 shell 脚本参数从配置文件读结果输出到带时间戳的目录。这样每次跑完自动归档对比时直接 diff 两次的结果文件。脚本骨架大概是这样#!/usr/bin/env bash set -euo pipefail RUN_ID$(date %Y%m%d-%H%M%S) OUT_DIRresults/${RUN_ID} mkdir -p ${OUT_DIR} # 记录环境信息 { uname -a nproc free -h df -h } ${OUT_DIR}/env.txt # unixbench (cd byte-unixbench/UnixBench ./Run -c $(nproc) -i 1) \ ${OUT_DIR}/unixbench.log 21 # sysbench cpu sysbench cpu --threads$(nproc) --cpu-max-prime20000 --time30 run \ ${OUT_DIR}/sysbench-cpu.log 21 # perf memcpy perf bench mem memcpy ${OUT_DIR}/perf-memcpy.log 21 echo done: ${OUT_DIR}这个脚本可以挂到 CI 里每次合并前跑一遍和基线对比。如果某个指标下降超过阈值就报警。如果你想让脚本更「聪明」一点比如自动分析日志、生成对比报告可以接上 TaoToken 的模型接口。把两次的日志文件内容拼成 prompt让模型找出差异点并给出可能原因。这一步用 Coding Plan 的额度比较划算适合长期跑https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite需要新的 Key 或者管理多个项目的 Key去控制台https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接口细节和参数说明看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后提醒一句性能测试的结果受很多因素影响CPU 频率调节、后台进程、磁盘缓存、NUMA 拓扑都会让数字波动。做对比时尽量保证两次测试的环境一致跑之前把cpupower frequency-set -g performance设上关掉不必要的服务。基线不是跑一次就定死的多跑几次取稳定值再作为参照。
返回列表