辅助性能优化——长安链性能分析工具原理及用法

如何提升区块链系统性能是很多开发者都会关注的事,但是有些对区块链并非十分熟悉的开发者可能会感到没有头绪。长安链提供了性能分析工具帮助开发者梳理系统耗时,优化系统性能。下面对长安链性能分析工具原理及使用进行介绍。

一、 概述

time_counter.sh是长安链性能分析工具,可用于分析TBFT共识下,一轮完整共识过程中各个阶段的耗时情况,帮助用户了解底链性能。采用此性能分析工具,需要确保txpool、core、consensus、storage模块开启INFO级别的日志。

二、一轮共识过程

图 1 一轮共识流程图

1、整体流程

整体共识流程如上图所示,主要分为四个阶段,分别是Proposal, Prevote, Precommit, Commit,下面分别从共识主从节点视角介绍四个阶段的流程。

○ Proposal阶段:开始新一轮共识时,会选举出新的主节点,主节点的共识模块consensus会通知核心引擎模块core构造区块,共识模块收到新的区块后,将会构造提案并广播给其他的从节点,自己则进入到prevote阶段并广播prevote投票。

○ Proposal阶段:从节点的共识模块consensus收到主节点广播的提案后,将会通知自身的核心引擎模块core验证并执行区块,区块有效则进入到prevote阶段并广播自己的prevote投票。

○ Prevote阶段:主节点和从节点在prevote阶段收到2f+1张prevote投票后,将会进入到precommit阶段。

○ Precommit阶段:主节点和从节点进入到precommit阶段后,会构造并广播自己的到precommit投票,并将此时的共识状态写入wal中,确保重启时恢复到最新的共识状态,在收到2f+1张precommit投票后,将会进入到commit阶段。

○ Commit阶段:主节点和从节点进入到commit阶段后,会通知自身的核心引擎模块core提交区块,core调用存储模块将区块写入数据库,并通知共识模块进入下一高度区块的共识流程。

2、具体操作

此部分细化了上述整体流程中各个阶段的具体操作,性能分析工具会根据关键日志检索出各具体操作的耗时情况。

(1)主节点core模块构造区块和执行交易GenBlock

○ fetch: 交易池检索一批交易用于构造区块;

○ prune:交易池调用存储模块进行增量防重;

○ cache:在区块剪裁模式下,交易池会缓存fetch的交易,以便从节点缺失这些交易时,可向主节点请求。

○ filter:布谷鸟对txId进行格式和时间校验;

○ begin DB transaction:采用sql存储时,开启一个事务;

○ new snapshot:执行交易前,创建snapshot,作为这个区块执行时的快照;

○ vm:交易并行调度执行和DAG构建;

○ finalize block: 计算区块头中交易默克尔树根、读写集树根、DAG树根;

(2)主节点consensus模块构造提案GenProposal

○ signBlock: 计算区块哈希值和对区块签名;

○ signProposal: 对提案进行签名;

(3)从节点consensus模块验证提案ProcProposal

○ verify:验证主节点身份和验证提案签名;

(4)从节点core模块验证区块和执行交易VerifyBlock

○ blockSign: 验证区块签名;

○ vm: 按DAG顺序执行交易;

○ txVerify:core模块从交易池取出区块中交易和验证交易(对于区块中在交易池的交易只需比对交易哈希是否一致;对于区块中不在交易池中的交易会进行交易格式、权限、时间戳及防重检查);

○ txRoot:计算并校验三颗树根是否有效;

○ pool:区块剪裁模式下,对区块进行恢复;

○ consensusCheckUsed: 对于同步过来的区块,验证区块中QC是否有效;

(5)从节点Prevote阶段

○ 从节点prevote阶段主要操作包括构造自身的prevote投票并对收到的2f+1张prevote投票进行验签,及投票的网络广播

(6)主从节点Precommit阶段

○ 主从节点precommit阶段主要操作包括构造自身的precommit投票并对收到的2f+1张precommit投票进行验签,及投票的网络广播;

○ 共识状态写入wal文件:marshalData和marshalEntry为序列化共识状态操作,saveWal为将序列化结果写入wal文件;

(7)主从节点提交区块CommitBlock

○ check: core模块验证区块高度和区块前置哈希是否合法;

○ marshal:DB模块对区块和交易读写集进行序列化;

○ writeFile:DB模块序列化结果写入wal文件;

○ writeCache:DB模块对区块信息写缓存;

○ writeBatchChan:DB模块将区块信息放入顺序写channel;(快速写模式)

○ writeKvDB:DB模块将区块信息写入数据库;(普通写模式)

○ ss:清除snapshot;

○ conf:如果是配置交易则进行配置变更;

○ pool:交易池删除该区块中的交易并将旁枝区块中的交易重新放回交易池;

○ pubConEvent:对区块中交易事件进行通知;

○ filter:将区块中交易加入到布谷鸟过滤器;

○  other:添加监控记录;

(8)其他操作

○ 主要是模块间通过msgbus交互的操作、主节点广播proposal到从节点接受proposal间的网络传递等过程;

○ 还有部分操作,底链关键日志中并未进行记录;

三、 使用说明及分析

1、使用说明
(1)  从官网下载性能分析工具,并赋予可执行权限;
(2)  将各个共识节点包含想要分析的区块高度范围的日志拷贝到性能分析工具所在目录下,并将对应节点的日志命名为system.log.1, system.log.2, system.log.3,system.log.4等;
(3)  运行脚本工具,传入共识节点数目,起始区块高度,结束区块高度;
使用示例: 
./time_counter_2.3.1.sh 4 100 110

