CometBFT QA 结果 v0.34.x

v0.34.x - 从 Tendermint Core 到 CometBFT

本节报告了我们在从 CometBFT 仓库发布首个 v0.34.x 版本之前所执行的 QA 流程。 相较于上一个 v0.34.x 版本 (即从 Informal Systems 的 Tendermint Core 分叉发布的 v0.34.26), 本次变更非常少,主要集中在将我们的 Tendermint Core 分叉重新品牌化为 CometBFT, 并仅在不会对与早期 v0.34.x Tendermint Core 版本的兼容性造成实质性破坏风险的地方进行修改。 也就是说,CometBFT 的 v0.34.x 版本(v0.34.27 及后续版本)应满足 以下与兼容性相关的要求:
  • 运维人员可以轻松将 v0.34.x 版本的 Tendermint Core 升级到 CometBFT。
  • 对于 v0.34.x 分支中的版本,从 Tendermint Core 升级到 CometBFT 可以无需协调地进行。
  • 运行 CometBFT 的节点必须能够与同一链上运行 Tendermint Core 的节点互操作, 前提是所有节点都运行 v0.34.x 版本。
这些 QA 测试重点关注第三点,而前两点则通过我们的 e2e 测试 进行验证。 测试所有现有 v0.34.x 版本与待测 CometBFT 发布候选版本的所有混合网络组合, 将耗费过多时间。 因此,我们的测试聚焦于最后一个 Tendermint Core 版本(v0.34.26) 以及待测的 CometBFT 发布候选版本。 我们运行了 200 节点测试,但没有运行 轮换节点测试。考虑到相对于此前在 v0.34.x 上执行的完整 QA 周期, 本次测试所涉及变更的数量和性质,运行后者的投入并不划算。 由于系统逻辑的改动极少,我们关注以下性能要求:
  • 待测的 CometBFT 发布候选版本与 Tendermint Core(即基线)表现相近
    • 在大规模使用时(即大型 CometBFT 节点网络中)
    • 在大规模混合网络中使用时(即部分节点运行 CometBFT, 其他节点运行较旧版本的 Tendermint Core)
因此,我们在以下网络上完整执行了 200 节点测试:
  • 一个由 200 个节点组成的同构测试网,所有节点都运行待测的 CometBFT 发布候选版本。
  • 一个混合网络,其中 1/2(200 个节点中的 99 个)运行待测的 CometBFT 发布候选版本, 其余 101 个节点运行 Tendermint Core v0.34.26。
  • 一个混合网络,其中 1/3(200 个节点中的 66 个)运行待测的 CometBFT 发布候选版本, 其余 134 个节点运行 Tendermint Core v0.34.26。
  • 一个混合网络,其中 2/3(200 个节点中的 133 个)运行待测的 CometBFT 发布候选版本, 其余 67 个节点运行 Tendermint Core v0.34.26。

配置与结果

在接下来的各节中,我们给出 200 节点测试 的结果。 每一节都会报告基线结果(供参考)、同构网络场景(全部为 CometBFT 节点), 以及 Tendermint Core 节点占比为 1/2、1/3 和 2/3 的混合网络结果。

饱和点

由于待测的 CometBFT 发布候选版本相较于 Tendermint Core v0.34.26 只有极少改动, 除了重新品牌化相关变更之外, 我们可以放心复用 v0.34.x 基线测试中关于 饱和点 的结果。 因此,我们将在所有实验中直接使用负载 (r=200,c=2) (说明见这里)。 我们也会包含基线结果,以便快速参考和比较。

实验

在这三个网络中的每一个上,测试都包含 4 个实验,目标是确保 获得的数据在不同实验之间保持一致。 在每个网络中,我们只选取一个具有代表性的运行结果进行展示和讨论。

延迟分析

对于每个网络,图表都绘制了该网络执行的四次实验。 我们可以看到,各次实验中的延迟呈现出可比较的模式。 每次执行的唯一标识符(UUID)显示在各图顶部。 我们将使用这些 UUID 来指代代表性运行结果。

