diff --git a/README.en.md b/README.en.md
index 2680b1a..1bf58a8 100644
--- a/README.en.md
+++ b/README.en.md
@@ -2,7 +2,11 @@
[简体中文](README.md)
-Run it on a Linux VPS before you rent or renew — it tells you whether the CPU is fast, the memory is adequate, and the disk can actually write. ABS measures all of that, produces a score, and gives one verdict: **KEEP**, **MAYBE**, **AVOID**, or **INCOMPLETE** (some test didn't run, so don't judge by that score).
+Run it on a Linux VPS before you rent or renew — it tells you whether the CPU is fast, the memory is adequate, and the disk can actually write. When it finishes you get a score plus one verdict: **KEEP / MAYBE / AVOID / INCOMPLETE**.
+
+

+
+The image above is a real run: host details first, then the measured CPU/memory/disk/fsync numbers, then the final score and a `KEEP` verdict.
## Run
@@ -10,118 +14,59 @@ Run it on a Linux VPS before you rent or renew — it tells you whether the CPU
curl -fsSL https://askclaw.top/abs.sh | bash
```
-Terminal output defaults to Chinese. A typical run finishes within three minutes after dependencies are installed. ABS may install `sysbench`, `fio`, `python3`, and `curl` via `sudo`.
+Terminal output defaults to Chinese; a typical run finishes in about 3 minutes once dependencies are installed. ABS may install `sysbench`, `fio`, `python3`, and `curl` via `sudo`.
```bash
-# English output
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --lang en
-
-# Do not install missing tools
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- -n
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --lang en # English output
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- -n # don't install missing tools
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --quick # quick ~60s
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --full # full 5–8 min
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --json-file result.json
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --lang en --help # every option
```
-> `curl | bash` executes downloaded code directly. To inspect the script first:
+> `curl | bash` executes downloaded code. To inspect the script first:
>
> ```bash
-> curl -fsSLo abs.sh https://askclaw.top/abs.sh
-> less abs.sh
-> bash abs.sh --lang en
+> curl -fsSLo abs.sh https://askclaw.top/abs.sh && less abs.sh && bash abs.sh --lang en
> ```
## Reading the result
-English mode keeps the stable machine codes:
-
```text
-==================== ABS RESULT ====================
SCORE : FULL 1568 (local only; network reference 136)
-VERDICT : MAYBE - disk component is weak (component score 306); weak durable-write/fsync
-LOCAL : FULL 1568 (local only: cpu,mem,disk,fsync; network excluded)
-NETWORK : SANITY 136 (Cloudflare HTTP; reference only, not in score)
-====================================================
+VERDICT : MAYBE - disk component is weak (component score 306)
```
-- **FULL** = every core test ran (does not mean fast)
-- **PARTIAL - not comparable** = some tests failed; don't compare this score to other machines
-- **KEEP / MAYBE / AVOID** = the recommendation, based on the local score plus a weakest-component floor
-- **INCOMPLETE** = CPU, memory, disk, or fsync data is missing
+- **FULL** = every core test ran (doesn't mean fast)
+- **PARTIAL — not comparable** = some test failed; don't compare this score to other machines
+- **Verdict** = decided by local score + a weakest-component floor: any component below 250 forces `AVOID`; below 500 caps at `MAYBE`
-## What it measures
+## What it measures & how it scores
-- **CPU**: single-thread and all-thread throughput
-- **Memory**: sequential read and write
-- **Disk**: sequential, 4K random at QD1 (queue depth 1 — close to typical scattered small I/O), and multi-job pressure
-- **fsync**: durable 4K writes — what actually reaches persistent storage, not what merely looks written
-- **Network**: a short Cloudflare reference check, **never counted in the score**
+- **CPU** single-thread + all-thread throughput
+- **Memory** sequential read + write
+- **Disk** sequential, 4K random at QD1 (queue depth 1 — typical scattered small I/O), and multi-job pressure
+- **fsync** durable 4K writes (what actually reaches disk, not just the memory cache)
+- **Network** Cloudflare sanity (10 MB down, 5 MB up of zero data; **not scored**)
```text
score = 40% CPU + 15% memory + 30% 4K QD1 disk + 15% fsync
```
-There's also a floor rule: any component score below 250 forces `AVOID`; below 500 caps the verdict at `MAYBE`. One bad weak spot drags the whole result.
-
-Formulas, reference constants, applicability limits, and known caveats live in [docs/scoring.md](docs/scoring.md).
-
-## Common commands
-
-```bash
-# Quick check, about 60 seconds
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --quick
-
-# Full test, about 5–8 minutes
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --full
-
-# Skip the network check (local score stays valid)
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --no-network
-
-# Write the result to JSON
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --json-file result.json
-
-# Broader network picture: Cloudflare + 3 public iperf3 regions
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --network-full
-```
-
-Every option: `bash abs.sh --lang en --help`
+Formulas, reference constants, and known caveats live in [docs/scoring.md](docs/scoring.md).
-## Comparing two VPSes
+## Comparing two VPSes — hard requirements
-Two scores are only directly comparable when **all** of these match:
+Two scores are directly comparable **only when all of these match**: ABS version, profile, `-t` threads, `-z` fio size, and `DIRECT` (default `1` = bypass the filesystem cache and measure real disk; `0` = through the cache, inflates numbers). Both runs must be `FULL`.
-- Same ABS version
-- Same profile (`--quick` / default / `--full`)
-- Same thread count (`-t`)
-- Same fio test size (`-z`)
-- Same `DIRECT` setting — `DIRECT=1` (default) bypasses the filesystem cache and measures the real disk; `DIRECT=0` goes through the cache, inflates numbers, and **cannot be compared against DIRECT=1**
-- Both runs are `FULL`; if either is `PARTIAL`, don't compare
+## Behavior notes
-## Terminal language vs. machine output
-
-- Terminal display defaults to Chinese; use `--lang en` or `ABS_LANG=en` for English
-- `results.tsv` metric names and `result.json` fields and values stay in English for scripting
-- Switching language never changes the score or the file formats
-
-## If dependency installation fails
-
-ABS prints a short reason, a repair hint when known, and the log path, then keeps going and produces an `INCOMPLETE` result instead of silently dying. On an interactive terminal it attaches `sudo` to `/dev/tty`, so `curl | bash` can still prompt for a password; headless runs use non-interactive sudo and fail fast. ABS does not run system-repair commands such as `dpkg --configure -a` on its own.
-
-## What the network check does
-
-The default is a Cloudflare sanity check only:
-
-- Downloads 10 MB from Cloudflare
-- Uploads 5 MB of all-zero data (synthetic, not a real file)
-- 45-second timeout per attempt, one automatic retry
-
-For a broader network picture, use `--network-full` or `--network-yabs` to add public iperf3 nodes.
-
-## Safety and file locations
-
-- ABS **never uploads results**
-- Logs live in a private random `/tmp/abs.*` directory
-- Disk test files go to a separate temporary directory and are removed afterward
-- Pre-existing `abs.test*` and `abs-dd.test` files are **not** deleted
-- If `fio` is missing, a rough `dd` check runs as a fallback but **is not scored**
-- Minimal Alpine images need bash first: `apk add bash`
+- **Install fails**: prints a reason + repair hint + log path, then keeps going and produces `INCOMPLETE` instead of silently dying. On interactive terminals `sudo` attaches to `/dev/tty`, so `curl | bash` can still prompt for a password; headless runs use non-interactive sudo and fail fast. ABS never runs `dpkg --configure -a` on its own.
+- **Files**: logs land in a private `/tmp/abs.*` dir; the fio test file lives in its own temp dir and is removed after; existing `abs.test*` and `abs-dd.test` files are **never** deleted.
+- **No fio**: falls back to a rough `dd` check, not scored.
+- **Alpine minimal**: install bash first — `apk add bash`.
+- **Language**: terminal output defaults to Chinese, `--lang en` or `ABS_LANG=en` switches; `results.tsv` and `result.json` stay in English for scripts.
**When GitHub Raw is unreachable from China**, use the jsDelivr mirror:
@@ -130,24 +75,6 @@ curl --resolve cdn.jsdelivr.net:443:104.16.175.226 \
-fsSL https://cdn.jsdelivr.net/gh/getaskclaw/abs@main/abs.sh | bash -s -- -n
```
-## Glossary
-
-| Term | Plain meaning |
-|---|---|
-| `fsync` | Forces data to actually hit the disk, not just the memory cache. It's what a database commit or file save really needs |
-| `QD1` | Queue depth 1 — one I/O request at a time, matching typical scattered small reads/writes |
-| `p95` | 95th-percentile latency — 95% of requests finish faster than this; shows the worst-tail speed |
-| `DIRECT` | fio's direct mode: 1 = bypass OS cache and measure real disk; 0 = through the cache (numbers get inflated) |
-| `OpenVZ` | A virtualization type; its disk numbers can be cache-inflated, verify with `--full` |
-
-## Development
-
-```bash
-python3 -m unittest -v tests/test_abs.py
-```
-
-GitHub Actions runs the suite on every push and pull request.
-
## License
MIT
diff --git a/README.md b/README.md
index 0f74d2a..051b4e8 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,11 @@
[English](README.en.md)
-在租一台 Linux VPS(或续费)之前跑一下,就能知道这机器 CPU 快不快、内存够不够、磁盘写起来稳不稳。ABS 把这些测一遍,给一个分数和一个结论:**保留、谨慎保留、不建议保留**,或者**测试不完整**(某些测试没跑成,别拿这个分数下结论)。
+租或续一台 Linux VPS 前跑一下,看 CPU 快不快、内存够不够、磁盘能不能真写。跑完给一个分数和一句结论:**保留 / 谨慎保留 / 不建议保留 / 测试不完整**。
+
+
+
+上图是一次真实跑分:先列机器配置,再逐项打印 CPU/内存/磁盘/fsync 数据,最后给出总分和「保留」结论。
## 跑一下
@@ -10,142 +14,67 @@
curl -fsSL https://askclaw.top/abs.sh | bash
```
-默认输出中文,装完依赖后 3 分钟内出结果。脚本可能用 `sudo` 装 `sysbench`、`fio`、`python3`、`curl`。
+默认输出中文,装完依赖后约 3 分钟出结果。脚本可能用 `sudo` 装 `sysbench`、`fio`、`python3`、`curl`。
```bash
-# 不安装缺失工具
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- -n
-
-# 英文输出
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --lang en
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- -n # 不安装缺失工具
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --lang en # 英文输出
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --quick # 快速版 ~60 秒
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --full # 完整版 5–8 分钟
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --json-file result.json
+curl -fsSL https://askclaw.top/abs.sh | bash -s -- --help # 全部选项
```
-> `curl | bash` 会直接执行下载内容。想先看看脚本内容:
+> `curl | bash` 直接执行下载内容。想先看脚本:
>
> ```bash
-> curl -fsSLo abs.sh https://askclaw.top/abs.sh
-> less abs.sh
-> bash abs.sh
+> curl -fsSLo abs.sh https://askclaw.top/abs.sh && less abs.sh && bash abs.sh
> ```
## 读结果
```text
-===================== ABS 结果 =====================
得分:完整,得分 1568(仅本地;网络参考分 136)
结论:谨慎保留 — 磁盘性能偏弱
-本地:完整,得分 1568(仅本地;网络不计分)
-网络:参考分 136(Cloudflare HTTP,仅供参考,不计分)
-====================================================
```
-- **完整** = 所有核心测试都跑完了(不代表快)
-- **不完整,不能比较** = 有测试没跑成,分数不能和其他机器直接比
-- **保留 / 谨慎保留 / 不建议保留** = 按本地分数和一个“最弱分项”红线给出的建议
-- **测试不完整** = CPU、内存、磁盘或 fsync 有缺项
+- **完整** = 所有核心测试都跑完(不代表快)
+- **不完整,不能比较** = 有测试没跑成,分数不能和其他机器比
+- **结论** = 按本地分数 + 最弱分项红线给的:分项 <250 直接「不建议保留」,<500 最多「谨慎保留」
-## 测了什么
+## 测了什么、怎么算分
-- **CPU**:单线程、全线程吞吐
-- **内存**:顺序读写
-- **磁盘**:顺序读写、4K 随机小 IO(QD1=队列深度 1,接近日常零散读写)、多线程压力
-- **fsync**:4K 强制落盘写入(数据库/文件真正写完的指标,比“看起来写完了”更接近真实持久化)
-- **网络**:Cloudflare 简单测速,仅供参考,**不计分**
+- **CPU** 单线程 + 全线程吞吐
+- **内存** 顺序读写
+- **磁盘** 顺序读写、4K 随机小 IO(QD1=队列深度 1,接近日常零散读写)、多线程压力
+- **fsync** 4K 强制落盘写入(真正写进磁盘的指标,不是只到内存缓存)
+- **网络** Cloudflare 简测(下载 10 MB、上传 5 MB 全零数据;仅供参考,**不计分**)
```text
总分 = 40% CPU + 15% 内存 + 30% 4K QD1 磁盘 + 15% fsync
```
-另外有一条底线规则:任一分项分数低于 250 直接「不建议保留」;低于 500 时最多只能到「谨慎保留」。也就是说,一个很弱的短板会拖累整体评价。
-
-评分公式、参考常数、适用边界和已知局限见 [docs/scoring.md](docs/scoring.md)。
-
-## 常用命令
-
-```bash
-# 快速检查,约 60 秒
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --quick
-
-# 完整测试,约 5–8 分钟
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --full
-
-# 跳过网络测速(本地分数仍有效)
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --no-network
-
-# 结果存成 JSON
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --json-file result.json
-
-# 网络测试加强版:Cloudflare + 3 个公共 iperf3 节点
-curl -fsSL https://askclaw.top/abs.sh | bash -s -- --network-full
-```
-
-全部选项:`bash abs.sh --help`
-
-## 比较两台 VPS
+公式细节、参考常数和已知局限见 [docs/scoring.md](docs/scoring.md)。
-两台机器**只有在以下条件全部一致时,分数才能直接比**:
+## 比较两台 VPS 的硬条件
-- ABS 版本相同
-- 用的测试模式相同(`--quick` / 默认 / `--full`)
-- 线程数 `-t` 相同
-- fio 测试文件大小 `-z` 相同
-- `DIRECT` 设置相同——`DIRECT=1`(默认)跳过文件系统缓存,直接测磁盘;`DIRECT=0` 走缓存,结果会虚高且**不能和 DIRECT=1 的结果比**
-- 两边都是「完整」结果;任意一边是「不完整,不能比较」就不要比
+两台机器分数**只在以下条件全部一致时可直接比**:ABS 版本、测试模式、`-t` 线程数、`-z` 测试文件大小、`DIRECT` 设置(默认 `1`=跳过系统缓存测真磁盘;`0`=走缓存,数值虚高)。两边都必须是「完整」结果。
-## 终端语言 vs. 机器输出
+## 行为说明
-- 终端显示默认中文,`--lang en` 或 `ABS_LANG=en` 切英文
-- `results.tsv` 的指标名、`result.json` 的字段和值始终是英文,方便脚本读取
-- 切语言不会改变分数和文件格式
+- **依赖装失败**:打印原因 + 修复建议 + 日志路径,继续跑出「不完整」结果,不无声退出。交互式终端里 `sudo` 接 `/dev/tty`,`curl | bash` 也能输密码;无终端用非交互 sudo、失败就跳过。不会自动跑 `dpkg --configure -a`。
+- **文件**:日志写 `/tmp/abs.*` 私有目录;磁盘测试文件用独立临时目录、跑完删掉;已有 `abs.test*`、`abs-dd.test` **不会**被删。
+- **没有 fio** 时退用 `dd` 粗测,不计入总分。
+- **Alpine 最小镜像**:先 `apk add bash`。
+- **终端默认中文**,`--lang en` 或 `ABS_LANG=en` 切英文;`results.tsv` / `result.json` 始终英文,方便脚本读。
-## 依赖安装失败怎么办
-
-ABS 会打印一个简短原因、一条修复建议和日志路径,然后继续跑出一个「不完整」结果,而不是无声退出。在交互式终端里,它把 `sudo` 接到 `/dev/tty`,所以 `curl | bash` 也能正常输密码;无人值守环境用非交互 sudo、失败就跳过。ABS 不会自动执行 `dpkg --configure -a` 这种系统级修复命令。
-
-## 网络检查做了什么
-
-默认只做 Cloudflare 简测:
-
-- 从 Cloudflare 下载 10 MB
-- 上传 5 MB 全零数据(测速用,不传真实文件)
-- 单次超时 45 秒,失败自动重试一次
-
-想要更完整的网络画像,用 `--network-full` 或 `--network-yabs` 加公共 iperf3 节点。
-
-## 安全和文件位置
-
-- ABS **不会上传跑分结果**
-- 日志写在 `/tmp/abs.*` 随机私有目录
-- 磁盘测试文件放在一个单独的临时目录,跑完删掉
-- 已存在的 `abs.test*`、`abs-dd.test` 文件**不会**被删除
-- 没有 `fio` 时退而用 `dd` 粗略测一下,但**不计入总分**
-- Alpine 最小镜像要先装 bash:`apk add bash`
-
-**中国网络拉不到 GitHub Raw 时**,用 jsDelivr 镜像:
+**国内拉不到 GitHub Raw** 时走 jsDelivr 镜像:
```bash
curl --resolve cdn.jsdelivr.net:443:104.16.175.226 \
-fsSL https://cdn.jsdelivr.net/gh/getaskclaw/abs@main/abs.sh | bash -s -- -n
```
-## 术语速查
-
-| 词 | 通俗意思 |
-|---|---|
-| `fsync` | 强制把数据真正写入磁盘(不是只写到内存缓存)。数据库、文件保存靠它才算写完 |
-| `QD1` | 队列深度 1:一次只发一个 IO 请求,接近日常零散小读写 |
-| `p95` | 95 分位延迟:95% 的请求比这个数快,反映“最坏那一批”的速度 |
-| `DIRECT` | fio 的直连模式:1=跳过系统缓存测真实磁盘,0=走缓存(数值会虚高) |
-| `OpenVZ` | 一种虚拟化方式;它的磁盘结果可能被缓存影响,建议再用 `--full` 验证 |
-
-## 开发
-
-```bash
-python3 -m unittest -v tests/test_abs.py
-```
-
-push 和 PR 都会触发 GitHub Actions 跑这套测试。
-
## License
MIT