延迟瓶颈实测为本机 CPU 而非机房位置,跨站对比主指标改为 compute_ms
用户指出本机选新加坡是因为 Bitget 机房在新加坡。查证下来 ws.bitget.com 解析 到的是 CloudFront(dxotqhr62n6z4.cloudfront.net),落在新加坡 AS16509 (Amazon),即连的是 AWS 的 CDN 边缘而非 Bitget 自有机房。 腾讯云 ap-singapore(AS132203)到该边缘实测:ICMP 往返 2.1ms、TCP 握手 3.3ms、TLS 完成 9.0ms、首字节 87.8ms。首字节减 TLS 那约 79ms 是 CloudFront 回源开销,与我们的位置无关。 延迟构成(33 根样本):数据到达中位 506ms、信号计算中位 646ms、合计 1315ms。 随机房位置变化的只有那 2ms 往返,占总延迟 0.15%。而 646ms 的信号计算是每根 在 2000 根 1m 加 800 根 5m 上重建缠论结构,本机 2 核、2 个计算进程,三币同时 收盘时第三个还要排队——这才是有改善空间的一项。 因此: - 新增 deploy/netprobe.sh,把网络那一段单独量出来并入运行元数据。用到达 延迟去比两个机房等于用公斤秤称克,必须把可变的那段拿出来单独看。 - compare_sites.py 主指标改为 compute_ms,lag_data_ms 降为自检项(两站应当 接近;若差很多,先怀疑时钟而非网络)。元数据表加 nproc/cpu_model/往返。 - README 改写:第二台机器该测 CPU 规格而非地理位置,WORKERS 按核数减一给, 币数多于 worker 数时排队时间直接计入 compute_ms。 另修正站点标签:本机是腾讯云而非 Hetzner,sg-hetzner → sg-tencent,标错的 33 行数据已清掉重采。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,8 +1,17 @@
|
||||
"""对比两个(或多个)采集站点的数据差异。
|
||||
|
||||
部署第二台机器的目的就是这个:延迟是「本地接收 − 交易所 K 线收盘」,直接
|
||||
取决于机器到交易所的网络距离,换个地理位置这个数会变。而滑点里最大的一项
|
||||
是延迟漂移,所以站点选址本身就是一个可优化的参数。
|
||||
## 该比什么(2026-08-28 实测修正)
|
||||
|
||||
原以为该比地理位置,实测下来不是。腾讯云新加坡的延迟构成:
|
||||
|
||||
数据到达 506ms 其中网络仅 2ms 往返(ws.bitget.com 是 CloudFront 边缘)
|
||||
信号计算 646ms 本机 2 核,三币同时收盘还要排队
|
||||
合计 1315ms
|
||||
|
||||
换机房只能动那 2ms。**主指标是 compute_ms,不是 lag_data_ms。**
|
||||
|
||||
lag_data_ms 仍然要看,但作用是**自检**:两站应当几乎相同;若差很多,先怀疑
|
||||
时钟没对齐——那比网络差异的可能性大得多。
|
||||
|
||||
## 判读前必须先看的两件事
|
||||
|
||||
@@ -68,10 +77,21 @@ def show_meta(out_dirs: list[Path]) -> None:
|
||||
if not rows:
|
||||
return
|
||||
df = pd.DataFrame(rows)
|
||||
keep = [c for c in ("site", "clock_offset_ms", "git_commit", "git_dirty",
|
||||
"image_digest", "nproc", "mem_gb", "tz",
|
||||
# net 是嵌套 dict,摊平出关心的几项
|
||||
if "net" in df.columns:
|
||||
for k in ("icmp_min_ms", "tcp_connect_min_ms", "ttfb_min_ms",
|
||||
"self_org", "edge_org"):
|
||||
df[k] = df["net"].apply(
|
||||
lambda v, k=k: v.get(k) if isinstance(v, dict) else None)
|
||||
keep = [c for c in ("site", "clock_offset_ms", "nproc", "cpu_model",
|
||||
"icmp_min_ms", "ttfb_min_ms", "git_commit",
|
||||
"git_dirty", "image_digest", "mem_gb", "tz",
|
||||
"started_utc") if c in df.columns]
|
||||
print(df[keep].to_string(index=False))
|
||||
if "icmp_min_ms" in df and df["icmp_min_ms"].notna().any():
|
||||
x = df["icmp_min_ms"].astype(float)
|
||||
print(f"\n 到 Bitget 边缘的往返:{x.min():.1f}~{x.max():.1f}ms。"
|
||||
f"站间极差 {x.max() - x.min():.1f}ms 就是换机房的全部空间")
|
||||
if "clock_offset_ms" in df and df["clock_offset_ms"].notna().any():
|
||||
o = df["clock_offset_ms"].astype(float)
|
||||
spread = float(o.max() - o.min())
|
||||
@@ -94,7 +114,10 @@ def compare_latency(df: pd.DataFrame, col: str = "lag_data_ms") -> None:
|
||||
f"等第二台机器的数据到齐")
|
||||
return
|
||||
|
||||
print(f"\n########## 二、到达延迟({col}) ##########")
|
||||
label = {"compute_ms": "信号计算耗时(主指标,取决于 CPU)",
|
||||
"lag_data_ms": "数据到达延迟(自检项,两站应当接近)",
|
||||
"lag_signal_ms": "合计到可下单"}.get(col, col)
|
||||
print(f"\n########## {label}({col}) ##########")
|
||||
print("\n 全量(各站各自的样本,时段可能不同)")
|
||||
for s in sites:
|
||||
x = df[df["site"] == s][col].dropna().astype(float)
|
||||
@@ -176,7 +199,11 @@ def main() -> None:
|
||||
|
||||
show_meta([p for p in metas if p.is_dir()])
|
||||
df = load(lat)
|
||||
compare_latency(df)
|
||||
# compute_ms 是主指标:它是延迟里唯一有大幅改善空间的一项(646ms vs
|
||||
# 网络的 2ms)。lag_data_ms 放后面,作用是自检两站是否可比
|
||||
compare_latency(df, "compute_ms")
|
||||
compare_latency(df, "lag_data_ms")
|
||||
compare_latency(df, "lag_signal_ms")
|
||||
compare_drift(drf)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user