[论文研读] An Empirical Study of Speculative Concurrency in Ethereum Smart Contracts

本文通过分析以太坊历史交易数据,探讨动态并行执行策略对智能合约性能的影响。研究发现,即使简单的动态策略也能显著提升执行速度,但随着交易量增加,加速效果逐渐减弱。读写操作的冲突识别和热点合约的处理对性能至关重要。静态冲突预测在高冲突环境下能提升加速效果,而多轮并发执行并未带来预期的增强。此外,增加内核数量在一定范围内可提高速度,但收益递减。
摘要由CSDN通过智能技术生成

这篇文章主要是运用动态并行的方案对以太坊历史交易进行了分析,该总结主要是把重要的分析结果呈现出来,方便以后使用。

目标

使用以太坊历史数据来估计智能合约采用动态并行方案的速度提升效果。

“speculative”的愿意是“投机的、推测的”,但是区块链交易并行的场景下我认为最好是翻译成“动态的”,因为这和另外一种并行方案“静态”分析相照应。

贡献

1. 即使是简单的动态策略也返回非平凡的加速效果;

2. 随着交易量提升,加速效果在降低;

3. 读写操作的区分很重要。如果只把他们视为统一个冲突集,那么会大幅提高冲突比例;

4. 采取更激进的动态策略(多轮并行),产生的效果很小;

5. 精确的静态冲突分析会产生适当的效果;

6. 把内核从16提升到64可以提升加速效果,但是64核以上的加速效果就不明显了;

7. 冲突较高的时候,往往源自于少数的热门合约。

方法

文章中的并发过程主要分为两个阶段:

第一阶段(并发执行阶段):每个线程从区块中选择交易并且执行,如果在执行过程中遇到了冲突,就回滚该交易,然后把该交易推迟到第二阶段。当某个线程执行完一笔交易之后,该线程会继续选择另一笔交易去执行,直到当前块内的所有交易都被选择完成。

第二阶段(顺序执行阶段):第一阶段完成之后,第二阶段开始。第二阶段中的交易都是顺序执行,顺序提交。

如何检测冲突呢?该文章对每个存储区域设置“读写锁”,读写锁相对于同步锁可以提升并发效率。如果一笔交易请求的锁被另一笔交易占用,那么该交易就要回滚然后被推迟到下一阶段。直到并发阶段执行完成,所有交易中涉及到的锁才会被释放,这样可以保证并发过程提交的交易之间是完全没有任何冲突的。

分析

数据采样

在2016年7月到2017年12月之间选择了7个时间段,每个时间段长度为1周,时间段间隔11周。由于计算限制,只分析了每个周期中编号为10的整数倍的区块。

基础结果

  1. 早期阶段的提升效果明显比后期要好很多。
  2. 随着交易量的提升(即从早期到后期),交易的冲突比例也在提升,所以在并发执行阶段,更多的交易会因冲突被中断,从而推迟到顺序执行阶段,因此降低了速度提升比例。

速度提升效果分布

每个区块的提速效果的直方图,即纵坐标是提升效果为x倍的区块数量的比例。主要观察结果如下:

  1. 由于后期的交易冲突比例较高,所以第7时间段的提速效果不是很好,主要体现在:提速高的区块比例很低,大部分的区块的提速效果接近1。
  2. 提高内核数量,有助于增强区块的提速效果。

热点地址

主要观察哪些账户地址的冲突较多,即哪些账户地址经常被访问。把这些引起高度冲突的账户地址叫做热点。

主要观察结果如下:

  1. 随着时间发展,冲突数量较高的账户地址开始出现,因此可以理解为大量的交易都在调用同一份合约;
  2. 大部分的账户地址,都有两个或者一个冲突。

多轮并发执行

前面的测试方法都是两个阶段执行,即一个并发执行阶段,一个顺序执行阶段。于是文章提高了并发执行的轮数,即交易在第一阶段并发执行时遇到冲突,被推迟到第二阶段,第一阶段执行完成之后,第二阶段继续并发执行,以此类推经过N轮并发执行,只有最后一个阶段是顺序执行。

主要观察结果如下:

  1. 提高并发阶段的轮数并不会增强提速效果,反而会有一定程度的降低;这是由于部分交易在多个并发阶段被执行,从而花费了更多时间。

数据冲突

主要比较“读写锁”和“同步锁”的对于测试结果的影响。

主要观察结果如下:

  1. 使用读写锁的提速效果远远强于互斥锁。

时间替代

由于时间不是很好测量,所以使用gas和instrument来代替时间。使用gas和使用instrument分别作为替代品,比较两者的提速效果是否有明显差异。

主要观察结果如下:

  1. 差异不大。

但是这里有个疑问:gas和instrument的大小是一个累积的过程,也就是无论怎么并行,所有交易的gas花费之和始终是每笔交易gas花费的总和,所以只要交易数量相同,gas花费总和理应是一样的instrument同理)。因此使用gas或者instrument是怎么在数据上体现出提速效果的呢?

静态冲突预测

由于动态并发执行是在运行时对有冲突的交易进行回滚然后重执行。因此,文章考虑是否可以在执行之前就发现一些冲突交易,这样有利于减少运行时并发冲突,减低交易回滚的数量,从而增强提速效果。

主要观察结果如下:

  1. 当交易量提升,即冲突比例提高时,静态冲突预测是可以产生更强的提速效果的。但是在冲突比例较低时,甚至于会减弱提速效果。

消除热点合约

在实验“热点地址”的测试数据中,可以看出某些账户地址被访问次数很高,从而提升了冲突比例。所以文章考虑删除对这些账户地址的访问,对提速效果有怎样的影响。

删除“加密猫”合约之后,16内核的加速效果从1.13上升到了1.65,每个块内合约调用的数量从62降低到了43。

为了探究更全面的影响,文章做了如下实验。

主要观察结果如下:

  1. 删除加密猫合约之后,Period7中的高频冲突地址数量明显降低;
  2. 每个测试时间段内的top5合约被删除之后,提速效果会有明显增强;
  3. 高频冲突地址的合约往往是token合约。

思考

  1. 在动态并发执行过程中,减少交易之间的冲突比例,比如解决高频冲突合约;
  2. 动态并发提速效果有时会很低的原因:a) 区块内某笔交易的执行时间远远超过其他交易;b) 区块内的交易数量很少;c) 区块链交易之间的冲突比例很高;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimroniny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值