CometBFT 同构网络

延迟

1/2 Tendermint Core - 1/2 CometBFT

延迟

1/3 Tendermint Core - 2/3 CometBFT

延迟

2/3 Tendermint Core - 1/3 CometBFT

全部延迟 tm2_3_cmt1_3

Prometheus 指标

本节报告从以下实验中提取出的关键 Prometheus 指标:
  • 基线结果:v0.34.x,于 2022 年 10 月获得,并在这里报告。
  • CometBFT 同构网络:UUID 以 be8c 开头的实验。
  • 混合网络,1/2 为 Tendermint Core v0.34.26、1/2 为 CometBFT:UUID 以 04ee 开头的实验。
  • 混合网络,1/3 为 Tendermint Core v0.34.26、2/3 为 CometBFT:UUID 以 fc5e 开头的实验。
  • 混合网络,2/3 为 Tendermint Core v0.34.26、1/3 为 CometBFT:UUID 以 4759 开头的实验。
我们会明确比较基线与同构场景,但除非混合网络实验展示出异常结果, 否则不会对其进行评论。

Mempool 大小

对于每个报告的实验,我们展示两张图。 第一张图展示在给定时刻,所有全节点 mempool 中 累计交易数量随时间的变化。 第二张图展示所有全节点平均值随时间的变化。

基线

mempool 累计值 mempool 平均值

CometBFT 同构网络

同构网络与基线在未处理交易数量方面结果相近。 同构网络 mempool 累计值 同构网络 mempool 平均值

1/2 Tendermint Core - 1/2 CometBFT

mempool 大小 平均 mempool 大小

1/3 Tendermint Core - 2/3 CometBFT

mempool 大小 平均 mempool 大小

2/3 Tendermint Core - 1/3 CometBFT

mempool_tm2_3_cmt_1_3 mempool-avg_tm2_3_cmt_1_3

每个高度的共识轮次

下图展示了完成每个高度并就区块达成一致所需的轮次。 数值 0 表示只需要一轮(轮次 ID 为 0),数值 1 表示需要两轮。

基线

可以看到,达到第 1 轮的情况会以一定频率出现。 轮次

CometBFT 同构网络

大多数高度都在第 0 轮完成。部分节点在不同时间点需要推进到第 1 轮, 还有少数节点在某一时刻甚至需要推进到第 2 轮。 这与我们在上方对应图表中观察到的 mempool 大小最大峰值出现的时间一致。 同构网络轮次

1/2 Tendermint Core - 1/2 CometBFT

对等节点

1/3 Tendermint Core - 2/3 CometBFT

对等节点

2/3 Tendermint Core - 1/3 CometBFT

轮次-tm2_3_cmt1_3

对等节点

下图展示了节点在整个实验过程中拥有的对等节点数量。 粗红色虚线表示 20 秒滑动窗口上的移动平均值。

基线

下图显示,整个实验过程中对等节点数量保持稳定。 种子节点通常具有更多的对等节点。 非种子节点之所以会达到 50 个以上的对等节点,是由于 #9548。 对等节点

CometBFT 同构网络

同构网络的结果与基线非常相似。 唯一的差异是,种子节点似乎会在实验中途失去一些对等节点。 不过,这不能归因于代码差异,因为这些差异主要是重新品牌化相关修改。 同构网络对等节点

1/2 Tendermint Core - 1/2 CometBFT

对等节点

1/3 Tendermint Core - 2/3 CometBFT

对等节点

2/3 Tendermint Core - 1/3 CometBFT

与同构场景类似,某些节点的对等节点数量存在一些波动。 不过,这些波动不会影响平均值。 对等节点-tm2_3_cmt1_3

每分钟生成的区块数、每分钟处理的交易数

下图展示了整个实验过程中区块生成速率与交易处理速率。 在两张图中,速率都基于 20 秒滑动窗口计算。 粗红色虚线显示速率的移动平均值。

