# benchmarking **Repository Path**: BCID-Okey/benchmarking ## Basic Information - **Project Name**: benchmarking - **Description**: BCID benchmarking for everything, TPS, CPU-Performance, Block-Data Increased Summarizing ... - **Primary Language**: NodeJS - **License**: ISC - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## BCID 性能测试报告 ### 测试硬件环境 #### cpu - product: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz - vendor: Intel Corp. - size: 3557MHz - capacity: 3800MHz - width: 64 bits #### Memory - description: System memory - physical id: 0 - size: 15GiB ### 交易验证与区块签名 下图为节点接收到大量交易并产生区块时 CPU 与 Memory 的历史监控,值得注意的是:即使 TPS 达到 1000 的情况下, Memory 始终维持在一个比较平缓的增长趋势,对已经处理的交易与事务的垃圾回收能力表现优秀: ![cpu][cpu] 下图为请求数量与 TPS 之间的关系对应表(测试的结果又点奇怪,可能是测试的机器有问题): ![js-tps][js-tps] 下图为部分 TPS 测试结果的截图,出于未知原因,TPS 有时能达到一个无法评估的超高水准: ![tps-bench][tps-bench] ### 节点常驻 虽然交易所产生的内存能得到一个比较好的控制,但随着区块🆚的增长,,区块所产生的内存似乎没能受到比较健康的控制。 下图为长时间运行且生成了超过 1 万个区块,并且疑似垃圾回收不完全从而产生内存泄露的节点的内存占用情况: ![memory][memory] ### 区块同步 进行区块同步测试的总区块数为 74000 个,以下为节点同步区块时 CPU 与 Memory 的监控结果: ![js-sync][js-sync] 出于未知原因,节点有时会出现无法同步区块的情况: ![sync-err][sync-err] 虽然原因未知,但目前正在排查中。出现这种情况后,重启节点即有所好转,但此时节点的同步速度又变得异常缓慢: ![sync-info1][sync-info1] ![sync-info2][sync-info2] ### 原子操作:加密与解密 对数据进行散列运算或者将一份数据进行加密或解密当属区块链应用中最基本的操作之一了。 以下是对节点应用的加密与解密操作的性能测试,包括同步、异步、校验、非校验以及工作量证明时的操作代价: ![whisper][whisper] 从左到右分别为测试函数,测试的循环次数,以及操作量级数(平均每个操作的消耗时间,单位为纳秒)。 ### 储存(Storage) 下图为 74000 个区块所占用的硬盘储存大小: ![storage][storage] 大部分区块都拥有庞大数量的交易数,所以该结果与实际使用时会有所出入。 ### Usage `yarn` or `npm install` - `yarn run-perf [RPC_ENDPOINT]`,监听一个开放的节点并计算当前区块的 tps。 - `yarn run-sync `,测试区块同步时的内存与处理器占用率。 - `yarn run-chart`,对测试结果绘制图表。 [cpu]: res/cpu.png [memory]: res/memory.png [js-sync]: res/jssync-bench.png [js-tps]: res/jstps-bench.png [tps-bench]: res/tps-bench.png [sync-err]: res/sync-err.png [sync-info1]: res/sync-info1.png [sync-info2]: res/sync-info2.png [whisper]: res/whisper.png [storage]: res/storage.png