跳转至

全部参数,由代码自动生成

本页由 clawperf --help 与上下文档位定义自动生成,不会与工具脱节。共 73 个参数 / 77 个 flag。

SLO 约束语法

约束写法是 <指标>.<统计量><分隔符><毫秒> —— 重复 --slo 可「与」多个约束。

写法 含义 说明
ttft.p99:1500 ttft.p99 <= 1500ms 免引号
tpot.avg=30 tpot.avg <= 30ms 免引号
'ttft.p99<=1500' ttft.p99 <= 1500ms 在 bash/zsh 中必须加引号
ttft.p99\:ge:1500 ttft.p99 >= 1500ms 唯一免引号的 >= 写法
'a<=1,b<=2' 两条约束 一个引号参数写多条约束

Warning

在 shell 中要么给 <= 加引号,要么改用不含 < / > 的分隔符,因为它们是重定向符号。

指标 —— ttft(首 token 时延)、tpot(每输出 token 时延)、e2e(端到端时延)。

统计量 —— avg、min、max,以及任意分位 p25 p50 p75 p90 p95 p99 p99.9。多条约束为「与」关系;一旦某一级打破了任意一条,扫描即在此停止。

shell 引号陷阱,以及裸指标名传到 ClawPerf 时的诊断。

clawperf --mode slo ... --slo ttft.p99
$ clawperf --mode slo --endpoint http://141.111.32.62:8000/v1 \
    --model /mnt/model/Qwen3.5-0.8B --tokenizer /mnt/model/Qwen3.5-0.8B \
    --slo ttft.p99<=10000 --slo tpot.avg<=50 --slo e2e.max<=30000
bash: =10000: No such file or directory
        ^ bash treated '<' as a redirection, so ClawPerf never started

$ # the same constraints, written so the shell cannot eat them:
$ clawperf --mode slo ... --slo ttft.p99:10000 --slo tpot.avg:50 --slo e2e.max:30000

$ # and if a bare metric name does reach ClawPerf:
[ClawPerf] configuration error: invalid SLO constraint 'ttft.p99': no operator or threshold found after the metric.
  If you wrote --slo ttft.p99<=1500 without quotes, your shell consumed '<' as a redirection and ClawPerf only
  received 'ttft.p99' — quote it (--slo 'ttft.p99<=1500') or use the shell-safe form --slo ttft.p99:1500. expected
  '<metric>.<agg><op><value_ms>', e.g. ttft.p99<=1500, tpot.avg<=30, e2e.max<=30000 (metrics: ttft|tpot|e2e; aggs:
  avg|min|max|p25|p50|p75|p90|p95|p99|p99.9; ops: <=|<|>=|>). In a shell, '<' and '>' are redirection operators —
  quote the spec (--slo 'ttft.p99<=1500') or use the shell-safe separator form --slo ttft.p99:1500 (':' or '=' means
  '<=', and 'ttft.p99:le:1500' / 'ttft.p99:ge:1500' spell out the operator).

全部参数

每个参数、默认值与可选值。各模式专属参数列在通用参数之后。

Mode

参数 默认值 说明
--mode <MODE> scenario 基准模式(见上文各模式介绍):scenario(默认,多轮长上下文负载)、hitrate(受控前缀缓存命中率)、slo(扫描并发找 SLO 临界点)、agent(真实工具调用 Agent)、record(录制代理)、replay(回放录制)、trace(基于 trace 的 KV 缓存模拟)。
可选值: scenario, hitrate, slo, agent, record, replay, trace

Context Profiles & Suites

参数 默认值 说明
--context-profile <NAME> — 命名的上下文档位(大小写不敏感),会覆盖下面的原始 token 数:fresh、short、medium、long、full、xl、xxl(基础上下文约 6K→400K,具体拆分见档位表)。
--suite <NAME> — 预置套件:quick、standard、full、hitrate。按序运行多个(并发用户 × 档位)场景。
--model-context-length <TOKENS> 0 模型的最大上下文窗口。超出该窗口的套件档位会被跳过;trace 回放时会据此裁剪 max_tokens,保证请求能放进窗口(0 = 不限制)。

User Configuration

参数 默认值 说明
--num-users <NUM_USERS> 1 并发用户总数。
--user-arrival <USER_ARRIVAL> burst 'burst'(一次性全部加入)、'steady:<秒>'(每 N 秒加入一个)、'poisson:<λ>'(泊松到达,λ 为到达率)。

Context Configuration

参数 默认值 说明
--system-prefix-tokens <SYSTEM_PREFIX_TOKENS> 15000 所有用户共享的系统提示词长度(上下文的主要部分),会被 --context-profile/--suite 覆盖。
--system-prefix-source <SYSTEM_PREFIX_SOURCE> random 'random' 表示合成填充内容;也可传文件路径,用文件内容作为系统前缀。
--user-prefix-tokens <USER_PREFIX_TOKENS> 5000 每个用户各自独有的前缀长度(各不相同,避免前缀缓存被轻易命中)。
--input-tokens-per-turn <INPUT_TOKENS_PER_TURN> 5000 每轮追加的新用户内容长度。
--output-tokens-per-turn <OUTPUT_TOKENS_PER_TURN> 1000 每轮最大生成 token 数(配合 --ignore-eos 时即为实际测得的解码长度)。
--max-context-tokens <MAX_CONTEXT_TOKENS> 128000 触发追加式压缩的窗口阈值(必须与模型真实上下文窗口一致)。
--compaction-prefix-increment <COMPACTION_PREFIX_INCREMENT> 5000 每次压缩后向压缩前缀追加的 token 数。

Run Configuration

参数 默认值 说明
--request-rate <RPS> 0.0 开环请求发送速率(req/s,泊松到达,语义同 benchmark_serving)。0(默认)为闭环:由 --concurrency(hitrate/replay/trace)或连续轮次(scenario/slo/agent)驱动节奏。大于 0 时,hitrate/replay/trace 会忽略 --concurrency —— 请求按计划发送,与是否完成无关。注意:--user-arrival 控制的是用户(会话)何时加入,--request-rate 控制的是单个请求的发送节奏。
--concurrency <CONCURRENCY> 1 请求级并发:hitrate 测量阶段、replay、以及无用户标识的 trace 真实回放的在途请求数。trace 会话请用 --trace-users。
--max-turns <MAX_TURNS> 100 scenario 模式下每个用户的轮数(往返次数);--suite 会覆盖该值。
--max-consecutive-failures <MAX_CONSECUTIVE_FAILURES> 0 连续失败达到该次数后中止基准(0 = 不启用)。

API Configuration

参数 默认值 说明
--endpoint <ENDPOINT> — LLM API 端点地址(环境变量:CLAWPERF_ENDPOINT)。
--model <MODEL> — 模型名称(环境变量:CLAWPERF_MODEL)。
--api-key <API_KEY> — API Key(环境变量:CLAWPERF_API_KEY)。
--tokenizer <TOKENIZER> — tokenizer 路径或模型 id(默认为 --model)。本地目录会严格离线加载(不查 hub);可用 CLAWPERF_TOKENIZER_BACKEND=transformers|modelscope 强制指定后端。
--ignore-eos
--no-ignore-eos
on 要求服务端忽略 EOS,让每个请求都解码满输出长度(默认开启 —— 这是比较吞吐的公平做法)。 / 允许模型在 EOS 处自然停止(更贴近真实对话时延)。
--request-timeout <REQUEST_TIMEOUT> 600 单个请求的超时时间(秒)。
--no-preflight on 跳过预检探针(正式跑之前发出的那个极小请求,用于尽早发现 endpoint/模型写错)。当服务端会重置该探针但实际能正常服务时使用。
--preflight-retries <PREFLIGHT_RETRIES> 3 预检探针的最大尝试次数(默认 3 次;传输类错误会带退避重试)。

System Metrics

参数 默认值 说明
--metrics-endpoint <URL> — Prometheus 指标端点。可重复指定(或用逗号分隔),用于多实例 / PD 分离服务 —— 每个 prefill/decode 实例各暴露一个 /metrics,计数器求和成全局视图,并给出逐实例的引擎明细。可用 '名称=url' 指定标签(默认标签为 host:port)。
--metrics-interval <METRICS_INTERVAL> 5 周期性抓取 /metrics 的间隔秒数(仅在 --metrics-samples 时生效)。
--metrics-samples off 在运行过程中周期性抓取 /metrics,而不只是开始/结束各一次(会带来少量额外请求)。
--reset-cache off 运行前清空服务端前缀缓存,使测得的命中率只反映本次基准的流量。
--backend <BACKEND> vllm 服务端后端类型,决定读取哪些 Prometheus 指标名。
可选值: vllm, sglang, mindie

