LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > Filecoin太空竞赛掉算力怎么办?李白手把手现场教学

Filecoin太空竞赛掉算力怎么办?李白手把手现场教学

2020-11-03 6block 来源:区块链网络

————————

分享者:币圈李白

职位:6block 核心开发工程师

(以下正文摘自6Block核心工程师“币圈李白”的视频直播分享,相应视频请见文末)

今天的主题就是如何通过官方代码里的设置把掉的算力找回来。这也是我们石榴矿池的责任,来维护社区的健康发展。掉算力有很多原因,需要逐一排除。今天讲的主要是官方提供的、写在代码里通过配置就能实现的一些手段。

01

区块链的同步

提交PoSt的第一步就是要保证你的数据是同步的,才能拿来做证明。关于同步的第一点就是通过种子节点。我们提供了两个种子节点,分别在北京和深圳。可以使用:

lotus net connect

/dns4/bootstrap1.testnet.filfox.info/tcp/16666/p2p/12D3KooW9uSxsSh3qwAPxSwwRDVqTTPg8HTBthujVYFXy7Dizb6Q

lotus net connect

/dns4/bootstrap2.testnet.filfox.info/tcp/16666/p2p/12D3KooWKths1fzziHsmeMdTdV7dgB9DzoeiGVSwcW2HCygztH9e

用这个命令连接种子节点。我们在香港还有一个节点,是给浏览器和海外用户用的,不建议国内用户连接。连接成功之后可以用:

Lotus net scores

用这个命令来查看你和各个节点的连接情况。这里首先要保证你和尽可能多的节点有连接,其次要尽可能保证你们连接的那个分数是正的,负的分数表示你们之间的连接不畅通,很难发生数据同步。打分是零的是没有尝试过连接的节点。

怎么增加正节点数呢?

一是利用刚才的命令添加种子节点,然后主动去连接别的节点。

以我们的香港节点和上海节点为例,他们之间的分数是2500+,证明连接非常畅通。如果连接了种子节点后就可以第一时间同步最新的tipset,保持数据同步。

02

控制ParallelFetchLimit的数量

第二个是合理控制封装的机器worker的SSD封装完迁移到HDD上,就是finalize阶段。这个阶段有一个限制是你HDD的写入速度是多少,无论是单机还是存储集群。比如你整体的写入速度是10GB/s,那如果你如果同时写入10个Sector,那么必定会造成网络堵塞。所以我们要控制好finalize的数量。

这个控制要在lotus miner的配置文件里,config.toml里面,在最后会有一个参数控制这个数量。大家如果用我们社区版软件可以看到这个参数是80,但这个是根据我们的集群配置设定的,我们的集群能够支持同时写入80个Sector。但是各位的集群可能无法支持同时写入这么大量的数据。那就要根据你自己的集群的性能进行修改。

那这个参数怎么估计呢?这个主要受两个方面的约束,一个是存储机的带宽,如果存储机的带宽是万兆,那写入速度就能支持1GB/s。然后要看你worker这边的传输速率是多少。我们之前推荐的3970速率是千兆,如果能连两个存储机的话就能同时支持20个写入,8个存储机就能支持80个写入。

所以大家要注意这个值,它等于你的存储集群同时能写入的sector的数量。

如果你实际写入速度更慢一些,就要把这个值调小。同时,存储的读写要留一些空余,这样才能保证WindowPoSt到来的时候,你的抽查能及时从存储的数据这边读出来,所以要留一些余地。

所以第二点就是要控制ParallelFetchLimit的数量。

03

WindowPoSt的计算

我们接着讲第三点。我们在做WindowPoSt时第一步是要同步上,拿到最新出来的块,第二是从存储那边抽取数据出来,一次先要抽查几百个甚至两千多个sector的数据。

经过前两步之后我们就要开始计算了,WindowPoSt的计算有两部分,一部分是计算一个默克尔树,另一部分是零知识证明。默克尔树这部分是在做哈希计算。大家知道,AMD的机器算哈希比较快,Intel的机器算哈希比较慢。官方的代码没有用GPU实现这部分,是用CPU去实现的。那这就告诉我们你做WindowPoSt的miner机器要用AMD的机器,这样你算这部分的时候都比Intel机器快。这就是为什么我们不能用Intel的机器算这部分。

零知识证明的计算,需要显卡,最好的2080Ti放上,最好是两张。别的肯定都会慢一点。计算慢了之后抽查不一定能及时算出来,就有可能掉算力。

04

如何打包mempool里的message

第四点是最复杂的,当你证明生成好之后,message生成了,就要上链了。但是很多时候你发现message在mempool里没被打包。这个要怎么做呢?其实官方在文档里是写了这部分的,我接下来就带大家走一遍这个操作。

这个操作分为两部分。一是账户分离。什么是账户分离?大家有时候会遇到这样一个情况,就是WindowPoSt它的message生成之后,所有的messsage都有一个nonce值,这是参考以太坊的。这些message在打包上链的时候是根据nonce从小到大打包的,它一定会把你nonce值比较小的优先打包,然后再打包值大的。这就造成一个结果,就是如果你在WindwoPoSt期间,MessagePool里已经存了很多message没有上链,那你的WindowPoSt的message是最后加入的,它就要等你pool里所有的message都上链之后才能上链,即使你的证明message生成很快,最终也会堵塞在mempool里不被打包。

针对这个问题,官方在最近的版本里增加了一种方法,允许你设置多个控制账户。你可以用一个账户发你precommit和prove的消息,用另一个账户发WindowPoSt的消息,这样这个账户就不会有积压的消息,就可以第一时间被处理。

官方在这个文档里写了。我们操作用的是本地的2k的网络。首先看我们现在的地址:

Lotus wallet list

显示我们有一个地址,然后我要新增一个地址

Lotus wallet new bls

然后往新地址里打100块钱。这部分钱就是给你用来做WindowPoSt的。接下来你要把这个地址设置成发WindowPoSt消息的地址:

Lotus-miner actor control set –really-do-it 加上你的地址

然后它就会发出一条消息,把这个地址新增为我的控制地址。

那怎么看我有多少新增地址呢?可以用:

Lotus-miner actor control list –verbose

在修改优先级前,要先会从消息池中选消息,要用一个命令叫mempool select,默认优先级是用手续费高低来选择的。如果我要优先选自己的,就要把priorityAddrs设置成自己的地址。设置完再看一下,mempool里第一条的信息就是我们选中地址的信息。这完全是官方设计的功能。

对于中小矿工,虽然出块少,但是优先打包也是有意义的。至于要不要做,大家自己判断。

最后,如果我一天也出不了多少块,那就只能调高WindowPoSt的Gas,让别人优先打包。那怎么调高Gas呢?那还在lotusminer的config文件里,在这个文件最后大家可以看到Fees的选项,有三个值,控制了三种消息的最大手续费。大家需要调高的就是MaxWindowPoStGasFee。我们的社区版中已经在原有的默认值的基础上乘以了2.

以上就是避免掉算力的几个措施,所有代码都会以文档的形式在我们的GitHub公布:https://github.com/shannon-6block/lotus-miner。这些都是最简单的、官方支持的方法。

最后,预祝大家在太空竞赛里取得好成绩,谢谢大家!

—-

编译者/作者:6block

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...