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

news2024/12/23 22:50:29

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

一、 概述

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.coloradmin.cn/o/727834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows兼容性设置图文教程,Windows兼容模式怎么设置?服务器兼容是什么意思?服务器兼容性怎么改?

兼容性(compatibility)是指硬件之间、软件之间或是软硬件组合系统之间的相互协调工作的程度。兼容的概念比较广,相对于硬件来说,几种不同的电脑部件,如CPU、主板、显示卡等,如果在工作时能够相互配合、稳定…

备战秋招004(20230706)

文章目录 前言一、今天学习了什么?二、关于问题的答案1.SE 总结 前言 提示:这里为每天自己的学习内容心情总结; Learn By Doing,Now or Never,Writing is organized thinking. 目前的想法是,根据 Java G…

三种方法将视频转换为AVI格式,与大家分享!

将视频转换为AVI格式是常见的需求,因为AVI格式具有广泛的兼容性和可编辑性。本文将介绍三种常用的方法,包括记灵在线工具、剪映和格式工厂。这些方法简单易行,帮助您将视频文件快速转换为AVI格式,满足不同的需求。 方法一&#x…

EasyCVR接入大量设备级联后出现分组加载异常是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

接口自动化测试实战之pytest框架+allure讲解

一、前言 本文章主要会讲解Python中pytest框架的讲解,介绍什么是pytest、为何要测试、为何使用以及参考和扩展等等,话不多说,咱们直接进入主题哟。 二、pytest讲解 2.1 什么是pytest? pytest是一款单元测试框架,在…

尚硅谷Docker实战教程-笔记10【高级篇,Docker微服务实战】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】…

浅析住宅小区电动车充电桩的电气设计与平台管理系统

安科瑞电气股份有限公司 上海嘉定201801 摘要:根据目前对于新能源汽车发展规划及政策,以及国内外充电设施的主要类型和技术参数。论述地下车库电动汽车充电桩的供配电系统的设计及设计过程中需要注意的一些问题。 关键词:充电桩&#xff1b…

力扣题库刷题笔记36--有效的数独

1、题目如下: 2、个人Python代码实现如下: 3、个人Python代码思路: 先放一个AI解释的思路: 个人理解,本题思路其实很简单,判断每一行、每一列、每一个3*3的子数独是否存在重复数字,如果存在则返…

不用转化器把pdf转化成Excel,分享两个实用方法!

将PDF文件转换为Excel格式通常是进行数据提取和分析的重要步骤。尽管市面上有许多PDF转Excel的工具,但本文将介绍两种无需使用转换器的实用方法,分别是复制粘贴法和使用记灵在线工具。这些方法简单易行,帮助您快速将PDF中的数据提取到Excel表…

第21章:索引优化与查询优化

一、索引优化与查询优化 1.什么情况下要进行数据库调优 ①索引失效,没有充分利用到索引---索引建立 ②关联查询太多join---SQL优化 ③服务器调优和各个参数的设置---调整my.cnf ④数据过多---分库分表 2.SQL优化的技术 ①物理查询优化:通过索引和…

图论算法:DFS求有向图或无向图两点间所有路径及Dijkstra算法求最短路径

1、目的 1)根据有向图获取指定起终点的所有路径; 2)直接求解两点间最短路径。 2、示例效果 2.1 原始数据 路线起终点整理如下: // 共计12个顶点,19条边。 (起点,终点,1)最后的1代表起点终点是连通的。 起点,终点,1:2 4 1 起点,终点,1:9 10 1 起点,终点,1:…

Java面向对象程序开发——网络编程入门知识

​ 文章目录 软件结构网络通信协议协议分类网络编程三要素TCP通信程序概述Socket类构造方法成员方法 ServerSocket类构造方法成员方法 简单的TCP网络程序客户端向服务器发送数据服务器端 文件上传服务端实现:客户端实现: BIO 、 NIO 与 AIO 软件结构 C…

Unity3D如何在一个项目建多个场景

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 设置多个场景 您可以添加多个场景、编辑查看场景的方式以及更改场景设置。 要创建新场景,请参阅创建、加载和保存场景。 添加场景 有两种方法可以向项目添加新场景&…

react—路由

1. 注册路由 路由的注册和vue框架中类似,注册过后需要在地址栏输入你想要进去的页面。 // 引入 import { createRoot } from "react-dom/client"; import { createBrowserRouter,RouterProvider,Route,Link }from "react-router-dom"; // 引入…

springboot分组校验

1、分组校验场景 主要2个场景,场景1:多个接口使用相同的入参,不同接口需要校验的内容不同。场景2:针对同一个接口,某个值(一般是类型)的不同会影响其他值的内容,此时需要根据某个值的…

【Linux】设置 命令 --help 帮助文件为中文

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 前言设置系统默认语言为中文安装man-…

【C#】并行编程实战:使用 PLINQ(2)

PLINQ 是语言集成查询(Language Integrate Query , LINQ)的并行实现(P 表示并行)。本章将继续介绍其编程的各个方面以及与之相关的一些优缺点。 本文的主要内容为 PLINQ 中的合并选项以及抛出和处理异常。 本教程对应学习工程&…

Xshell连接不上虚拟机的解决办法(给他最后一次机会)

VM还原默认设置 如果你之前的操作都没问题的话Xshell还是连接不上我们的虚拟机,可以试试这个方法 点VM中的 编辑–>虚拟网络编辑器–还原默认设置**(这个方法也特别有效)** 注意还原好以后我们主要看一下VM8的 这是没还原之前的NAT设置 没还原之前的DHCP设置…

如何在Windows 10中创建引导到UEFI固件设置的快捷方式

大多数计算机都有一个特定的键,当计算机启动时按下该键,用户可以访问UEFI(固件)设置。然而,我们经常在错过给定的时间段时按键太晚,因为笔记本电脑默认情况下只需等待几秒钟就可以启动到 Windows。 另一个引导到 UEFI 设置的选项是重新启动到高级启动选项,然后从那里开…

centos6.X防火墙110.42.2

防火墙机制介绍122.228.84 Centos5.X 6.X的防火墙机制为什么称为iptables呢? 因为这个防火墙软件里面有多个表格(table),每个表格都定义自己的默认策略与规则,且每个表用途都不同。 Centos5.X 6.X 主要表格(table&am…