如何分析EOS源码中的与资源管理

发布时间:2021-12-24 09:58:23 作者:柒染
来源:亿速云 阅读:171

如何分析EOS源码中的与资源管理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

0 前言

1 EOS资源管理包括哪些资源

EOS资源管理模块主要对以下资源进行管理:

交易数据在区块链网络传播时需要消耗带宽资源,在各节点进行持久化存储时需要消耗磁盘资源;交易在执行过程中会消耗CPU资源,后续节点需要replay区块时也会消耗CPU资源;交易总量增长过大和交易发生速度(频次)过快都是一种开销;EOS状态数据库(state db)存储应用层常访问的历史数据,如交易记录、账户余额等,这些需要消耗内存资源和磁盘资源。

2 为什么要对资源管理

EOS网络中的资源总是有限的,而交易处理又是资源敏感的,为避免资源滥用,必须对资源使用权限作出限制和管理,保障网络的正常运行。

3 Token与资源管理的关系

EOS的Token(通证)的引入,有以下功能:

需要使用EOS网络资源的人就需要抵押其拥有的EOS Token,进行诸如购买RAM、抵押Token换取CPU资源和带宽资源等操作。

相关接口和实现在eosio.system智能合约中,如果未加载该智能合约并调用相关接口,则账户的RAM、CPU和NET使用不做限制,但交易和区块限制仍然生效。

4 资源管理机制

4.1 概述

如何分析EOS源码中的与资源管理

通过上图来分析EOS资源管理机制(从上而下分析),即在源码中如何实现:

在交易初始化时会对资源使用量进行计算,并做早期检查,超标则直接拒绝执行; 在交易执行完成时对账户限制、交易限制、区块限制进行检查; 在区块打包时更新资源累计使用量,并更新限制。

4.2 虚拟资源限制

虚拟资源限制(virtual resource limits)与CPU&NET资源累计使用量相关,是为了更好的利用资源而引入的,因为资源使用量在不同时间段有高有低。引入虚拟资源限制后,当前一时间段资源使用量低时,扩大虚拟资源限制,下一时间段则可以使用相对更多的资源,反之亦然。

如何分析EOS源码中的与资源管理

如上图所示,区块CPU和NET限制结构定义一样:

每个区块在打包时,对其包含的所有交易总量进行计算,如果资源使用量超过预期值target,则用contract系数来缩小virtual_resource_limits,如果低于预期值target,则用expand系数来扩大virtual_resource_limits。

如何分析EOS源码中的与资源管理

账户资源使用量限制只有在抵押了token的前提下才生效,其限制值会结合区块限制值和token抵押占比来计算。

4.3 累计使用量

累计使用量针对CPU和NET,RAM无此概念。

如何分析EOS源码中的与资源管理

如上图所示,累计使用量包括三个概念:

需注意,源码中在实现时,周期是平滑过渡的而不是严格分割,即假设前一周期是[0s-100s],每0.5m出块,则下一周期为[0.5s-100.5s],下下一周期为[1s-101s]。

每笔交易的每个action都会进行累加。如果两个action同属一个区块,则直接累加总用量consumed,直接累加平均使用量value_ex;如果该action与前一个action不属于同一区块,则将该区块之前的一个周期的平均使用量value_ex计算出来并加上当前区块使用量赋值给consumed,而平均使用量有一个衰减的概念。

如何分析EOS源码中的与资源管理

delta表示该action时间与上一笔action的时间差。可见,如果某账户频繁操作,其衰减系数decay会一直比较大,最终导致其value_ex衰减缓慢,且限制值会越来越小,从而较快的达到使用上限;而如果操作不频繁,则衰减变快,限制值越来越大,不容易达到使用上限。

5 源码详述

5.1 表数据结构说明

如何分析EOS源码中的与资源管理

如上图所示,一共4张表,resource_limits_config_index为区块限制配置表,resource_limits_state_index为区块使用记录表,resource_limits_index为账户限制配置表,resource_usage_index为账户使用记录表。usage_accumulator为CPU&NET累计使用量结构体,被区块使用记录表和账户使用记录表使用。elastic_limit_parameters为区块限制结构体,被区块限制配置表使用。

5.1.1 账户限制配置表

如何分析EOS源码中的与资源管理

5.1.2 账户使用记录表

如何分析EOS源码中的与资源管理

5.1.3 区块限制配置表

如何分析EOS源码中的与资源管理

5.1.4 区块使用记录表

如何分析EOS源码中的与资源管理

5.2 表操作接口说明

如何分析EOS源码中的与资源管理

上图表述了四张表被哪些接口访问。

5.2.1 账户限制相关方法

5.2.2 账户使用相关方法

查询账户CPU和带宽使用量接口与查询账户CPU和带宽限制在一个接口中,见账户限制相关方法。

5.2.3 区块限制相关方法

5.2.4 区块使用记录表

5.3 从数据角度分析

5.3.1 账户限制与使用

如何分析EOS源码中的与资源管理

如上图所示:

以上为账户限制相关流程,下面分析账户使用相关流程:

5.3.2 区块限制使用

如何分析EOS源码中的与资源管理

如上图所示(绿色为主要操作入口,蓝色为API查询接口):

上述为区块限制相关流程,下面分析区块使用相关流程:

5.4 从流程角度分析

主要流程包括交易初始化(transaction_context::init)、交易执行(transaction_context::exec)、交易打包(transaction_context::finalize)、区块打包(controller_impl::finalize_block)。

5.4.1 交易初始化

如何分析EOS源码中的与资源管理

交易初始化方法对该交易中所有action消耗的CPU和带宽总量进行计算,并计算CPU和带宽限制,并对CPU和带宽做基础检查。

5.4.2 交易执行

如何分析EOS源码中的与资源管理

如上图所示,交易执行方法主要执行所有相关action,即智能合约中的接口,如果智能合约接口中有操作状态数据库的命令,则会改变其账户内存使用量记录。

5.4.3 交易打包

如何分析EOS源码中的与资源管理

如上图所示,交易打包方法检查账户内存使用、CPU使用、带宽使用,检查区块带宽使用、CPU使用。

5.4.4 区块打包

如何分析EOS源码中的与资源管理

如上图所示,区块打包方法主要为:

看完上述内容,你们掌握如何分析EOS源码中的与资源管理的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. EOS代码分析3 EOS存储机制的IPFS分布式文件系统
  2. EOS源码分析(一)投票系统

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

eos token

上一篇:监控自定义指标的HPA怎么部署

下一篇:linux中如何删除用户组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》