Output

参数 默认值 说明
--output <OUTPUT> — 输出 JSON 文件路径(默认带时间戳的 results_.json)。环境变量:CLAWPERF_OUTPUT。
--history <HISTORY> — 每次运行向该 JSONL 文件追加一行记录。环境变量:CLAWPERF_HISTORY。传 '' 可关闭。
-v
--verbose
off 逐请求打印日志而不是显示进度条(适合 CI 日志)。

Configuration Files

参数 默认值 说明
--config <CONFIG> — YAML 配置文件。优先级低于命令行参数与环境变量。

Hit-Rate Mode (only with --mode hitrate)

参数 默认值 说明
--num-requests <NUM_REQUESTS> 100 测量阶段的请求总数。
--input-len <INPUT_LEN> 1024 每个请求的提示词总长度 = 共享前缀 + 边界 token + 各自独有的后缀。
--output-len <OUTPUT_LEN> 128 每个请求生成的 token 数(预热/预填充阶段只用 1)。
--prefix-len <PREFIX_LEN> 0 共享前缀的 token 长度(0 = 由 --hit-rate 反推)。
--hit-rate <HIT_RATE> — 目标共享比例 0..1,用于反推 --prefix-len;与 --prefix-len 互斥。
--prefix-num <PREFIX_NUM> 1 不同前缀的个数;每个前缀分到的请求数 = N // prefix-num。
--prefill
--no-prefill
on 测量前先把每个不同前缀注入 KV 缓存。 / 跳过预填充阶段(测冷缓存表现)。
--seed <SEED> 0 提示词构造的随机种子,用于复现。

SLO Mode (only with --mode slo)

参数 默认值 说明
--slo <SPEC> — 灵活的 SLO 约束,可重复指定:<指标>.<统计量><分隔符><毫秒>,例如 ttft.p99<=1500、tpot.avg<=30、e2e.max<=30000。指标:ttft|tpot|e2e;统计量:avg|min|max|p25|p50|p75|p90|p95|p99…;运算符:<=|<|>=|>。多条约束之间为「与」关系。shell 安全:'<' 与 '>' 是重定向符号,所以要么加引号(--slo 'ttft.p99<=1500'),要么用免引号分隔符写法 --slo ttft.p99:1500(':' 或 '=' 表示 '<=',--slo ttft.p99:ge:1500 表示 '>=')。一个引号参数内可用逗号写多条:--slo 'ttft.p99<=1500,tpot.avg<=30'。给出后即替代旧式 --slo-ttft-ms/--slo-tpot-ms。
--slo-ttft-ms <SLO_TTFT_MS> — 旧式写法:在 --slo-percentile 分位上的 TTFT 阈值(推荐改用 --slo ttft.p99<=X)。
--slo-tpot-ms <SLO_TPOT_MS> — 旧式写法:在 --slo-percentile 分位上的 TPOT 阈值(推荐改用 --slo tpot.p99<=X)。
--slo-percentile <SLO_PERCENTILE> 0.99 旧式 --slo-ttft-ms/--slo-tpot-ms 所使用的分位(给出 --slo 约束时忽略)。
--slo-error-rate <FRACTION> — 额外的达标条件:该步的错误率必须不高于此比例(0..1),例如 0.01 表示 1%。
--slo-min-users <SLO_MIN_USERS> 1 扫描的起始并发用户数。
--slo-max-users <SLO_MAX_USERS> 100 扫描可达到的最大并发用户数。
--slo-step-strategy <SLO_STEP_STRATEGY> geometric 扫描下一档的方式:geometric 成倍增长(1→2→4→8,适合大范围快速定位),linear 逐级递增。
可选值: geometric, linear
--slo-step-turns <SLO_STEP_TURNS> 5 每一档每个用户参与测量的轮数。
--slo-step-warmup-turns <SLO_STEP_WARMUP_TURNS> 1 每档测量前,每个用户不计入统计的预热轮数。
--slo-step-timeout-s <SLO_STEP_TIMEOUT_S> 300 单档的墙钟预算;超时的档会被记为 TIMEOUT 并判定 SLO 不达标。
--slo-step-reset-cache
--no-slo-step-reset-cache
on 每档开始前清空服务端前缀缓存,让每一档都从冷缓存起步(默认开启)。 / 跨档保留缓存(测稳态复用)。

Agent Mode (only with --mode agent)