基线

平均每分钟区块数在 10 到 40 之间波动。 高度 每分钟交易数峰值约为 30k。 总交易数

CometBFT 同构网络

展示区块生成速率的图表显示,区块生成速率围绕每分钟 20 个区块波动, 大多仍处于与基线相同的范围内。 同构网络高度速率 展示交易速率的图表显示,速率维持在每分钟约 20,000 笔交易, 峰值同样接近 30k。 同构网络交易速率

1/2 Tendermint Core - 1/2 CometBFT

高度速率 交易速率

1/3 Tendermint Core - 2/3 CometBFT

高度速率 交易速率

2/3 Tendermint Core - 1/3 CometBFT

高度速率 交易速率

常驻内存集大小

下图展示了所有被监控进程的常驻内存集大小(RSS)及其平均值。

基线

rss rss 平均值

CometBFT 同构网络

这是同构网络的图表,在整个实验期间,其稳定性略优于基线。 同构网络 rss 这是平均值图表。它围绕 560 MiB 波动,明显低于基线。 同构网络 rss 平均值

1/2 Tendermint Core - 1/2 CometBFT

rss rss 平均值

1/3 Tendermint Core - 2/3 CometBFT

rss rss 平均值

2/3 Tendermint Core - 1/3 CometBFT

rss rss 平均值

CPU 利用率

下图展示了节点的 load1,通常显示在 Unix top 命令第一行,以及它们的平均值。

基线

load1 load1 平均值

CometBFT 同构网络

与基线场景类似,同构网络中的负载低于 5,因此属于正常范围。 同构网络 load1 如预期一样,平均值图表看起来也很相似。 同构网络 load1 平均值

1/2 Tendermint Core - 1/2 CometBFT

load1 平均 load1

1/3 Tendermint Core - 2/3 CometBFT

load1 平均 load1

2/3 Tendermint Core - 1/3 CometBFT

load1 平均 load1

测试结果

基线结果与同构场景的对比表明,两种场景的数据相近,因此可以视为等价。 混合节点场景表明,网络在兼容的 Tendermint Core 与 CometBFT 版本混合运行时也能正常工作。 虽然这不是主要目标,但将其指标与同构场景和基线场景进行比较后可以发现结果相似,因此我们可以得出结论:混合兼容的 Tendermint Core 与 CometBFT 不会带来性能下降。 下表给出了这些测试的结论,以及实验中使用的提交版本。
场景日期版本结果
CometBFT 同构网络2023-02-083b783434f26b0e87994e6a77c5411927aad9ce3f通过
1/2 Tendermint Core
1/2 CometBFT
2023-02-14CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过
1/3 Tendermint Core
2/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过
2/3 Tendermint Core
1/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过

CometBFT QA 结果 v0.34.x

v0.34.x - 从 Tendermint Core 到 CometBFT

本节报告了我们在从 CometBFT 仓库发布首个 v0.34.x 版本之前所执行的 QA 流程。 相较于上一个 v0.34.x 版本 (即从 Informal Systems 的 Tendermint Core 分叉发布的 v0.34.26), 本次变更非常少,主要集中在将我们的 Tendermint Core 分叉重新品牌化为 CometBFT, 并仅在不会对与早期 v0.34.x Tendermint Core 版本的兼容性造成实质性破坏风险的地方进行修改。 也就是说,CometBFT 的 v0.34.x 版本(v0.34.27 及后续版本)应满足 以下与兼容性相关的要求:
  • 运维人员可以轻松将 v0.34.x 版本的 Tendermint Core 升级到 CometBFT。
  • 对于 v0.34.x 分支中的版本,从 Tendermint Core 升级到 CometBFT 可以无需协调地进行。
  • 运行 CometBFT 的节点必须能够与同一链上运行 Tendermint Core 的节点互操作, 前提是所有节点都运行 v0.34.x 版本。
