每天进步一点点:在内存中replay HIVE/STEEM节点

in #cn4 years ago

好久以前在试过在内存中replay HIVE/STEEM节点,但是后来每次replay的时候都是主备切换着来,所以并不急,也就一直没用内存模式。


(图源 :pixabay)

最近被朋友问及在内存中操作,发现已经忘记的差不多了,于是在电脑上试着弄一遍。

准备/dev/shm

在这之前,我们先来了解一下/dev/shm,如果你听过ramdisk,那么对这个东西一定不会陌生,简单来讲就是在内存中开辟的磁盘,可以像磁盘一样使用,又能享受内存的超快读写速度。

在内存中Replay节点,首先要保证/dev/shm分配的空间大于Replay完成后的shared_memory.bin文件的大小,否则有可能出问题。

我的系统上,系统自动为我分配了63G的/dev/shm空间,倒是足够了:

tmpfs 63G 0 63G 0% /dev/shm

如果觉得不够用,可以用以下命令调整:

sudo mount -o remount,size=68G /dev/shm

修改shared-file-dir & Replay

在节点配置文件中
将:shared-file-dir = "blockchain"
修改为:shared-file-dir = /dev/shm

然后使用如下指令Replay区块链:

steemd --replay-blockchain

恢复设置

如果服务器/电脑内存不吃紧,那么Replay 完成后,可以让shared_memory.bin一直放在/dev/shm下运行,否则我们需要把它弄回磁盘上去(ssd)。

大致步骤如下:

  • 使用Ctrl+C关闭程序
  • 复制/dev/shm/shared_memory.binblockchain目录(根据你自己的设置)
  • 修改shared-file-dir = "blockchain"

然后,重新启动程序就行。

/dev/shm的恢复

可以使用之前的命令将/dev/shm容量恢复成之前的大小。

当然还有一种方法就是重启系统,将其恢复至默认状态。(重启之前不要忘记先关闭节点,否则数据会损坏)。

效率提升多少

我使用当前最新的block_log文件(北京时间4月21日上午10时),包含区块数为:42720937, 全部Replay完,耗时情况如下:

Done reindexing, elapsed time: 19888.23536099999910221 sec

有图有真相:

image.png

折算下来约为5小时30分,而我在硬盘(ssd)上弄,大概需要8-10小时左右(还是之前区块更少一些的时候)。

所以在内存中Replay,对效率还是会有提升的。

其它

Replay完成的时间与程序编译时的参数开启的插件CPU主频硬盘读写速度block_log的新旧(亦即大小)等都高度相关,本文中使用的时间仅供参考。

Sort:  

Very cool photo. It’s all I could understand.

Google Translate is a handy extension to add if you are using the Chrome or Brave browsers. One can just highlight the area of text on the screen they wish translated and then hit the extension icon. Boom, your James Kirk with your Universal Translator. 🤓

They are basically talking about how to run a replay of the HIVE/STEEM chain(s) in memory as opposed to disk like it was done prior to the RocksDB installation of HF20 or so.

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.029
BTC 63343.26
ETH 3484.52
USDT 1.00
SBD 2.53