参数 默认值 说明
--agent-tasks <AGENT_TASKS> 4 并发运行的编码任务数。
--agent-task-file <AGENT_TASK_FILE> — 自定义任务的 JSON/YAML 文件(默认使用内置任务集)。
--agent-max-steps <AGENT_MAX_STEPS> 12 单个任务在被截断前的最大工具调用步数。
--agent-max-tokens <AGENT_MAX_TOKENS> 512 任务内每次模型调用的最大生成 token 数。
--agent-shell-timeout <AGENT_SHELL_TIMEOUT> 30 Agent 执行的单条 shell 命令允许的最长秒数。
--agent-workdir <AGENT_WORKDIR> — 每个任务工作区的根目录(默认使用临时目录)。

Record Mode (only with --mode record)

参数 默认值 说明
--upstream-endpoint <UPSTREAM_ENDPOINT> — 需要转发到的真实 LLM 端点(环境变量:CLAWPERF_UPSTREAM_ENDPOINT)。
--proxy-port <PROXY_PORT> 9090 录制代理监听的端口。
--recording <RECORDING> session.jsonl 录制内容写入的 JSONL 文件。
--upstream-api <UPSTREAM_API> auto 上游端点的 API 类型(auto 表示自动识别)。
可选值: openai, anthropic, auto

Replay Mode (only with --mode replay)

参数 默认值 说明
--history-mode <HISTORY_MODE> live live(推荐):把服务端真实返回作为下一轮历史,保证 KV 缓存前缀对齐;verbatim:原样发送每条录制记录的 messages。
可选值: live, verbatim

Trace Mode (only with --mode trace)

参数 默认值 说明
--trace-file <TRACE_FILE> — kvcache.ai 格式的 JSONL trace 文件,每行 {hash_ids, input_length, block_size?};支持 .gz 压缩,用 '-' 表示从标准输入读取。
--cache-budget-tokens <CACHE_BUDGET_TOKENS> 0 KV 缓存容量上限(token 数,0 = 不限)。要做预算扫描请改用 --budget-sweep。
--cache-budget-gb <CACHE_BUDGET_GB> 0.0 另一种写法:用 GB 指定缓存预算,会覆盖 --cache-budget-tokens,并按 --kv-bytes-per-token 换算。
--eviction-policy <EVICTION_POLICY> lru 缓存超出预算时的块驱逐策略。
可选值: lru, fifo
--trace-block-size <TRACE_BLOCK_SIZE> 64 默认块大小(token 数);trace 行内自带 block_size 时以行内为准。
--trace-users <TRACE_USERS> 1 真实回放的会话级并发:当 trace 带 user_id/session_id 时,同时跑多少个用户/会话组;同一会话内的轮次保持有序。若 trace 没有用户标识,请改用 --concurrency 做请求级并发。
--budget-sweep off 在多个预算档位下重复模拟,找出收益拐点(边际递减),输出「命中率-预算」曲线。
--kv-bytes-per-token <KV_BYTES_PER_TOKEN> 2.0 每个 KV 缓存 token 占用的字节数,用于 GB↔token 换算。不同模型差异很大(如 DeepSeek MLA 约 0.5,Qwen2.5 72B 约 4.0)。

产物与退出码

退出码 含义
0 基准跑完并写出结果
1 配置或预检错误(未开始跑基准)
2 基准跑了但全部请求失败(CI 门禁)
3 被中断(Ctrl+C);退出前会写出部分结果

每次运行都会写一份 JSON 结果与旁边的 Markdown 报告。clawperf report results.json 可从任意结果重新生成报告,clawperf compare a.json b.json 可对比两次运行。

故障排查

现象 解决
bash: =10000: No such file or directory shell 吃掉了 --slo ttft.p99<=10000 中的 <。改用 --slo ttft.p99:10000,或给参数加引号。
Tokenizer path '...' does not exist 容器内看不到该路径 —— 报错会列出父目录内容;用 -v /mnt/model:/mnt/model:ro 挂载。
Pre-flight: ... Connection reset by peer 服务端重置了这个极小探针(常见于仍在加载权重)。传输类错误会自动退避重试 3 次;加 --no-preflight 可完全跳过探针。
UnicodeEncodeError on Windows CLI 已强制 UTF-8 stdio;若第三方工具仍报错,设置 PYTHONIOENCODING=utf-8。

更多细节(含 tokenizer 后端选择)见 README 与 端到端测试报告。