Skip to content

Instantly share code, notes, and snippets.

@rjl493456442
Created May 15, 2020 05:18
Show Gist options
  • Save rjl493456442/0f43763dbe16c927dc2e0d182fc4ea2a to your computer and use it in GitHub Desktop.
Save rjl493456442/0f43763dbe16c927dc2e0d182fc4ea2a to your computer and use it in GitHub Desktop.

Geth metrics

Blockchain

General metrics

一个区块执行&校验的时间可以包含以下几部分内容:

  • 区块执行(从数据库中读取数据,EVM执行合约,将脏内容写回Trie,并且重新计算Trie hash)
  • 区块验证(验证tx root, receipt root等,占比很小可忽略)
  • 数据写回(从脏的trie写回数据库,但是这里的数据库在Geth内部指代的是内存数据库,即cache,并不会发生直接的磁盘io)

因此以上三部分组成了执行一个区块所需要的时间开销,即execution, validation, commit。

假设geth以geth --metrics启动,则以上三类数据会被统计到execution, validation, commit三个metrics中并在grafana显示。

Detail metrics

除了粗粒度地显示Geth执行区块的各部分时间开销外,geth还能提供更加细粒度的时间开销统计。

启动方式geth --metrics --metrics.expensive

其中execution部分可以细分成以下几部分内容:

内容 metrics名称 类别
EVM execution execution 注意此时execution谨代表evm执行时间而非“完整”的执行部分开销
Account Trie Read account read Account数据读取,占比较大可优化
Storage Trie Read storage read 合约数据读取,占比较大可优化
Account Trie Update account update Account数据整理&哈希计算
Storage Trie Update storage update 合约数据整理&哈希计算
Account Trie Hash account hash Account数据整理&哈希计算
Storage Trie Hash storage hash 合约数据整理&哈希计算

此外commit部分可以细分为以下几部分内容:

内容 metrics名称 类别
Account Commit account commit 将脏的trie写回内存数据库
Storage Commit storage commit 将脏的storage trie写回内存数据库
Chain write commit 将新的区块链数据写入数据库

TxPool

内容 metrics名称 类别
known known 重复交易
valid valid 合约交易
invalid invalid 非法交易,直接拒绝
underpriced underpriced 低价交易,直接拒绝
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment