Skip to content

ytjoe/filecoin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Filecoin 资源分享

CoinSummer实验室 Filecoin 资源分享。

1.常用链接

2. 新测试网专用(实时更新)

2.1 New Interop Deployed 【2020-06-17-6:14 AM】

2.2 测试网第二阶段启动(重大时刻) 【2020-05-15-6:10AM】

3. 节点操作

3.1 查看节点信息

# 查看本节点所监听的地址:
lotus net listen
# 查看连接的节点列表:
lotus net peers

3.2 手动连接其它节点(命令中的地址为示例地址)

lotus net connect /ip4/47.240.110.221/tcp/44845/p2p/12D3KooWRgxLL84TSkYSjhvhCy5ZNSuJZZzHWp2FXDY7ufqGBmUW

当启动 daemon 后无法正常同步链上的数据,可以试试在启动 daemon 的时候禁用自动连接 peers (即:加上 --bootstrap=false 参数),然后手动连接到一个正常节点,例如:

lotus daemon --bootstrap=false
lotus net connect /ip4/47.240.110.221/tcp/44845/p2p/12D3KooWRgxLL84TSkYSjhvhCy5ZNSuJZZzHWp2FXDY7ufqGBmUW

上述的节点是示例节点,当您在使用该命令的时候,您需要自己去找一个可以使用的节点。

3.3 手动设置链的高度

# 设置高度到9700
lotus chain sethead --epoch=9700

节点同步出错时,可下载 CoinSummer实验室 提供的 国内节点备份,将下载后的文件解压得到 datastore 目录(包括目录内的所有内容),然后关闭 daemon 进程,关闭后删除你本机 ~/.lotus 目录下的 datastore 目录,再把解压出来的 datastore 目录复制到你本机的 ~/.lotus 目录下,复制完成之后启动 daemon,此时应该可以正常同步了,如果不行,可以试试:执行上面手动设置链高度的命令(需要 daemon 启动的情况下),即可从指定高度进行同步。

3.4 手动下载 proof 参数

# export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
./lotus fetch-params --proving-params 2KiB     # 例如下载 2KiB 扇区对应的 Proof 参数
./lotus fetch-params --proving-params 16MiB    # 下载 16MiB 扇区对应的 Proof 参数
./lotus fetch-params --proving-params 32GiB    # 下载 32GiB 扇区对应的 Proof 参数

# v27 版本参数【目前在 next 分支: 2020/06/15】
git fetch
git checkout origin/next
export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
./lotus fetch-params 32GiB

参考

3.5 编译参数

v25 版本代码的编译命令:

env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean all

特别是针对 AMD 处理器,使用该命令自己编译出来的代码更适合自己的机器。

v26/v27 版本代码的编译命令:

# 启用 GPU 相关环境变量【Precommit2 的时候可以使用 GPU 计算】
env RUSTFLAGS="-C target-cpu=native -g" FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1  FFI_BUILD_FROM_SOURCE=1 make clean all bench

启用内存最大化参数:

export FIL_PROOFS_MAXIMIZE_CACHING=1

该参数仅针对Testnet3的 32GB 扇区有效。

启用 Log 日志:

export RUST_LOG=Debug

运行 miner 之前加入该参数可以在 miner 的日志中查看更详细的输出信息(底层 rust 代码的输出信息),Log 登记从低到高分别有: Trace、Debug、Info、Warn、Error,Trace 输出的信息最详细,Error 输出的信息最少,仅输入错误信息。

3.6 修改 Proofs 文件路径

export FIL_PROOFS_PARAMETER_CACHE=/path/to/proof_params/v26/

4 Storage miner 操作

4.1 查看扇区状态

# 列举所有扇区信息:
lotus-storage-miner sectors list
# 查看某个扇区的历史状态
lotus-storage-miner sectors status --log <SectorID>

4.2 手动修改扇区状态【谨慎操作】

lotus-storage-miner sectors update-state --really-do-it <SectorID> <NewSectorStatus>
# 例如:手动修改扇区 1 的状态为 FaultedFinal 状态
lotus-storage-miner sectors update-state --really-do-it 1 FaultedFinal

4.3 更改默认存储路径

export LOTUS_STORAGE_PATH="/path/to/.lotusstorage"
  • 默认存储路径是 ~/.lotusstorage,可通过指定 LOTUS_STORAGE_PATH 环境变量来更改;
  • 每个存储路径下都会有 sectorstore.json 配置文件,该文件可以配置该存储路径的用途,比如,是否可以用来存储密封过程中生成的临时文件 "CanSeal": true, 是否可以用来存储密封好的数据 "CanStore": true,以及该路径的权重 "Weight": 10 和一个唯一标识符:ID
{
  "ID": "e59facdc-6a82-418f-a25e-4cbd9165b5de",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true
}

4.4 增加存储路径

# 设置数据存储路径,该路径用来存储最终密封好的数据
# 执行该命令可能需要一点时间等待
lotus-storage-miner storage attach --store --init /path/to/persistent_storage

# 设置密封扇区的存储路径,密封完成之后该路径下的数据会被自动清空,相当于临时目录
# 执行该命令可能需要一点时间等待
lotus-storage-miner storage attach --seal --init /path/to/fast_cache

以上两个命令都是在启动了 miner 之后才可以执行,是一种动态添加存储路径的方式,非常灵活。 当然还可以在命令中添加权重 --weight=10,默认权重是 10。 执行该命令后,可通过以下命令查看存储列表:

lotus-storage-miner storage list

4.5 移动存储目录

默认的存储目录 ~/.lotusstorage 可以移动到其他地方。 移动前最好先停掉 daemon 和 miner。 移动后,假设新路径为 /path/to/.lotusstorage,需要手动更改 /path/to/.lotusstorage 目录下 storage.json 中的 StoragePaths 为新路径:

{
  "StoragePaths": [
    {
      "Path": "/path/to/.lotusstorage"
    }
  ]
}

移动后,重启 daemon 和 miner,miner 会重新读取新路径下的所有 sector 信息。

4.6 使用远程 daemon(daemon 在其他机器)

假设daemon在 192.168.1.100 机器上,miner在 192.168.1.101 机器上:

  1. 修改远程 daemon (192.168.1.100)上 ~/.lotus/config.toml 中的 ListenAddress 为:
# Default config:
[API]
ListenAddress = "/ip4/192.168.1.100/tcp/1234/http"
  1. 将远程 daemon (192.168.1.100) 上 ~/.lotus 目录下的 apitoken 拷贝到 miner 机器(192.168.1.101)的 ~/.lotus 目录下;
  2. 重启 miner 即可。

4.7 赎回已获得的奖励(Testnet3 才需要手动赎回)

lotus-storage-miner rewards redeem
lotus-storage-miner rewards list

赎回之后,可能需要过一段时间才能看到自己钱包的余额增加。

4.8 v26 版本参数中使用 GPU 计算 Precommit2 的方法

运行 miner 之前导出已下环境变量(目前官方还未放出v26参数):

export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1

参考

5 Worker操作

5.1 Testnet3 查看 Worker 信息

lotus-storage-miner workers list

5.2 Testnet3 启动 worker

lotus-seal-worker run --address=192.168.1.201:2333 --precommit1=false --precommit2=true --commit=true

启动worker需要注意以下几点:

  • 要给 worker 指定本机地址和一个随机端口(至少四位数);
  • precommit1precommit2commit 默认是启用的,如果想要禁用,可以设置为 false,例如: --precommit1=false;
  • commit 参数是配置 commit2 的,commit1 无法在 Worker 中启用。

5.3 Testnet3 集群配置

  1. 修改 miner ~/.lotusstorage/config.toml 里面的 ListenAddress:
