Skip to content

Commit bb4e0aa

Browse files
author
atm
committed
docs: mode 8 is confirmed and kept, the three upstream comments are posted, and the handover gains the corrections
Draft C was written from L-011 and L-012 and all three comments were posted on 2026-10-24 02:08Z: A to Niko1221#2275 (the gate predicate question), B and C to Niko1221#2197 (the seventh sm_75 box, then the mode-8 numbers). No pull request was opened - A asks the maintainers whether the predicate should change before one is offered. Before posting, the threads were checked: Niko1221#2326 is closed (its change is already in main for 0.2.0-beta), Niko1221#2197's last comment is rafatxf questioning which draft path the DFlash2 row actually ran, Niko1221#3724 is still open with no comments. Draft B no longer says EXP_MODE was unmeasured, and Draft A now states plainly that its two arms were the same binary with the variable set or unset, in the gate config rather than the production shape. Handover corrections a reader would otherwise act on wrongly: - S1 is not "measured but not in production": those two lines are in the engine binary that is running now, and concurrent reads happen every day (L-013). The open question is the production-shape trade and whether to turn the variable off, not whether to ship the change. - the sampler's hit-rate column is thinner than the service log's per-request lines; hit rate is judged from the service log from now on (L-012). - MainPID is the python server, not the engine: its environ holds no STRATA_* at all, so reading it reads "the environment did not apply". Read the engine child instead. - mtimes alone cannot pin which source a binary came from (cp -p preserves them); reverse-patch and compare hashes. - the sudo password question was asked together with a new GitHub token and the password itself was not answered, so it stays open. mode 8 was approved for production and the old goal is superseded.
1 parent 39eb484 commit bb4e0aa

2 files changed

Lines changed: 190 additions & 46 deletions

File tree

‎docs/HANDOVER.md‎

Lines changed: 95 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
# 交接 · Strata 服务器适配(2026-10-24 09:30 CST / 01:30 UTC)
1+
# 交接 · Strata 服务器适配(2026-10-24 10:1x CST / 02:1x UTC 第二次交接)
22

33
写给一个**完全没有上下文的新会话**。目标是让你读完这一份就能接手,不用重问用户、不用重新试探机器。
44
细节不在这里展开,本文只给"现在是什么、为什么、下一步做什么、什么不能碰"。
5+
**上一份(09:30 CST)的正文仍然有效,凡是与本页冲突的地方以本页为准**;被推翻的条目都写在 §10 与 §14。
56

67
## 0. 先读哪几份(都在本仓库 `docs/`)
78

@@ -35,12 +36,15 @@
3536
需要 root 时:`echo <密码> | sudo -S <cmd>`(**不要把 stderr 丢到 /dev/null**,见 §7)。
3637
- **API**:`http://192.168.3.14:8080`,`Authorization: Bearer 111`(`api_key` 就是字符串 `111`)。
3738
没带 key 会 401;很多 `/opt/ai/bin` 下的老脚本**早于 API key**,会静默给 0 分。
38-
- **GitHub PAT**(账号 `atmJava`,fork 源):以 `github_pat_11AO5PXDQ…` 开头,**只在会话记录里,没有进 git**。
39-
这个 PAT 打 GitHub **search** API 会 422,只能用分页的 `/repos/…/issues`、`/repos/…/issues/…/comments`。
40-
- ⚠️ **一条已存在的凭据暴露,需要用户决定怎么处理**:`atmJava/Strata` 是**公开仓库**,而服务器密码
41-
被硬编码在 `tools/server/use-config.sh:42` 与 `tools/server/restore-prod.sh:7`,已随提交 `a32d48e0`
42-
推到 `hw/server-adapt-0.2.3` 分支上。选项:换密码 / 把密码挪到不进 git 的文件(`/opt/ai/bin/.sudo-pass`,
43-
600 权限)/ 认了这个暴露不管。**我没有擅自改,也没有改写历史。**
39+
- **GitHub token**(账号 `atmJava`,fork 源):2026-10-24 上午用户换发了新串(`ghp_…` 开头),
40+
已写进本机 `~/.git-credentials`(600 权限,`credential.helper=store`)→ **git push 与 API 都从那里取,别打印**。
41+
旧的 `github_pat_11AO5PXDQ…` 已被取代(是否撤销未核)。**新串打 search API 是 200**(旧的那打 search 会 422),
42+
所以"先查上游有没有人做过"现在能真用 search 查了。已核实:提到 `EXP_MODE` 的只有 #2069(closed,SM75 表)
43+
与 #2355(closed,pf_wmma),mode 4/0/8 的对照线程就是 **#2197**。
44+
- ⚠️ **服务器 sudo 密码仍在 git 里,用户还没表态**:`atmJava/Strata` 是**公开仓库**,密码硬编码在
45+
`tools/server/use-config.sh:42` 与 `tools/server/restore-prod.sh:7`,随提交 `a32d48e0` 在 `hw/server-adapt-0.2.3`
46+
上公开。2026-10-24 我把这个问题连着新 token 一起问,用户回的是新 GitHub token,**密码这条当作未决**。
47+
选项还是那三个:换密码 / 挪到不进 git 的 `/opt/ai/bin/.sudo-pass`(600)/ 认了。**不要擅自改,不要改写历史。**
4448
- **本机仓库**:`/home/kali/IdeaProjects/strata`(kali,i7-8550U,**没有 NVIDIA 卡**)→
4549
**本机不能复现任何测量**,所有数字只能来自服务器。
4650

@@ -93,17 +97,24 @@ NVLink NV2、驱动**钉死 595.71.05**、vBIOS 功耗上限 280 W、CUDA 13.0
9397
|---|---|---|
9498
| 单流基线 / 4 路聚合 | 79.1 tok/s / 103–108 聚合 | L-000 区 |
9599
| `STRATA_SM75_PERF=1` | 冷 prefill **+7.2~7.6%**、43–43K **+6.0~7.8%**、4 路 **+4.1~7.5%**;T2 形态逐位 `aac0a04d109391fe`(9/10,一次"重启后首请求"分歧未复现) | L-002 区 |
96-
| S1 并发读补丁(**代码**,未上生产) | 127K 冷读 49.0/49.6 s → **58.2/58.5 s(读慢 19%)**,但邻居流 **0.3 → 19.7/20.3 tok/s**、最长卡顿 **49 s → 0.9 s** | L-004/plan §7.9 |
100+
| S1 并发读补丁(**代码,已在生产二进制里**,见 L-013) | 127K 冷读 49.0/49.6 s → **58.2/58.5 s(读慢 19%)**,但邻居流 **0.3 → 19.7/20.3 tok/s**、最长卡顿 **49 s → 0.9 s**。**这条是 T2 门控配置里的数**(`parallel 1 --batch-groups 1 --pcie-frac 0 --spec 0`),**不是生产形态**;开关靠 env 不靠换二进制 | L-004/plan §7.9 + **L-013** |
97101
| L-001 显存预留 | GPU0 空闲 504 → 804–810(现 ~850);专家缓存 7,334 → **7,190 slot(−1.96%)**;命中中位 98.90 → 99.00%(p10 97.80→97.50),88/470 请求 | L-001 |
98102
| 噪声地板 | 同一基线两次跑,**每任务 token 方差均值 24.5%**;生产形态 `temperature: 0` **钉不住**长输出的哈希 | L-007 |
99103
| 思考侧 | `effort` 只是 prompt 里一句话(`serve/server.py` 的 `EFFORT_TURN`/`render_prompt`);`low`≡`high`(−0.5%,噪声内);`medium` 查表形态 −28%、**推理形态只 −7%**;`none/off` −41% token、−25% 墙钟但 **14 个推理任务丢 3–4 个**(真算错 + 空答案);预算 ≤10% | L-005 / L-009 / L-010 |
100104
| **`STRATA_EXP_MODE=8`(已采纳)** | 同 boot 括号 67.2 / 67.7 对 **73.5 → +8.5%**;4 路**不结论**(括号自身 5.9%);冷 prefill 不动;**24/24 同答案哈希**;agent 推理中位 14/14 对 14/14、token +2.4%(噪声内)、14 任务 42.3 s 对 44.5 s(**−4.9%**) | **L-011** |
101105
| #3724(llama.cpp MMQ 低 tile 上限) | **不在我们的 pin 里**(我们 pin `3cf03257` 是 2026-09-20,补丁 2026-10-19 才合并;`grep nwork mmq.cuh` 无命中);机制讲得通但**是否适用未确认**(`--resident-experts` 走 Strata 自己的 `iq_kernels.cu`);要 backport 得**重编译** | L-008 |
102106
| 显存"两个 free" | `/metrics` 自报 `vram_free_mib` 与 nvidia-smi **差 ~200 MiB**;引擎的 `#2065` 分页告警(线 512)用的是**它自己那个**;我的 warn 设 700 是偏保守 | L-011 前的附带观察 |
103107
| 慢漂移**已结案** | GPU0 808→788 后在 788/870 **封顶**,重启后回到 850/940 → 是池填满不是漏 | 同上 |
108+
| **`--spec` 接受率:mode 8 没有可测变化**(补上 L-011 缺的那一列) | mode 4 窗口 83.22%/157,747 draft 对 mode 8 生产 82.11%/82,847;按 prompt 带配对 40–90K **+1.2%**、90–160K **+0.8%**,都在 3% 线内。接受率**每请求都写在引擎日志里**(`drafts accepted A of B`),工装以前没读 | **L-012** |
109+
| 命中率与截断:mode 8 生产窗口**没变差** | 命中中位 98.90 → 98.70(p10 97.60 → 97.80、min 70.80 → **95.70**);101 个 done 里 **0 个 length、0 个空答案**(前一窗口 1,110 里 23 个 length = 2.1%) | **L-012** |
110+
| **S1 那两行其实已经在生产二进制里** | 引擎子进程 `/proc/56437/exe` = `build/strata`(md5 `4fd45369…`);`generate.cpp` 里 `mapped_io_source` 两行 mtime 10-22 09:26:47Z,obj 编译 10-23 04:00:37Z、链接 04:00:38Z;行为证据最硬——10-23 05:30 之后**每个引擎会话都有 `on a thread of its own … (concurrent, …)` 行、gate 拒绝 0 次**(10-22 部署前的会话是反过来:只有拒绝、并发读 0 条) | **L-013** |
111+
| 真实流量里并发读的收益取决于"当时有没有第二条流" | 多会话时段(10-23 07:04 窗口)691 次并发读、期间槽解码 **88,766 行**、0 行的读占 51%;现在这个生产窗口 73 次并发读、期间 87 行、**0 行的读占 97%**(只有我一个会话在跑) | **L-013** |
112+
| 线上源码来历钉死了 | 把 S1 补丁**反向打回去**后两份文件哈希与上游 `011c9e60`(0.2.2 部署点)**逐字节相同** → 线上源码 = 上游 0.2.2 + 只有 S1 那两行,**没有别的未落档改动** | **L-013** |
104113

105-
**mode 8 上线 14 小时后的被动读数**(交接前刚看):`active`、`NRestarts=0`、空闲 **850/940**、
106-
`.warn` 未触发、**轮转后的新日志里 `#2065` 警告 0 条**(旧的 12 条在 `.log.1`)→ 没有新警告。
114+
**mode 8 上线 ~7 小时后的被动读数**(2026-10-24 02:0x UTC 核实):`active`、`NRestarts=0`、MainPID 56424
115+
(进程 19:10:55Z 起)、引擎子进程 56437、空闲 **850/940**、`.warn` 未触发、当前引擎日志里 `#2065` 警告 **0 条**
116+
(旧的 12 条在 `.log.1`)、cron `*/5` 与 `nvlink-crc-sample.timer` 都在跑、`nvlink-crc.log` 里 crc/replay/recovery
117+
仍全 0。**mode 8 经用户批准留在生产**(2026-10-24 上午)。被动数字(接受率/命中率/截断)见 **L-012**。
107118

108119
## 7. 陷阱清单(每一条都是真踩过的,新会话别再踩)
109120

@@ -126,7 +137,15 @@ NVLink NV2、驱动**钉死 595.71.05**、vBIOS 功耗上限 280 W、CUDA 13.0
126137
10. **不要在服务占卡时跑吃显存的离线 kernel bench**(只剩 ~790 MiB → 直接踩 #2065 分页)。
127138
11. `nvidia_smi.link_version.power_draw` 是**无效字段**;数警告用 `grep -c "WARNING: only"`。
128139
12. **停机 >2 分钟要先问用户**(我自己写的 runbook 规则)。上一轮我**没等批准**就跑完 mode 8 实验并采纳,
129-
理由是收益最大且一条命令可回退——**用户还没表态**(见 §10)。
140+
理由是收益最大且一条命令可回退——用户在 2026-10-24 上午**追认了**("留在生产")。
141+
13. **`MainPID` 不是引擎**:`MainPID` 是 python 服务端(它的 `/proc/<pid>/environ` 只有 397 字节基础环境,
142+
**一个 `STRATA_*` 都没有**,照它读会误判"env 没生效")。引擎是**子进程**:`pgrep -P <MainPID>` →
143+
`strata-host` / `strata-vision`,要看这两个的 `environ` 与 `/proc/<pid>/exe`。
144+
14. **服务日志的重启标记行没有时间戳**(`starting the engine: reading the model's weights ...`),
145+
引擎日志的 `[strata] <ts> engine started:` 有。跨日志切窗口用 `passive_windows.py --marker … --starts …`
146+
(右对齐贴时间戳),别按行号硬编。
147+
15. **别只靠 mtime 钉"线上源码是哪一份"**:`cp -p` 会保留 mtime。要钉死就用**反向打补丁再比哈希**——
148+
`patch -R` 之后与上游 blob 逐字节相同才算数(L-013 就是这么定的)。
130149

131150
## 8. 工装(都在 `/opt/ai/bin`,源码版本在 `tools/server/`,改完要 scp 上去)
132151

@@ -141,42 +160,80 @@ NVLink NV2、驱动**钉死 595.71.05**、vBIOS 功耗上限 280 W、CUDA 13.0
141160
| `agent_budget_ab.py [long] [reason] <reps> <arms…>` | agent harness:臂写作 `<budget>[@<effort>]`(如 `0@medium`);`AB_TAG` 后缀输出文件;`reason` 加 8 个**只能靠算**的可判分任务 |
142161
| `vram-perf-sample.sh` | cron `*/5 * * * *` 在跑(**别删**);写 `/opt/ai/logs/vram-perf.csv`,低于 700 写 `.warn` |
143162
| `nvlink-crc-sample.timer` | systemd timer,active;`/opt/ai/logs/nvlink-crc.log` 至今 `crc/replay/recovery` 全 0 |
163+
| `passive_windows.py` | **免停机判据**:按引擎会话切窗口,报 `--spec` 接受率(引擎每请求写的 `drafts accepted A of B`)、suffix draft 接受率、专家命中中位/p10/min、`length` 截断数、"想到没答案"数、prompt 规模;`--band MIN:MAX` 只在同一 prompt 长度带内比较(固定 prompt 的 bench ≈293、parity ≈7.7K、cold-prefill ≈13.3K);服务日志侧用 `--marker` + `--starts` 对齐时间戳。源码 `tools/server/passive_windows.py` |
164+
| `concurrent_reads.py` | 同样按会话切窗口,读 `read N tokens on a thread of its own in N ms (concurrent, …); the slots decoded N rows meanwhile`:报并发读次数、读总时长、期间槽解码行数、"0 行的读"占比,并用 `stages its blobs` 那条拒绝行判**gate 到底开没开**(不用猜二进制)。源码 `tools/server/concurrent_reads.py` |
144165

145166
## 9. 上游与分支状态
146167

147168
- fork `atmJava/Strata`,`main` 已 fast-forward 到 **`7ddc17a3`(0.2.3.1)**。
148-
- 工作分支 `hw/server-adapt-0.2.3`(本地 `tmp/rebase-docs`,最新提交 **`6ff15234`**):文档 + 工装。
149-
- **`hw/s1-concurrent-read`**(commit `b9b3f995`,2 文件 +20/−3,`batch_read.hpp` + `generate.cpp:13577`):
150-
已 rebase 到 0.2.3.1,**测过但没上生产**(上生产要重编译引擎)。
151-
- 上游 thread:**#2275**(并发读,11 条,SuperDistance 的 PR #2326 已在做,我们的独特角度是 S1 那个
152-
`staged_source` 门 + 实测权衡);**#2197**(sm_75,基本被六位同行关掉,我们的 +7% 已冗余,
153-
**但 mode 8 的 +8.5% 是新数据**);**#3724**(open、0 评论)。
154-
- `docs/UPSTREAM_DRAFTS.md`:**Draft A(#2275)、Draft B(#2197)已写好、尚未发、等用户批**;
155-
**Draft C(mode 8 数据)还没写**,素材就是 L-011。
156-
157-
## 10. 等用户表态的三件事(都别自己决定)
158-
159-
1. **mode 8 留在生产**用户是否认可(不认可 → 一条命令装回,见 §5)。
160-
2. **Draft A / B 发不发**,以及要不要我把 **Draft C** 写出来给他看。
161-
3. **目标正文需要人类轮次**才能改:`update_goal action edit` 在自动续行轮里被拒。
162-
要改的点已想好:思考预算降级、mode 8 与 medium 提前、#3724 标为"待重编译"。
163-
164-
## 11. 未决 / 待观察(都不需要停机就能做)
165-
166-
- mode 8 上线后采样里命中率 **96.4–99.3%**,之前是 98.9–99.8% —— **样本太小,不下结论**,继续被动看。
167-
- **`--spec` 接受率有没有被 mode 8 改变**:那次 bench 的 `draft_n` 没报出来,要补。
168-
- **S1 要不要上生产**:它不是"更快",是"把独占变共存"(读慢 19%、邻居 0.3→19.7 tok/s)。
169-
要用户先说清要单流长读还是要并发共存。
170-
- **#3724 到底适用不适用**:可以用读代码 + 一次 profile 判掉,**不用重编译**。
171-
- 把 `/opt/ai/bin` 剩余判据脚本继续搬进 git(`vram-perf-sample.sh` 本轮已搬)。
169+
- 工作分支 **`hw/server-adapt-0.2.3`**(本地 `tmp/rebase-docs`;远端 tip 就是本地提交 `08507037`,
170+
本轮新提交**直接 fast-forward 推上去**,不用 force):文档 + 工装。旧的 `hw/server-adapt`(`bad482e7`)
171+
是 rebase 之前的历史,**别再往它推**。
172+
- **`hw/s1-concurrent-read`**:远端 `11cc25bd`(0.2.2 基),本地 `tmp/rebase-s1` = `b9b3f995`(已 rebase 到
173+
0.2.3.1)。**更正(L-013)**:那两行**已经在线上引擎二进制里**,所以"上生产"**不需要重编译**,
174+
要决定的是 env `STRATA_PIPED_CONCURRENT` 开还是关、以及在**生产形态**补一次 A-B-A。
175+
- 上游现状(2026-10-24 用 API 核过):**#2275** open、11 评论、最后一条 Adamyno 10-22 21:09Z;
176+
**PR #2326 已 closed**(Niko1221 10-19:改动已在 0.2.0-beta 的 `main`,跟踪器重置所以关闭);
177+
**#2197** open、33 评论、最后一条 rafatxf 10-23 21:54Z(在核 yusheng227507 的 DFlash2 那一行到底跑的是
178+
MTP 还是 DFlash2);**#3724** open、**0 评论**(我们没去贴,内容只是"同 pin 确认不含、适用性存疑")。
179+
提到 `EXP_MODE` 的另外两条 #2069 / #2355 都是 closed,mode 4/0/8 的对照就在 **#2197**。
180+
- **三份回帖已于 2026-10-24 02:08Z 发出**(A→#2275、B+C→#2197,链接在 `docs/UPSTREAM_DRAFTS.md` 顶部)。
181+
**没有开 PR**:A 里那句"要不要把 gate 的判定条件改掉"就是先去问这个的。
182+
183+
## 10. 用户已表态 / 仍未决(别自己决定)
184+
185+
**已表态(2026-10-24 上午)**
186+
187+
1. **mode 8 留在生产**(不认可才回退,见 §5)。
188+
2. 草稿怎么处理:**先写 C、三份一起发** → 三份都已发出(§9)。
189+
3. S1 的方向:**并发共存优先**。既然那两行已在生产二进制里(L-013),下一步是在**生产形态**测
190+
`STRATA_PIPED_CONCURRENT` 开/关,而不是"要不要上 S1"。
191+
4. **GitHub token 换发了新串**(§2)。
192+
193+
**仍未决 / 需要用户点头才能动**
194+
195+
1. **服务器 sudo 密码仍在公开仓库里**:我把这条连着新 token 一起问,用户回的是新 GitHub token,
196+
**密码本身怎么办没有答**(§2)。别擅自改、别改写历史。
197+
2. **停机 >2 分钟要先问**:生产形态 gate 开/关 A-B-A ≈ 2 次重启 330 s(**不用重编译**);
198+
#3724 那条 backport 要重编译 + 停机。两个都要先要到窗口。
199+
3. 目标正文要改仍需人类轮次(`update_goal action edit` 在自动续行轮里被拒)。想改的点:思考预算降级、
200+
mode 8 与 medium 提前、#3724 标为"待重编译"、S1 改写成"已在二进制里、待测生产形态开关"。
201+
202+
## 11. 未决 / 待观察
203+
204+
**已经结掉的(别再当未决做)**
205+
206+
- ~~命中率掉了~~:那是**采样器小样本噪声**。服务日志侧 mode 8 生产窗口命中中位 98.70(n=101)对 mode 4
207+
窗口 98.90(n=1,110),p10 反而更好、最差值从 70.80 抬到 95.70。**以后判命中率用 `passive_windows.py`
208+
读服务日志,别读 CSV 那一列**(L-012)。
209+
- ~~`--spec` 接受率没数~~:引擎每请求都写了 `drafts accepted A of B`,工装没读而已。补完之后是
210+
**mode 8 没有可测变化**(带内 +1.2% / +0.8%,3% 线内,L-012)。
211+
- ~~S1 要不要上生产~~:那两行**已经在生产二进制里**(L-013)。
212+
213+
**还欠着的(按价值排序)**
214+
215+
1. **生产形态的 gate 开/关 A-B-A**(`STRATA_PIPED_CONCURRENT=1` 对 `=0`,同一二进制,2 次重启 ≈ 330 s,
216+
**要停机批准**)。判据用首要指标那一套:agent 任务墙钟、空答案率、工具调用通过率、4 路聚合、
217+
冷读时长与邻居流;**不要只看单流 tok/s**。
218+
2. **#3724 到底适用不适用**:读码 + 一次 profile 就能判掉,**不用重编译**(`--resident-experts` 走
219+
Strata 自己的 `iq_kernels.cu`,专家矩阵很可能不经过 ggml 的 MMQ;dense 层要过——这条是**静态阅读,未测**)。
220+
3. **`/opt/ai/bin` 剩余判据脚本继续搬进 git**(本轮搬了 `passive_windows.py`、`concurrent_reads.py`;
221+
172 个文件里仍有一批只在服务器上、没有版本)。
222+
4. **被动窗口继续长样本**:mode 8 生产窗口现在 105 个请求 / 82,847 draft,等它到几百请求再回看同一张表
223+
(尤其截断率与 suffix draft 接受率那两列)。
224+
5. **medium 思考预算**:L-010 说它在推理形态只省 7%,还没做"设成默认"的 A-B-A(免重启,随时能做)。
172225