这些 QA 测试重点关注第三点,而前两点则通过我们的 e2e 测试 进行验证。 测试所有现有 v0.34.x 版本与待测 CometBFT 发布候选版本的所有混合网络组合, 将耗费过多时间。 因此,我们的测试聚焦于最后一个 Tendermint Core 版本(v0.34.26) 以及待测的 CometBFT 发布候选版本。 我们运行了 200 节点测试,但没有运行 轮换节点测试。考虑到相对于此前在 v0.34.x 上执行的完整 QA 周期, 本次测试所涉及变更的数量和性质,运行后者的投入并不划算。 由于系统逻辑的改动极少,我们关注以下性能要求:
  • 待测的 CometBFT 发布候选版本与 Tendermint Core(即基线)表现相近
    • 在大规模使用时(即大型 CometBFT 节点网络中)
    • 在大规模混合网络中使用时(即部分节点运行 CometBFT, 其他节点运行较旧版本的 Tendermint Core)
因此,我们在以下网络上完整执行了 200 节点测试:
  • 一个由 200 个节点组成的同构测试网,所有节点都运行待测的 CometBFT 发布候选版本。
  • 一个混合网络,其中 1/2(200 个节点中的 99 个)运行待测的 CometBFT 发布候选版本, 其余 101 个节点运行 Tendermint Core v0.34.26。
  • 一个混合网络,其中 1/3(200 个节点中的 66 个)运行待测的 CometBFT 发布候选版本, 其余 134 个节点运行 Tendermint Core v0.34.26。
  • 一个混合网络,其中 2/3(200 个节点中的 133 个)运行待测的 CometBFT 发布候选版本, 其余 67 个节点运行 Tendermint Core v0.34.26。

配置与结果

在接下来的各节中,我们给出 200 节点测试 的结果。 每一节都会报告基线结果(供参考)、同构网络场景(全部为 CometBFT 节点), 以及 Tendermint Core 节点占比为 1/2、1/3 和 2/3 的混合网络结果。

饱和点

由于待测的 CometBFT 发布候选版本相较于 Tendermint Core v0.34.26 只有极少改动, 除了重新品牌化相关变更之外, 我们可以放心复用 v0.34.x 基线测试中关于 饱和点 的结果。 因此,我们将在所有实验中直接使用负载 (r=200,c=2) (说明见这里)。 我们也会包含基线结果,以便快速参考和比较。

实验

在这三个网络中的每一个上,测试都包含 4 个实验,目标是确保 获得的数据在不同实验之间保持一致。 在每个网络中,我们只选取一个具有代表性的运行结果进行展示和讨论。

延迟分析

对于每个网络,图表都绘制了该网络执行的四次实验。 我们可以看到,各次实验中的延迟呈现出可比较的模式。 每次执行的唯一标识符(UUID)显示在各图顶部。 我们将使用这些 UUID 来指代代表性运行结果。

CometBFT 同构网络

延迟

1/2 Tendermint Core - 1/2 CometBFT

延迟

1/3 Tendermint Core - 2/3 CometBFT

延迟

2/3 Tendermint Core - 1/3 CometBFT

全部延迟 tm2_3_cmt1_3

Prometheus 指标

本节报告从以下实验中提取出的关键 Prometheus 指标:
  • 基线结果:v0.34.x,于 2022 年 10 月获得,并在这里报告。
  • CometBFT 同构网络:UUID 以 be8c 开头的实验。
  • 混合网络,1/2 为 Tendermint Core v0.34.26、1/2 为 CometBFT:UUID 以 04ee 开头的实验。
  • 混合网络,1/3 为 Tendermint Core v0.34.26、2/3 为 CometBFT:UUID 以 fc5e 开头的实验。
  • 混合网络,2/3 为 Tendermint Core v0.34.26、1/3 为 CometBFT:UUID 以 4759 开头的实验。
我们会明确比较基线与同构场景,但除非混合网络实验展示出异常结果, 否则不会对其进行评论。