[API]
ListenAddress = "/ip4/192.168.1.100/tcp/2345/http"
RemoteListenAddress = "192.168.1.100:2345"
  1. 配置 worker 的环境变量
export STORAGE_API_INFO=<TOKEN>:<API>

TOKEN 为 ~/.lotusstorage 中的 token; API 为 ~/.lotusstorage 中的 api;

  1. 启动 worker
./lotus-seal-worker run --address=192.168.1.222:3456

需要给 worker 指定一个四位数的端口。

6 常用环境变量

# lotus 路径:
LOTUS_PATH
# 例如: export LOTUS_PATH=/home/user/nvme_disk/lotus

# miner 路径: 
LOTUS_STORAGE_PATH
# 例如: export LOTUS_STORAGE_PATH=/home/user/nvme_disk/lotusstorage

# worker 路径: 
WORKER_PATH
# 例如: export WORKER_PATH=/home/user/nvme_disk/lotusworker

# proof 证明参数路径: 
FIL_PROOFS_PARAMETER_CACHE
# 例如: export FIL_PROOFS_PARAMETER_CACHE=/home/user/nvme_disk/filecoin-proof-parameters

# 临时文件夹路径: 
TMPDIR
# 例如: export TMPDIR=/home/user/nvme_disk/tmp

# 最大化内存参数
FIL_PROOFS_MAXIMIZE_CACHING
# 例如: export FIL_PROOFS_MAXIMIZE_CACHING=1

# Rust 日志
RUST_LOG
# 例如: export RUST_LOG=Debug

# GPU计算Precommit2
FIL_PROOFS_USE_GPU_COLUMN_BUILDER
# 例如: export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1

# 源码编译底层库
FFI_BUILD_FROM_SOURCE
# 例如: export FFI_BUILD_FROM_SOURCE=1

# GOLANG 代理
GOPROXY
# 例如: export GOPROXY=https://goproxy.cn

# 启动小扇区支持
FIL_USE_SMALL_SECTORS
# 例如: export FIL_USE_SMALL_SECTORS=true

# 显卡相关
BELLMAN_CUSTOM_GPU
# 例如: export BELLMAN_CUSTOM_GPU="GeForce RTX 2080 Ti:4352"

# 下载证明参数代理:
IPFS_GATEWAY
# 例如: export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"

7. 解决拉取代码冲突问题(git pull)

如果你在执行 git pull 的时候出现类似如下错误(CONFLICT xxx),你可以使用以下方法解决该问题:

warning: Cannot merge binary files: build/genesis/devnet.car (HEAD vs. 8bea0e02d77a6d36c3fc72746a9b38c7018608e9)
Auto-merging build/genesis/devnet.car
CONFLICT (add/add): Merge conflict in build/genesis/devnet.car
Auto-merging build/bootstrap/bootstrappers.pi
CONFLICT (content): Merge conflict in build/bootstrap/bootstrappers.pi
Automatic merge failed; fix conflicts and then commit the result.

上述示例来源于从 interopnet 分支的 799f5e5 版本执行 git pull 的时候出现的问题(2020年5月7日),而这个问题在新版的代码中经常会出现,解决这个问题的方法如下(只是其中一个方法,当然还有别的方法):

7.1 方法一:

# 先重置代码,恢复代码到原始状态
git reset --hard HEAD
# 再随意的获取一个很久以前的代码版本号: commit ID
git log -111 | tail | grep -ni "commit "
# 假设这里拿到的一个 commit ID 是:"8c0f2c1ce06"
# 然后恢复到这个版本
git reset --hard 8c0f2c1ce06
# 最后再重新拉取代码
git pull
# 这时候就完成代码更新了,并解决代码冲突问题
# 此时就可以重新编译代码了:
# 当然,在这之前,你可能需要设置一下 GOLANG 的代理
# 已经挂了代理的用户可忽略
env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean all bench

7.2 方法二:

# 先重置代码,恢复代码到原始状态
git reset --hard HEAD
# 切换到 master 分支或者其它分支也行
git checkout master
# 删除 interopnet 分支
git branch -D interopnet
# 拉取所有代码
git fetch
# 或者拉取 interopnet 分支的代码:
git fetch origin interopnet:interopnet
# 再切换到 interopnet 分支
git checkout interopnet

7.3 方法三:

# 如果你没有修改代码,直接执行以下两条命令
git fetch origin
git reset --hard origin/interopnet

8 重置本地测试网环境

如果你在使用本地测试网,发现 lotus daemon 启动不了,或者是 miner 启动不了,或者是其它的问题,这时候,如果你没有别的更好的解决方法,你可以尝试完全清理本地环境,然后再启动 daemon 和 miner, 默认情况下,你需要清理如下的文件或文件夹等:

# 如果 daemon 一直同步不了,也可以试试这个方法,很多情况下可以解决同步问题
# 此外,处理前请检查环境变量,比如,是否修改了默认的 ~/.lotus 目录的位置
rm -rf ~/.lotus/
rm -rf ~/.lotusstorage/
rm -rf ~/.lotusworker/
rm -rf ~/.lotus-bench/
rm -rf ~/.genesis-sectors/
rm -rf ~/dev.gen
rm -rf ~/localnet.json

如果是同步不了,还建议清空 FIL_PROOFS_MAXIMIZE_CACHING 环境变量,最近不少人因为在 .bashrc 中加入这个环境变量导致无法同步,原因未知:

unset FIL_PROOFS_MAXIMIZE_CACHING

9 GDB 调试 lotus 源码

使用 GDB 调试 lotus 源码(包括上层的 go 语言代码和底层的 rust 语言代码),你只需要一个 GDB 工具就可以单步调试了,非常方便:

链接

10 常用的两个查看系统资源的工具

10.1 htop 查看 CPU 和内存等信息

htop 比系统自带的 top 界面更加友好,在 Ubuntu 上安装只需要执行:

sudo apt install htop

效果如下:

htop效果

10.2 nvtop 查看显卡信息

nvtop 比 nvidia-msi 好看多了,但是安装稍微麻烦一些: 在 Ubuntu 19.04 之后可以直接使用 sudo apt install nvtop 安装,否则,你需要执行以下命令安装:

sudo apt install cmake libncurses5-dev libncursesw5-dev git
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake ..
cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True  # 如果上一个命令出错就用这个
sudo make install

效果如下:

nbvtop效果

11 编译相关问题

11.1 crate.io 源的问题

如果因为编译的时候卡住,症状如下图所示:

更新 crate.io 时卡住

解决方法:可以试试更改 crate.io 的源为国内的源,例如:

# 中科大的源(目前好像出问题了)
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 清华的源(正常使用)
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

使用方法:vi ~/.cargo/config, 然后把以上中的一个添加进去,重新编译一次即可。

11.2 GOPROXY 的问题

如果在编译的时候因为下载代码子模块的时候卡住(GO 代码),可能是 GOPROXY 没有设置,此时,设置一下 GOPROXY,然后再重新编译一遍即可:

export GOPROXY=https://goproxy.cn

11.3 go 版本太低的问题

lotus 的 interopnet 分支在编译的时候,如果检测到 go 的版本低于 1.14, 则会编译失败,如下图所示:

go 版本过低

解决方法,安装新版本的 go,并软链接 /usr/bin/go 到新版的 go 可执行文件中(或者卸载旧版的 go):

# Ubuntu 20.04 示例
sudo apt install golang-1.14
# 删除原来的 go 软链接
sudo rm /usr/bin/go
# 让它链接到新版本的 go 可执行文件中
sudo ln -s /usr/lib/go-1.14/bin/go /usr/bin/go

12 Benchmark

12.1 v26 版本参数

  • CPU: AMD 3970x (32核心64线程)
  • GPU: RTX 2080Ti
  • 内存: 256GB (2133MHz)
  • 硬盘: NVMe 1TB * 2

