8 月 28 日,我们进行了第 4 次测试 (DR4)。继上次测试后,我们取得了非常大的进展,接下来我会详加说明。虽然过程缓慢,但无疑我们离备受期待的 Tour de SOL 第 1 阶段越来越近了。
DR4 的目的是进一步迭代,查看测试网在额定交易负载下的稳定性。上次测试 (DR3) 持续了 5 小时左右,之后投票才开始出现问题。如有兴趣详细、深入地了解我们上次的测试汇报,请查看此处[1]。
本次测试最有趣的一点是软件完全按 DR4 的预期运行,实际上仅在参与者关闭验证者后才停止运行。这意味着”它可一直正常运行”(只要不人为将它关闭)!
让我们简要回顾一下 DR3 和 DR4 之间变化:
启用了快照,这意味着验证者只需数分钟而非数小时即可与集群同步
MTU 问题 – 该问题一直影响着阶段 0 的吞吐量,迄今为止我们一直在对此问题制定逐步的解决方案。在此阶段,我们取得了进一步的改进,预期可提高稳定性和交易吞吐量
各种可用性修复 – 更有用的错误和验证者日志可用于执行分析
其他 – solana-wallet 现更名为 solana
本次测试的参数
此次测试所采用的参数与上次相似。我们希望在第 0 阶段结束之前,参数保持相对一致。
使用了 3 个 Solana 节点来引导集群,预计很快将加入 39 个外部验证者
一开始,所有节点接收 1000 个 SOL,建议保持 0.5 SOL 的权益(与 Solana 节点匹配)
由于目的是维持一个闲置集群,因此无需 GPU。话虽如此,计划是在本次运行期间将峰值 tps 提高到 1000 到 3000 左右
所用节点都使用 Mavericks v0.18.0 版本[2]
测试详细经过
按照惯例,我们在上午 8 点(太平洋标准时间)启动了网络。新老验证者都有加入我们,在此我向熬夜参与这次行动的大洋洲参与者们表示感谢!很高兴这次测试能通过这种形式而具有一定代表性。
几乎在网络刚开始启动后,验证者们就已经感受到了启用快照的好处。
但不久我们就发现,这并不完美,部分验证者节点开始出现恐慌。这是由于快照中存在的 bug 导致无法正确还原验证者状态。
但总体而言,网络运行良好,我们看到与我们内部各次测试运行时相比,网络在无需权限的环境中运行时的稳定性和性能存在许多相似之处。
我想,由于 DR4 中的显著改进,很快就有验证者急切地询问我们何时按下红色按钮来提高交易吞吐量。然而,为确保稳定性,我们首先让网络闲置时间稍长一点。网络成功地做到了这一点。在下午 1 点左右(太平洋标准时间),运行时间已超过 5 小时,比 DR3 的时间更长!此时,我们对网络闲置的稳定性感到满意,于是我们最终按下了红色按钮,插入了几次大量突发交易,看看网络有何反应。因此,如果你查看过本次测试的完整日志,你会发现图中存在一些无规律的 tps 峰值。这只是个开始,我们成功将 tps 维持在刚好 4,000 以下。
由于在空闲状态下网络大体稳定(不像在之前的测试中,我们大多忙于处理验证者加入问题),这次我们可以较为悠闲地与验证者谈论以下事项:
对验证者进行培训,帮助他们了解 Solana 网络独有的特色、命令和功能
讨论如何提高便利性,例如使验证者能轻松确定任何特定时刻总权益中有多少已预热/仍在预热
DR4 进行 14 小时后,我们达到了两个新的里程碑:
验证者终于得睡觉了!
网络运行的时间足够长,直到亚太地区的正常工作时间,因此那里的验证者最终有机会加入测试网!
我们本打算让测试网运行 24 小时后才将其关闭,然后分析数据和开始处理发现的问题。但是,在验证者开始睡觉时,一些问题开始出现了。
问题原因在于一些具有活跃权益的节点开始停止运行。我们醒来后发现网络在凌晨 3 点左右停止运行,所以整个测试持续时间长达 19 个小时!
下面是网络停止运行的原因。由于仅有 52% 的权益在线,因此网络无法继续正常运行(达成共识需要 66.6% 的权益):
再次感谢所有参与的 39 位验证者[3],是你们让这次网络测试成功进行。再和大家分享最后一张截图,感谢社区始终这么具有幽默气氛。
发现的主要 bug
由于存在 https://github.com/solana-labs/solana/issues/5568 中所述的问题,大量验证者很难加入集群。我们在 DR4 之前已注意到了此问题,但觉得它并不严重。
次要指标报告问题:https://github.com/solana-labs/solana/issues/5718
改进 bench-tps 客户端筛选:https://github.com/solana-labs/solana/issues/5719
浏览器的各种小问题:
https://github.com/solana-labs/blockexplorer/issue…
https://github.com/solana-labs/blockexplorer/pull/…
https://github.com/solana-labs/blockexplorer/issue…
https://github.com/solana-labs/solana/issues/5723
CUDA 工作流问题:https://github.com/solana-labs/solana/issues/5722
指标服务器需要更多 CPU:https://github.com/solana-labs/solana/issues/5724
CUDA 内存固定疑似会导致问题:https://github.com/solana-labs/solana/issues/5710
NAT 配置不当问题仍未解决:https://github.com/solana-labs/solana/issues/3915
节点启动时出现意外的 RPC 服务故障:https://github.com/solana-labs/solana/issues/5725
对浏览器正常运行时间计算的改进:https://github.com/solana-labs/blockexplorer/issue…
向 getEpochInfo 添加 absoluteSlot,使验证者日志监控更加容易:https://github.com/solana-labs/solana/issues/5726
改进创世账本不匹配的错误消息:https://github.com/solana-labs/solana/issues/5727
考虑向 solana-cli 添加一个验证者正常运行时间命令:https://github.com/solana-labs/solana/issues/5728
solana-cli 默认应在 SOL 中显示帐户余额:https://github.com/solana-labs/solana/issues/5729
将 solana-validator-info 合并到 solana-cli 中:https://github.com/solana-labs/solana/issues/5730
改进 solana-cli default 默认配置消息 https://github.com/solana-labs/solana/issues/5734
记录共识丢失时用于恢复集群的过程:https://github.com/solana-labs/solana/issues/5735
改善 solana-cli –help 输出:https://github.com/solana-labs/solana/issues/5736
记录停用权益的过程:https://github.com/solana-labs/solana/issues/5737
显示有关权益预热/冷却状态的更多信息:https://github.com/solana-labs/solana/issues/5738
提高验证者已激活权益与总权益对比的可视效果:https://github.com/solana-labs/solana/issues/5739
后续步骤和结语
好消息 – 在 DR4 中,我们大幅降低了 10 月份 MVP 主网软启动的风险。集群在空闲状态下可良好运行,只要验证者不离开,集群应该就能持续正常运行。这实际上是我们在开始逐步推出更多功能之前希望 MVP 主网能够实现的目标。
坏消息 – 我们内部起初计划在 9 月初开始 Tour de SOL 第 1 阶段,但由于在 DR4 中发现了问题,该计划明显无法如期进行。造成此情况的因素有很多,主要问题是:
高 TPS 时网络的稳定性仍达不到我们的预期,修复此问题的时间目前尚不明确。导致稳定性下降的根本原因在于成功完成 DR4 所必需的网络重写步骤。这是此次成功背后的一个副作用!
快照需要更多的工作来修复 DR4 期间许多人遇到的一些 bug。
在我们自信地开始 Tour de SOL 第 1 阶段之前,我们想在将 tps 和 GPU 设为最大的情况下至少进行一次测试。目前我们尚未做到这一点,因此我们计划在阶段 0 期间再进行一次测试。下一次测试的日期拟为 9 月 23 日。
假如下一次测试顺利,我们有望在 9 月末或 10 月初开始 Tour de SOL 第 1 阶段。虽然这个日程计划对我们来说仍然很激进,但我们希望确保在合适的时间处理发现的问题。我们明白,参与进来的每个人都牺牲了自己的个人时间,而且我们确信上一次测试中发现的问题理应在开始下一次测试之前得到解决。此外,我们内部对我们所做的项目也引以为豪,尽管只是半成品的测试,我们仍然希望能够全力以赴,而不是推诿卸责,将问题留给旁人。