2、分析结果

图 2 各阶段各具体操作耗时分析结果

一轮共识流程整体耗时: 

core_commit_interval = (1)主节点core模块GenBlock时间 + (2)主节点consensus模块GenProposal时间 + (3)从节点consensus模块ProcProposal时间 + (4)从节点core模块VerifyBlock时间 + (5)从节点prevote阶段耗时 + (6)主从节点precommit阶段耗时 + (7)主从节点core模块CommitBlock时间 + (8) 其他操作时间

重叠时间说明: 

○ txpool_total 是主节点交易池中fetch、prune、cache三部分时间的加和;

○ core_gen_fetch 即交易池txpool_total的时间,core模块也进行了记录;

○ core_gen_total 是主节点core模块构造区块的整体时间;

○ consensus_total 是主节点consensus模块对区块签名和构造提案的时间;

○ consensus_proposal 是主节点proposal阶段整体耗时,包括了core模块构造区块和consensus模块构造提案的时间;

○ core_verify_total 是从节点core模块验证区块和执行交易的总时间;

○ storage_total 是存储写区块和读写集等信息的总时间;

○ core_commit_db 即存储模块storage_total的时间,core模块也进行了记录;

○ core_commit_total 是core模块提交区块的总时间;

○ core_commit_interval 是此区块的一轮共识总时间;

文档链接:https://docs.chainmaker.org.cn/v2.3.1/html/dev/性能分析工具.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13727.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从视频源头到边缘智能:实现端到端AI解决方案的技术挑战与实践

从视频源头到边缘智能:实现端到端AI解决方案的技术挑战与实践 引言端到端AI解决方案打通视频源头采集视频传输和存储边缘计算和盒子设备 SDK示列 引言 随着人工智能技术的快速发展,端到端AI解决方案在各个领域的应用越来越广泛。这些解决方案能够实现从…

DAY41:贪心算法(十)监控二叉树

文章目录 968.监控二叉树思路遍历顺序空节点处理情况列举 最开始的写法debug测试:travelsal的输出多了1 修改版二叉树注意点时间复杂度总结 968.监控二叉树 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及…

Spark学习(二)---Spark运行架构和核心概念

1.Spark运行架构 Spark框架的核心是一个计算引擎,它采用了master-slave的结构。 图形中的 Driver 表示 master, 负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。 1.1 核心组件 由此可以得出&#xf…

在原有J-IM基础上改造,开发记录方便日后学习,主要区别加入mysql持久化,但是不完善、仅供参考

在原有J-IM基础上改造,开发记录方便日后学习,主要区别加入mysql持久化,但是不完善、仅供参考 原站地址 https://gitee.com/xchao/j-im 改造后的地址 https://gitee.com/lbx_1397372495/jim-chat 本地启动测试 1,修改mysql 数…

Openlayers鹰眼OverviewMap自定义样式时鹰眼大小调整

Openlayers鹰眼OverviewMap自定义样式时可以根据关注区域的范围长宽比调整鹰眼控件的宽、高大小,让关注的区域始终全部在鹰眼中显示。 如鹰眼控件宽设置100px时 /*鹰眼控件中地图容器的样式*/ .ol-custom-overviewmap .ol-overviewmap-map{border:none;width: 100p…

计算机毕业论文选题推荐|软件工程|小程序系列选题

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于微信小程序和深度学习的宠物…

(css)盒子的阴影

(css)盒子的阴影 效果: 代码: box-shadow: inset 0 0 50px 2px #74eaff;解决参考:https://blog.csdn.net/weixin_52984349/article/details/125803515

界面组件DevExpress ASP.NET Core v23.1新版亮点 - 增强的数据可视化

DevExpress ASP.NET Core Controls使用强大的混合方法,结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NET Razor标记和服务器端ASP.NET Core Web API的生产力和简便性,提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的Material…

DAY40:贪心算法(九)单调递增的数字(贪心的思路)

文章目录 738.单调递增的数字(暴力解也需要看一下)暴力解写法注意:必须引入isIncreasing变量的原因 贪心思路遍历顺序 最开始的写法debug测试:逻辑错误 修改版debug测试int转化为字符串的原因to_string和stoi的用法 总结 738.单调…

MQTT资料储备

1、官网 https://mqtt.org/ MQTT 5.0官方协议 https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html 说明:官网可以获取到好多资料(比如常用软件、协议、usecase等) 2、安装部署EMQX 当前有好多MQTT服务器,初步选择了EM…

一键安装和卸载docker及docker-compose

代码: #!/bin/bashSYSTEMD_PATH/usr/lib/systemd/system/docker.service DOCKER_FILEdocker-20.10.23.tgz DOCKER_COMPOSE_FILEdocker-compose-plugin-2.15.1-3.el8.x86_64.rpm RED\E[1;31m GREEN\E[1;32m YELOW\E[1;33m SHAN\E[1;31;5m RES\E[0mfunction install_…

MySQL 8 group by 报错 this is incompatible with sql_mode=only_full_group_by

根据错误信息大概知道,是sql_mode参数设置为only_full_group_by的不兼容,如果select 的字段不在 group by 中,并且select 字段没有使用聚合函数(SUM,MAX等),这个sql查询是被mysql认为非法的,会报…