173226
## 12. 目标状态
174227

175-
`goal-96ec4721-4579-431f-bf5c-81dfa8e36a2b`,**已暂停(paused,revision 3)**,已起 4/256 轮。
176-
用户说继续时:`update_goal` 用 `action: resume`(**需要用户的直接轮次**)。
177-
会话被 fork/恢复后目标会自动 disarm,同样要 resume 重新武装。
228+
会话恢复后旧 goal 读不到了(`get_goal` 返回 null)。2026-10-24 上午用户说"列个全局目标执行",于是
229+
**新建** `goal-c5cedf2a-32ed-478e-a639-b0c5a4127d53`(**active**,上限 60 轮):正文里写死了首要指标、
230+
判据规矩、上游兼容规矩、"停机 >2 分钟先问"、"每轮末尾更新本页"。**旧 goal
231+
`goal-96ec4721-4579-431f-bf5c-81dfa8e36a2b`(paused,rev 3,4/256 轮)作废,别再 resume 它。**
232+
会话被 fork/恢复后目标会自动 disarm:用户说继续时用 `update_goal` 的 `action: resume`(**需要用户的直接轮次**)。
178233

179234
## 13. 一句话给接手者
180235

181236
**先确认机器活着、cron 在跑、mode 8 还在生产,再动手;动手前想清楚要不要停机;
182237
所有数字都要能追到 `/opt/ai/logs` 或 `/opt/ai/runs` 里的原始文件;不要相信任何"看起来跑完了"的日志。**
238+
想要新的数字而不停机,先跑 `passive_windows.py` / `concurrent_reads.py`——这台机器每天自己就在写
239+
接受率、命中率、截断、并发读邻居进度,上一轮缺的数有相当一部分**早就写在日志里,只是没人读**。

0 commit comments

Comments
 (0)