Mempool 大小

对于每个报告的实验,我们展示两张图。 第一张图展示在给定时刻,所有全节点 mempool 中 累计交易数量随时间的变化。 第二张图展示所有全节点平均值随时间的变化。

基线

mempool 累计值 mempool 平均值

CometBFT 同构网络

同构网络与基线在未处理交易数量方面结果相近。 同构网络 mempool 累计值 同构网络 mempool 平均值

1/2 Tendermint Core - 1/2 CometBFT

mempool 大小 平均 mempool 大小

1/3 Tendermint Core - 2/3 CometBFT

mempool 大小 平均 mempool 大小

2/3 Tendermint Core - 1/3 CometBFT

mempool_tm2_3_cmt_1_3 mempool-avg_tm2_3_cmt_1_3

每个高度的共识轮次

下图展示了完成每个高度并就区块达成一致所需的轮次。 数值 0 表示只需要一轮(轮次 ID 为 0),数值 1 表示需要两轮。

基线

可以看到,达到第 1 轮的情况会以一定频率出现。 轮次

CometBFT 同构网络

大多数高度都在第 0 轮完成。部分节点在不同时间点需要推进到第 1 轮, 还有少数节点在某一时刻甚至需要推进到第 2 轮。 这与我们在上方对应图表中观察到的 mempool 大小最大峰值出现的时间一致。 同构网络轮次

1/2 Tendermint Core - 1/2 CometBFT

对等节点

1/3 Tendermint Core - 2/3 CometBFT

对等节点

2/3 Tendermint Core - 1/3 CometBFT

轮次-tm2_3_cmt1_3

对等节点

下图展示了节点在整个实验过程中拥有的对等节点数量。 粗红色虚线表示 20 秒滑动窗口上的移动平均值。

基线

下图显示,整个实验过程中对等节点数量保持稳定。 种子节点通常具有更多的对等节点。 非种子节点之所以会达到 50 个以上的对等节点,是由于 #9548。 对等节点

CometBFT 同构网络

同构网络的结果与基线非常相似。 唯一的差异是,种子节点似乎会在实验中途失去一些对等节点。 不过,这不能归因于代码差异,因为这些差异主要是重新品牌化相关修改。 同构网络对等节点

1/2 Tendermint Core - 1/2 CometBFT

对等节点

1/3 Tendermint Core - 2/3 CometBFT

对等节点

2/3 Tendermint Core - 1/3 CometBFT

与同构场景类似,某些节点的对等节点数量存在一些波动。 不过,这些波动不会影响平均值。 对等节点-tm2_3_cmt1_3

每分钟生成的区块数、每分钟处理的交易数

下图展示了整个实验过程中区块生成速率与交易处理速率。 在两张图中,速率都基于 20 秒滑动窗口计算。 粗红色虚线显示速率的移动平均值。

基线

平均每分钟区块数在 10 到 40 之间波动。 高度 每分钟交易数峰值约为 30k。 总交易数

CometBFT 同构网络

展示区块生成速率的图表显示,区块生成速率围绕每分钟 20 个区块波动, 大多仍处于与基线相同的范围内。 同构网络高度速率 展示交易速率的图表显示,速率维持在每分钟约 20,000 笔交易, 峰值同样接近 30k。 同构网络交易速率

1/2 Tendermint Core - 1/2 CometBFT

高度速率 交易速率

1/3 Tendermint Core - 2/3 CometBFT

高度速率 交易速率

2/3 Tendermint Core - 1/3 CometBFT

高度速率 交易速率

常驻内存集大小

下图展示了所有被监控进程的常驻内存集大小(RSS)及其平均值。

基线

rss rss 平均值

CometBFT 同构网络

这是同构网络的图表,在整个实验期间,其稳定性略优于基线。 同构网络 rss 这是平均值图表。它围绕 560 MiB 波动,明显低于基线。 同构网络 rss 平均值

1/2 Tendermint Core - 1/2 CometBFT

