磁盘测试: sequential, random, all (默认: all)
--disk-path 磁盘测试路径 (默认: /tmp)
--disk-size 磁盘测试大小 MB (默认: 128, 最大: 4096)
--iterations 每项测试迭代次数 (默认: 3, 最大: 100)
-t, --time 每项测试持续时间秒 (默认: 10, 范围: 1-3600)
--duration 同 --time
-o, --output 保存结果到文件
--json JSON 格式输出
```
### 示例
```bash
# 仅 CPU 测试,每项 5 秒
zenith --no-memory --no-disk --no-network -t 5
# 仅磁盘测试,256MB 测试文件
zenith --no-cpu --no-memory --no-network --disk-size 256
# 仅系统信息(不跑分)
zenith --no-cpu --no-memory --no-disk
# 4 线程,日语输出
zenith --threads 4 -l ja
```
## 评分算法
### 测试方法
所有基准测试使用**持续时间采样 + 中位数聚合**:
1. **预热** — 丢弃第一轮迭代,消除冷启动效应
2. **定时循环** — 持续运行至 `duration_secs` 时间耗尽(默认 10 秒),每轮采集一个样本
3. **中位数** — 对所有样本排序取中位数,消除系统噪音和异常值
### CPU 评分
| 子测试 | 公式 |
|--------|------|
| 质数单核 | `每秒操作数 × 1` |
| 质数多核 | `每秒操作数 × 1` |
| 矩阵单核 | `GFLOPS × 100` |
| 矩阵多核 | `GFLOPS × 100` |
| **CPU 总分** | 四项子分之和 |
- **质数测试**:统计 100,000 以内的质数个数,使用试除法
- **矩阵测试**:128×128 双精度矩阵乘法,GFLOPS = `2×N³ / 时间 / 10⁹`
- 多线程测试并行启动所有工作线程(默认自动检测 CPU 核心数)
### 内存评分
| 子测试 | 测量指标 |
|--------|----------|
| 顺序写入 | bytes/sec(64 MB 缓冲区,volatile 写入)|
| 顺序读取 | bytes/sec(64 MB 缓冲区,volatile 读取)|
| 顺序拷贝 | bytes/sec(64 MB `@memcpy`)|
| 随机读取 | bytes/sec(100 万条目指针追踪)|
| 访问延迟 | 纳秒(链表指针追踪)|
```text
平均带宽 = (顺序写 + 顺序读 + 顺序拷贝) / 3
带宽分数 = 平均带宽_MB每秒 × 0.1
延迟分数 = 1000 / 延迟_纳秒 × 50
总分 = 带宽分数 + 延迟分数
```
带宽越高、延迟越低,分数越高。
### 磁盘评分
| 子测试 | 测量指标 |
|--------|----------|
| 顺序写入 | bytes/sec(1 MB 块,Linux 下 fdatasync)|
| 顺序读取 | bytes/sec(1 MB 块)|
| 随机写入 | IOPS(4 KB 块,4096 个随机偏移)|
| 随机读取 | IOPS(4 KB 块,4096 个随机偏移)|
```text
顺序分数 = (顺序写 + 顺序读) MB/s × 0.5
IOPS 分数 = (随机写 IOPS + 随机读 IOPS) × 0.005
总分 = 顺序分数 + IOPS 分数
```
### 综合评分
```text
综合分 = CPU 总分 + 内存总分 + 磁盘总分
```
消费级硬件典型分数范围:**5,000 - 30,000**。
## 交叉编译
默认 `zig build` 编译全部 14 个目标:
```bash
zig build -Doptimize=ReleaseSmall
# 输出: zig-out/bin/zenith-{target}
```
### 支持的目标
| 操作系统 | 架构 |
|----------|------|
| Linux | x86_64, aarch64, arm, riscv64, s390x, ppc64le, i386, loongarch64 |
| Windows | x86_64, i386, aarch64 |
| macOS | x86_64, aarch64 (Apple Silicon) |
| FreeBSD | x86_64 |
共 **14 个目标**,一次 `zig build` 生成 14 个二进制文件。
## 安全说明
- **网络信息使用 HTTP**(非 HTTPS)查询 `ip-api.com`。免费版仅支持 HTTP。敏感环境中请使用 `--no-network` 跳过。
- **输入校验**:CLI 参数限制在安全范围 — `--disk-size` 最大 4096 MB,`--threads` 最大 1024,`--time` 范围 1-3600 秒。
- **临时文件**:磁盘测试在 `--disk-path` 目录创建 `zenith_bench.tmp`,每轮测试后自动清理。
## 下载
所有支持平台的预编译二进制文件可在 [Releases 页面](https://github.com/MakotoArai-CN/zenith/releases) 获取。
## 构建要求
- [Zig](https://ziglang.org/download/) >= 0.15.0
## 许可证
详见 [LICENSE](LICENSE)。