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

这篇具有很好参考价值的文章主要介绍了辅助性能优化——长安链性能分析工具原理及用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、 概述

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文章来源地址https://www.toymoban.com/news/detail-542815.html

到了这里,关于辅助性能优化——长安链性能分析工具原理及用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端接口性能优化分析

    👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家 📕系列专栏:Spring源码、JUC源码 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 🍂博主正在努力完成2023计划中:源码溯源,一探究竟 📝联系方式:nhs19990716,加我进群

    2024年02月05日
    浏览(47)
  • Unity性能优化分析篇

    性能优化是游戏项目开发中一个重要环节。游戏帧率过低,手机发烫, 包体太大,低端机上跑不起来等, 这些都需要来做优化,不管过去,现在,未来,性能优化都是永恒的话题。 而性能优化首先要掌握的是性能分析,通过分析才能发现问题所在。性能分析对于游戏开发是必

    2024年02月03日
    浏览(61)
  • 性能优化之影响分析

    性能非常重要,而具体反映到我们的业务场景中,可能会有如下影响: 不利于用户留存 站点页面的展现速度非常影响用户体验,很多用户会因等待的不耐而放弃站点。 研究表明,47 % 的消费者希望页面能够在 2s 内打开。 移动端的页面应该在 3 秒钟内完成加载,若超过这个时

    2024年02月06日
    浏览(46)
  • 【万字解析】Webpack 优化构建性能(分析->优化)

    全局安装 webpack-bundle-analyzer 插件 运行 webpack-bundle-analyzer 开始打包,需要获取所有的依赖模块 搜索所有的依赖项,这需要占用一定的时间,即搜索时间,那么就确定了: 需要优化的第一个时间就是 搜索时间 。 解析所有的依赖模块(解析成浏览器可运行的代码) Webpack 根据

    2024年01月21日
    浏览(47)
  • [MySQL] SQL优化之性能分析

    🌈键盘敲烂,年薪30万🌈 目录 一、索引优化 1、索引是什么: 2、索引的数据结构: 3、索引种类: 4、sql分析(回表查询) 二、定位慢查询语句 1、慢查询日志 2、profile详情 3、explain执行计划(重点) 4、查看执行频次   1、索引是什么: 通过一些约束,快速查询到相应字段

    2024年02月05日
    浏览(52)
  • Unity性能优化与分析--GPU

    每一帧,Unity 都需要确定必须渲染哪些对象,然后创建绘制调用。绘制调用是调用图形 API 来绘制对象(如三角形),而批处理是要一起执行的一组绘制调用。 随着项目变得更加复杂,您需要用管线来优化 GPU 的工作负载。 通用渲染管线 (URP) 目前使用单通道前向渲染器将高质

    2024年03月15日
    浏览(53)
  • PyTorch 模型性能分析和优化 - 第 3 部分

    这 [1] 是关于使用 PyTorch Profiler 和 TensorBoard 分析和优化 PyTorch 模型主题的系列文章的第三部分。我们的目的是强调基于 GPU 的训练工作负载的性能分析和优化的好处及其对训练速度和成本的潜在影响。特别是,我们希望向所有机器学习开发人员展示 PyTorch Profiler 和 TensorBoard 等

    2024年02月10日
    浏览(37)
  • PyTorch 模型性能分析和优化 - 第 2 部分

    动动发财的小手,点个赞吧! 这是有关分析和优化在 GPU 上运行的 PyTorch 模型主题的系列文章的第二部分。在第一篇文章中,我们演示了使用 PyTorch Profiler 和 TensorBoard 迭代分析和优化 PyTorch 模型的过程以及巨大潜力。在这篇文章中,我们将重点关注 PyTorch 中由于使用急切执行

    2024年02月11日
    浏览(33)
  • Unreal Engine 虚幻引擎,性能分析,优化(二)

    目录 一、CPU 性能分析 二、GPU性能分析 三、Memory内存使用 一、CPU 性能分析 如渲染线程中出现 CPU 受限,原因可能是绘制调用过多。这是一个常见问题,美术师通常会将绘制调用进行组合,从而减少消耗(如:将多个墙壁组合为一个网格体)。实际消耗存在于多个区域中:

    2024年02月05日
    浏览(60)
  • 冒泡排序:原理、实现与性能分析

    引言 在编程世界中,排序算法是不可或缺的一部分。冒泡排序作为最基本的排序算法之一,虽然其效率并不是最高的,但其实现简单、易于理解的特点使得它成为学习和理解排序算法的入门之选。本文将详细介绍冒泡排序的原理、实现方法以及性能分析,帮助读者更好地掌握

    2024年02月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包