rss rss 平均值

1/3 Tendermint Core - 2/3 CometBFT

rss rss 平均值

2/3 Tendermint Core - 1/3 CometBFT

rss rss 平均值

CPU 利用率

下图展示了节点的 load1,通常显示在 Unix top 命令第一行,以及它们的平均值。

基线

load1 load1 平均值

CometBFT 同构网络

与基线场景类似,同构网络中的负载低于 5,因此属于正常范围。 同构网络 load1 如预期一样,平均值图表看起来也很相似。 同构网络 load1 平均值

1/2 Tendermint Core - 1/2 CometBFT

load1 平均 load1

1/3 Tendermint Core - 2/3 CometBFT

load1 平均 load1

2/3 Tendermint Core - 1/3 CometBFT

load1 平均 load1

测试结果

基线结果与同构场景的对比表明,两种场景的数据相近,因此可以视为等价。 混合节点场景表明,网络在兼容的 Tendermint Core 与 CometBFT 版本混合运行时也能正常工作。 虽然这不是主要目标,但将其指标与同构场景和基线场景进行比较后可以发现结果相似,因此我们可以得出结论:混合兼容的 Tendermint Core 与 CometBFT 不会带来性能下降。 下表给出了这些测试的结论,以及实验中使用的提交版本。
场景日期版本结果
CometBFT 同构网络2023-02-083b783434f26b0e87994e6a77c5411927aad9ce3f通过
1/2 Tendermint Core
1/2 CometBFT
2023-02-14CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过
1/3 Tendermint Core
2/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过
2/3 Tendermint Core
1/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
通过

CometBFT QA Results v0.34.x

v0.34.x - From Tendermint Core to CometBFT

This section reports on the QA process we followed before releasing the first v0.34.x version from our CometBFT repository. The changes with respect to the last version of v0.34.x (namely v0.34.26, released from the Informal Systems’ Tendermint Core fork) are minimal, and focus on rebranding our fork of Tendermint Core to CometBFT in places where there is no substantial risk of breaking compatibility with earlier Tendermint Core versions of v0.34.x. Indeed, CometBFT versions of v0.34.x (v0.34.27 and subsequent) should fulfill the following compatibility-related requirements:
  • Operators can easily upgrade a v0.34.x version of Tendermint Core to CometBFT.
  • Upgrades from Tendermint Core to CometBFT can be uncoordinated for versions of the v0.34.x branch.
  • Nodes running CometBFT must be interoperable with those running Tendermint Core in the same chain, as long as all are running a v0.34.x version.
These QA tests focus on the third bullet, whereas the first two bullets are tested using our e2e tests. It would be prohibitively time-consuming to test mixed networks of all combinations of existing v0.34.x versions, combined with the CometBFT release candidate under test. Therefore, our testing focuses on the last Tendermint Core version (v0.34.26) and the CometBFT release candidate under test. We run the 200 node test, but not the rotating node test. The effort of running the latter is not justified given the amount and nature of the changes we are testing with respect to the full QA cycle run previously on v0.34.x. Since the changes to the system’s logic are minimal, we are interested in these performance requirements:
  • The CometBFT release candidate under test performs similarly to Tendermint Core (i.e., the baseline)
    • when used at scale (i.e., in a large network of CometBFT nodes)
    • when used at scale in a mixed network (i.e., some nodes are running CometBFT and others are running an older Tendermint Core version)
Therefore, we carry out a complete run of the 200-node test on the following networks:
  • A homogeneous 200-node testnet, where all nodes are running the CometBFT release candidate under test.
  • A mixed network where 1/2 (99 out of 200) of the nodes are running the CometBFT release candidate under test, and the rest (101 out of 200) are running Tendermint Core v0.34.26.
  • A mixed network where 1/3 (66 out of 200) of the nodes are running the CometBFT release candidate under test, and the rest (134 out of 200) are running Tendermint Core v0.34.26.
  • A mixed network where 2/3 (133 out of 200) of the nodes are running the CometBFT release candidate under test, and the rest (67 out of 200) are running Tendermint Core v0.34.26.