CPU+GPU

# 命令
t=$(date +%Y_%m_%d_%H_%M_%S)
FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --storage-dir=/home/gossip/disk_nvme1/lotus-bench

# 结果

results (v26) (34359738368)
seal: addPiece: 6m15.3044756s (87.3 MiB/s)
seal: preCommit phase 1: 4h12m45.246321786s (2.16 MiB/s)
seal: preCommit phase 2: 33m25.314284805s (16.3 MiB/s)
seal: commit phase 1: 3.376010315s (9.48 GiB/s)
seal: commit phase 2: 43m46.504108069s (12.5 MiB/s)
seal: verify: 30.908086ms
unseal: 4h10m45.224077903s  (2.18 MiB/s)

generate candidates: 2.716063ms (11.5 TiB/s)
compute winnnig post proof (cold): 4.727151776s
compute winnnig post proof (hot): 2.921746828s
verify winnnig post proof (cold): 72.31729ms
verify winnnig post proof (hot): 15.464289ms

compute window post proof (cold): 17m16.771668516s
compute window post proof (hot): 11m34.142457801s
verify window post proof (cold): 5.157438678s
verify window post proof (hot): 43.763838ms

CPU

# 命令
t=$(date +%Y_%m_%d_%H_%M_%S)
BELLMAN_NO_GPU=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --no-gpu --storage-dir=/home/gossip/disk_nvme1/lotus-bench

# 结果

results (v26) (34359738368)
seal: addPiece: 6m18.045655671s (86.7 MiB/s)
seal: preCommit phase 1: 4h11m2.665760729s (2.18 MiB/s)
seal: preCommit phase 2: 51m35.998398427s (10.6 MiB/s)
seal: commit phase 1: 3.2534009s (9.84 GiB/s)
seal: commit phase 2: 1h19m24.107221673s (6.88 MiB/s)
seal: verify: 27.802053ms
unseal: 4h10m25.648494319s  (2.18 MiB/s)

generate candidates: 2.331868ms (13.4 TiB/s)
compute winnnig post proof (cold): 5.941671756s
compute winnnig post proof (hot): 4.172625272s
verify winnnig post proof (cold): 64.764102ms
verify winnnig post proof (hot): 17.119677ms

compute window post proof (cold): 26m34.328794808s
compute window post proof (hot): 20m47.199004707s
verify window post proof (cold): 5.195517605s
verify window post proof (hot): 46.366221ms

12.2 v27 版本参数【next 分支】

  • CPU: AMD 3970x (32核心64线程)
  • GPU: RTX 2080Ti
  • 内存: 256GB (2133MHz)
  • 硬盘: NVMe 1TB * 2

CPU+GPU

# 命令
t=$(date +%Y_%m_%d_%H_%M_%S)
FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --storage-dir=/home/gossip/disk_nvme1/lotus-bench

# 结果

results (v27) (34359738368)
seal: addPiece: 10m0.840580268s (54.5 MiB/s)
seal: preCommit phase 1: 4h11m42.386256191s (2.17 MiB/s)
seal: preCommit phase 2: 27m5.279700449s (20.2 MiB/s)
seal: commit phase 1: 2.594602083s (12.3 GiB/s)
seal: commit phase 2: 50m31.427904703s (10.8 MiB/s)
seal: verify: 27.388448ms
unseal: 4h12m40.52388773s  (2.16 MiB/s)

generate candidates: 2.714168ms (11.5 TiB/s)
compute winnnig post proof (cold): 6.114939733s
compute winnnig post proof (hot): 5.097337848s
verify winnnig post proof (cold): 50.41631ms
verify winnnig post proof (hot): 15.678623ms

compute window post proof (cold): 18m51.79180394s
compute window post proof (hot): 11m25.783003134s
verify window post proof (cold): 5.36059116s
verify window post proof (hot): 47.596046ms

参考文档

About

CoinSummer实验室Filecoin资源分享。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%