BT任务与文件健康度

健康度表示 BT 外部来源对数据的覆盖程度或平均副本数,不是本地文件的下载进度或完整性检查结果。本文介绍 v2.24 新增的文件健康度及相应的任务健康度提示。

在哪里查看

统计哪些来源

计算包括已连接 BT Peer 声称拥有的分块,以及 Peer 池中未连接完整 BT 种子的估算贡献。不计本地副本、长效种子和电驴来源。

每个估算的未连接完整种子按一份完整副本计算。该估算来自已知种子数减去已连接种子数(最低为零),不等同于直接采用 Tracker 报告的种子总数。

健康度允许超过 100%。低于 100% 表示本次统计范围仍有外部来源缺口;达到或超过 100% 表示按来源声明及估算已覆盖该范围,但不保证实际连接、传输或下载一定成功。本地文件即使已经完整,健康度仍可能为 0%。

先确定统计范围

对象尚未完成时完成后
BT任务当前待下载的分块整个任务的全部分块
单个文件尚未拥有的分块在该文件中的字节区间整个文件

任务的“完成”指没有待下载分块。只选择部分文件下载时,选中内容完成后,任务健康度也会改为统计整个任务,包括未选择的文件。

文件以涉及的全部分块是否已被程序判定为拥有来确定完成状态,包含校验通过和程序信任的已有数据。共享分块尚未被判定为拥有时,即使该文件对应的部分字节已写入磁盘,该区间仍计入剩余数据。是否勾选下载不改变文件健康度规则。

四种计算情况

先确定上述范围,再判断它是否全部有外部来源。任务按分块数量等权,文件按与分块相交的实际字节数加权。

设:

当 A = B 或 U > 0 时,认为本次范围全部有外部来源。

情况统计范围健康度
未完成,剩余部分有来源缺口待下载分块/剩余文件区间floor(100 × A / B)%
未完成,剩余部分全部有来源同上floor(100 × (R + U × B) / B)%
已完成,全范围有来源缺口全任务/全文件floor(100 × A / B)%
已完成,全范围全部有来源同上floor(100 × (R + U × B) / B)%

floor 表示向下取整。例如 2 / 3 显示为 66%。有缺口时计算覆盖率,不能用少数热门分块的很多副本掩盖缺失分块;全部覆盖后才计算平均副本数。

任务示例

任务共有四块,未完成时只有最后两块待下载。下表副本数仅指已连接外部 Peer,不计本地。

状态四块的副本数U计算健康度
未完成,剩余有缺口[5, 5, 0, 3]01 / 250%
未完成,剩余全覆盖[5, 5, 1, 3]0(1 + 3) / 2200%
已完成,外部有缺口[0, 0, 0, 3]01 / 425%
已完成,外部全覆盖[1, 1, 1, 3]06 / 4150%
未完成,有未连接完整种子[5, 5, 0, 3]1(3 + 1 × 2) / 2250%

文件示例

状态BARU健康度
未完成,剩余有缺口8 MiB3 MiB9 MiB037%
未完成,剩余全覆盖8 MiB8 MiB12 MiB0150%
已完成,外部有缺口8 MiB3 MiB9 MiB037%
已完成,外部全覆盖8 MiB8 MiB12 MiB0150%
未完成,有未连接完整种子8 MiB3 MiB9 MiB1212%

1 MiB = 1,048,576 字节。公式按实际字节计算,表中单位仅为方便阅读。

如果文件跨两块,分别占 1 MiB 和 3 MiB,只有第一块有来源且 U = 0,文件健康度为 25%,不是按两块等权得到的 50%。因此,即使任务只有一个文件,最后一块长度差异也可能使任务健康度与文件健康度不同。选择性下载还可能使两者采用不同的统计范围。

如何阅读悬浮提示

提示会说明完成状态、统计范围是否全部有外部来源、当前使用的公式,以及实际分子和分母。任务操作数单位是分块,文件操作数单位是字节。操作数来自同一份统计结果,不从整数百分比反推。

例如文件剩余 8 MiB,全部有外部来源,副本总量为 12 MiB,则显示副本量与剩余量之比为 150%。文件提示同时提供可读容量和括号中的精确字节数;精确数字使用逗号分组,括号内不附加 B 后缀。全覆盖公式的分子已包含未连接完整种子的估算贡献。

提示底部说明:已计入未连接完整 BT 种子的估算贡献,不计入本地副本。

特殊情况与变化