Configuration and Results

In the following sections we provide the results of the 200 node test. Each section reports the baseline results (for reference), the homogeneous network scenario (all CometBFT nodes), and the mixed networks with 1/2, 1/3, and 2/3 of Tendermint Core nodes.

Saturation Point

As the CometBFT release candidate under test has minimal changes with respect to Tendermint Core v0.34.26, other than the rebranding changes, we can confidently reuse the results from the v0.34.x baseline test regarding the saturation point. Therefore, we will simply use a load of (r=200,c=2) (see the explanation here) on all experiments. We also include the baseline results for quick reference and comparison.

Experiments

On each of the three networks, the test consists of 4 experiments, with the goal of ensuring the data obtained is consistent across experiments. On each of the networks, we pick only one representative run to present and discuss the results.

Examining Latencies

For each network, the figures plot the four experiments carried out with the network. We can see that the latencies follow comparable patterns across all experiments. Unique identifiers (UUIDs) for each execution are presented on top of each graph. We refer to these UUIDs to indicate the representative runs.

CometBFT Homogeneous Network

latencies

1/2 Tendermint Core - 1/2 CometBFT

latencies

1/3 Tendermint Core - 2/3 CometBFT

latencies

2/3 Tendermint Core - 1/3 CometBFT

latencies_all_tm2_3_cmt1_3

Prometheus Metrics

This section reports on the key Prometheus metrics extracted from the following experiments:
  • Baseline results: v0.34.x, obtained in October 2022 and reported here.
  • CometBFT homogeneous network: experiment with UUID starting with be8c.
  • Mixed network, 1/2 Tendermint Core v0.34.26 and 1/2 running CometBFT: experiment with UUID starting with 04ee.
  • Mixed network, 1/3 Tendermint Core v0.34.26 and 2/3 running CometBFT: experiment with UUID starting with fc5e.
  • Mixed network, 2/3 Tendermint Core v0.34.26 and 1/3 running CometBFT: experiment with UUID starting with 4759.
We make explicit comparisons between the baseline and the homogeneous setups, but refrain from commenting on the mixed network experiments unless they show some exceptional results.

Mempool Size

For each reported experiment, we show two graphs. The first shows the evolution over time of the cumulative number of transactions inside all full nodes’ mempools at a given time. The second one shows the evolution of the average over all full nodes.

Baseline

mempool-cumulative mempool-avg

CometBFT Homogeneous Network

The results for the homogeneous network and the baseline are similar in terms of outstanding transactions. mempool-cumulative-homogeneous mempool-avg-homogeneous

1/2 Tendermint Core - 1/2 CometBFT

mempool size average mempool size

1/3 Tendermint Core - 2/3 CometBFT

mempool size average mempool size

2/3 Tendermint Core - 1/3 CometBFT

mempool_tm2_3_cmt_1_3 mempool-avg_tm2_3_cmt_1_3

Consensus Rounds per Height

The following graphs show the rounds needed to complete each height and agree on a block. A value of 0 shows that only one round was required (with ID 0), and a value of 1 shows that two rounds were required.

Baseline

We can see that round 1 is reached with a certain frequency. rounds

CometBFT Homogeneous Network

Most heights finished in round 0. Some nodes needed to advance to round 1 at various moments, and a few nodes even needed to advance to round 2 at one point. This coincides with the time at which we observed the biggest peak in mempool size on the corresponding plot shown above. rounds-homogeneous

1/2 Tendermint Core - 1/2 CometBFT

peers

1/3 Tendermint Core - 2/3 CometBFT

peers

2/3 Tendermint Core - 1/3 CometBFT

rounds-tm2_3_cmt1_3

Peers

The following plots show how many peers a node had throughout the experiment. The thick red dashed line represents the moving average over a sliding window of 20 seconds.

Baseline

The following graph shows that the number of peers was stable throughout the experiment. Seed nodes typically have a higher number of peers. The fact that non-seed nodes reach more than 50 peers is due to #9548. peers

CometBFT Homogeneous Network

The results for the homogeneous network are very similar to the baseline. The only difference is that the seed nodes seem to lose peers in the middle of the experiment. However, this cannot be attributed to the differences in the code, which are mainly rebranding. peers-homogeneous

1/2 Tendermint Core - 1/2 CometBFT

peers

1/3 Tendermint Core - 2/3 CometBFT

peers

2/3 Tendermint Core - 1/3 CometBFT

As in the homogeneous case, there is some variation in the number of peers for some nodes. These, however, do not affect the average. peers-tm2_3_cmt1_3

Blocks Produced per Minute, Transactions Processed per Minute

The following plots show the rate of block production and the rate of transactions delivered throughout the experiments. In both graphs, rates are calculated over a sliding window of 20 seconds. The thick red dashed line shows the rates’ moving averages.

Baseline

The average number of blocks per minute oscillates between 10 and 40. heights The number of transactions per minute tops around 30k. total-txs

CometBFT Homogeneous Network

The plot showing the block production rate shows that the rate oscillates around 20 blocks per minute, mostly within the same range as the baseline. heights-homogeneous-rate The plot showing the transaction rate shows the rate stays around 20,000 transactions per minute, also topping around 30k. txs-homogeneous-rate

1/2 Tendermint Core - 1/2 CometBFT

height rate transaction rate

1/3 Tendermint Core - 2/3 CometBFT

height rate transaction rate

2/3 Tendermint Core - 1/3 CometBFT

height rate transaction rate

Memory Resident Set Size

The following graphs show the Resident Set Size (RSS) of all monitored processes and the average value.

Baseline

rss rss-avg

CometBFT Homogeneous Network

This is the plot for the homogeneous network, which is slightly more stable than the baseline over the time of the experiment. rss-homogeneous And this is the average plot. It oscillates around 560 MiB, which is noticeably lower than the baseline. rss-avg-homogeneous

1/2 Tendermint Core - 1/2 CometBFT

rss rss average

1/3 Tendermint Core - 2/3 CometBFT

rss rss average

2/3 Tendermint Core - 1/3 CometBFT

rss rss average

CPU Utilization

The following graphs show the load1 of nodes, as typically shown in the first line of the Unix top command, and their average value.

Baseline

load1 load1-avg

CometBFT Homogeneous Network

The load in the homogeneous network is, similarly to the baseline case, below 5 and, therefore, normal. load1-homogeneous As expected, the average plot also looks similar. load1-homogeneous-avg

1/2 Tendermint Core - 1/2 CometBFT

load1 average load1

1/3 Tendermint Core - 2/3 CometBFT

load1 average load1

2/3 Tendermint Core - 1/3 CometBFT

load1 average load1

Test Results

The comparison of the baseline results and the homogeneous case shows that both scenarios had similar numbers and are therefore equivalent. The mixed node cases show that networks operate normally with a mix of compatible Tendermint Core and CometBFT versions. Although not the main goal, a comparison of metric numbers with the homogeneous case and the baseline scenarios shows similar results, and therefore we can conclude that mixing compatible Tendermint Core and CometBFT introduces no performance degradation. A conclusion of these tests is shown in the following table, along with the commit versions used in the experiments.
ScenarioDateVersionResult
CometBFT Homogeneous Network2023-02-083b783434f26b0e87994e6a77c5411927aad9ce3fPass
1/2 Tendermint Core
1/2 CometBFT
2023-02-14CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
Pass
1/3 Tendermint Core
2/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
Pass
2/3 Tendermint Core
1/3 CometBFT
2023-02-08CometBFT: 3b783434f26b0e87994e6a77c5411927aad9ce3f
Tendermint Core: 66c2cb63416e66bff08e11f9088e21a0ed142790
Pass