奢侈并不意味着贵重与华丽,奢侈是摒弃粗俗。 -- 可可香奈儿《奢侈的》

本文介绍几个在 Filecoin 挖矿运维的过程中会用到的几个系统配置和小工具。

说明:本文所有操作都是在 Ubuntu18.04-LTS 系统下进行的,Centos 可能需要有些调整,请自行摸索。
另外,本文所涉及到工具以及调优配置都亲测可用。

1. 永久修改 ulimit

二阶段测试的 lotus daemon 在同步的时候,经常会出现 too many open files 错误,然后停止同步了。这时我们需要修改 ulimit 配置。

一般系统默认的是 1024, 稳妥起见我们可以设置其为 65535。临时修改 ulimit 我们可以使用如下操作:

ulimit -n 65535

如果要永久设置,操作就复杂一些。首先,需要设置系统层面的 ulimit。

echo 'fs.file-max = 65535' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # 立即生效

然后在修改用户层的配置:

sudo tee -a /etc/security/limits.conf << EOF
*               hard    nofile          65535
*               soft    nofile          65535
root            hard    nofile          65535
root            soft    nofile          65535
EOF

然后修改 Systemd 层:

sudo sed -i '/DefaultLimitNOFILE/c DefaultLimitNOFILE=65535' /etc/systemd/*.conf
sudo systemctl daemon-reexec

重启以后生效。

2. raid 重启失效问题

这里顺便先提一下硬 RAID 还是软 RAID 的问题。硬 RAID 重建对资源占用率较低;软RAID的话,重建的时候,吃CPU。硬 RAID 的算法其实更稳定点。但软 RAID 性能会更好。 因为 RAID 卡上的 CACHE 一般也就是 512MB 或者 1GB,但软RAID可以随便利用系统的内存做 RAID STRIE CACHE。所以,简单来说,如果你的 CPU 和内存资源有富余,那么就可以使用 RAID,否则建议使用硬 RAID

在搭建 RAID 的时候,不知道大家有没有遇到过这种情况,关机重启之后,之前组的 RAID 设备不见了,存储的数据也丢失了。我就遇到过好几次。原因是没有配置软 RAID 的开机加载初始化。

解决方案如下:

mdadm -Ds >> /etc/mdadm/mdadm.conf 

这样在 /etc/mdadm/mdadm.conf 文件中就会出现类似如下的一行配置

ARRAY /dev/md0 metadata=1.2 name=lotus-miner:0 UUID=63dd2141:834e1dd0:b4173301:d483e824

其中 {name} 是你的主机 hostname UUID 就 RAID 设备的 UUID。

这里顺便贴上搭建 RAID 的脚本:

mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sda /dev/sdb 

其中参数 -n 是磁盘的数量,如果后面是分区的话,那就是分区的数量。 -l 参数代表你使用的 RAID 级别,0 代表 RAID0, 1 代表 RAID1,一次类推。

3. 关闭 Numa 功能

首先我们要搞清楚一件事情,为什么要关闭 NUMA?

Linux系统默认开启NUMA,NUMA默认的内存分配策略是优先在进程所在CPU节点的本地内存中分配,会导致CPU节点之间内存分配不均衡。 比如当某个 CPU 节点的内存不足时,会导致 Swap 产生,而不是从远程节点分配内存,即使另一个CPU节点上有足够的物理内存。 这种内存分配策略的初衷是好的,为了内存更接近需要它的进程,但不适合大规模使用内存使用的应用场景,不利于充分利用系统的物理内存。

然而众所周知,Filecoin 对内存的需求近乎贪婪。而且你会发现明还有几十 GB 的物理内存,但是它偏偏却加载了几十 GB 的Swap。而一旦使用 Swap, 性能就立即下降内存的万分之一甚至更低

首先你需要检查一下你的机器上是否已经开启了 Numa 模式,可以使用 numastat 这个命令来查看,如果本机没有这个命令的话,你需要先安装 numactl

sudo apt-get install numactl

然后就可以使用 numastat 查看当前系统是否有启用 Numa.

numastat 
                           node0
numa_hit               484417331
numa_miss                      0
numa_foreign                   0
interleave_hit             40687
local_node             484417331
other_node                     0

如果你的机器跟我的一样只有一个 node 的话,说明你不需要关闭 Numa 了,因为此时 Numa 根本没有起作用。一般来说家用机器,CPU 的核数不会太高,所以不需要用到 Numa 来优化。

我在 E5-2684 V4 的机器上运行了一下,结果如下:

root@miner1:~# numastat
                           node0           node1
numa_hit              2093513830      2859729719
numa_miss              949731552       128562031
numa_foreign           128562031       949731552
interleave_hit             51160           50655
local_node            2093549941      2859639315
other_node             949695441       128652435

从上面的结果来看,Numa 显然是启用的,CPU 和内存都被分配成 2 个 node。跨节点之间进行物理内存的访问,性能会降低十倍

禁用 Numa 有两种方法,一种是通过 Bios 设置,不同的主板有不同的设置方法,这个我就不说了,大家根据自己的主板类型去网上找答案。

这里主要说下通过修改系统配置的方式禁用 Numa :

(1)CentOS 的 grub 配置文件修改,编辑 /etc/grub.conf,找到kernel行,该行类似如下(不同的版本内容略有差异,但开头有“kernel /vmlinuz-”):

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_centos64001-lv_root rd_NO_LUKS rd_LVM_LV=vg_centos64001/lv_root rd_NO_MD rd_LVM_LV=vg_centos64001/lv_swap \
crashkernel=128M LANG=zh_CN.UTF-8  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

在kernel行的末尾,空格再添加 numa=off,如果有多个 kernel 行,则每个 kernel 行都要添加。

(2)Ubuntu18.04 的 grub 文件修改,编辑 /boot/grub/grub.cfg,找到 Linux 引导行,该行类似如下(不同版本内容略有差异,但开头有 linux /boot/vmlinuz-):

linux   /boot/vmlinuz-4.15.0-106-generic root=UUID=2c5f7d8a-ff33-4c78-b5a4-cd8dc75823f3 ro  maybe-ubiquity

在Linux引导行的末尾,空格再添加 numa=off,如果有多个 Linux 引导行,则每个 Linux 引导行都要添加。

(3)修改后保存,再重启系统,再验证是否成功关闭 NUMA。

numastat

如果输出结果中只有 node0,则表示成功禁用了NUMA,如果有 node1 出现则失败。

4. 开启 CPU 到高性能模式

Ubuntu 系统中默认 CPU 都是工作在 powersave(省电)模式的,这样性能没有最大话,所以需要调整到 performance(高性能)模式。你可以通过设置 Bios 或者通过软件临时调节。

1、安装cpufrequtils:

sudo apt-get install cpufrequtils

2、查看当前cpu的状态:

cpufreq-info

3、把cpu调整到性能模式:

sudo cpufreq-set -g performance

5. 两个资源查看小工具

(1)虽然 linux 系统自带的 top 工具已经比较强大了,但是感觉视觉体验上还是不够好,而且不能看到每个核的使用情况。 htop 刚好可以弥补 top 工具的不足。 Ubuntu 10.04 是默认安装了 htop 工具了的。如果没有的话,使用 apt-get install htop 安装。效果如下:

(2)nvtop 是一个 GPU 资源查看工具,nvidia-msitop 一样简陋; 相比之下,nvtop 比 nvidia-msi 好看多了。

Ubuntu-20.04 安装:

sudo apt install nvtop

18.04 没有直接的软件源可以使用,需收手动编译:

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 ..
# 如果上面命令报错 "Could NOT find NVML (missing: NVML_INCLUDE_DIRS)" 就执行下面这个
cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True
make && sudo make install

nvtop 效果如下:

参考链接