P夫的NoSSD压缩图参数详解

P夫1.4.0开始集成了NoSSD的P图和挂盘挖矿。作者进行了大量的测试,在流程方面做了很多工作尽可能地提高单位时间产出效率和自动化。

本文最近更新于:2022年11月21日

一、先了解NoSSD的P图程序

NoSSD的P图流程跟传统P图流程完全不同,总共分为了两步,第一步先P出一个spt格式粗压图,第二步将spt进一步压缩成fpt格式的最终图。在P夫里第一步被称为「P图」、第二步称为「压缩」,本文中「P图」有时候也笼统表示广义上的P图+压缩。

P图阶段需要大量CPU和内存,压缩阶段却要求极低。压缩进程只需要1个CPU核心和4GB内存。默认情况P图和压缩是串行状态,将P图和压缩两个阶段分开后同时执行是提高效率的有效办法。P夫里最重要流程优化就是可以随意指定两种并行任务数量。

NoSSD的P图任务和压缩任务看起来像是相同级别,P图任务的食量如果是老虎、那么压缩任务就是土狗,P夫里提到的多开都是指P图任务多开,压缩任务没资格跟P图任务相提并论。

串行任务在后半段系统资源浪费严重
并行方式能保持全程资源高使用率

总结加快P图速度的核心思路

  1. P图和压缩分开进行
  2. 多开P图任务
  3. 每个P图任务至少给搭配3块机械盘,没那么多机械盘用SSD替身来取代
  4. 用SSD替身能将速度最大化

二、NoSSD的关键参数解析

下图是创建NoSSD的任务界面,左侧红框中全部都是针对P图进程(根据模式决定,不一定只P图)任务的参数,右侧红框【额外压缩任务】进程没有那么多自定义参数。

1、压缩等级:压缩程度,建议默认最高等级5。

数值越大压缩程度越大,可存图越多,收益越多,对挂盘机CPU性能要求越来越高,对CPU要求是根据压缩等级和挂图数量两个因素决定的。

2、P图任务工作模式

  • 【只P图】:强烈推荐!该P图任务只产出spt格式粗压图。该模式可选创建一些【额外的压缩任务】用来协同工作,P图任务负责产出spt,额外的压缩任务负责压缩这些spt为fpt。
  • 【只压缩】:创建的任务就是个普通的压缩任务,跟「额外压缩任务」创建的压缩进程功能一样。只将最终目录里现有的spt压缩成fpt,此时P图参数会有对应限制。内存允许范围[2,4]、CPU不允许调整、挂盘数不允许调整。
  • 【P图&压缩】NoSSD默认工作模式,先P出spt粗压图将最终目录装满,再逐个压缩成fpt。

3、P图任务:并发的NoSSD P图任务数量,不包括压缩任务。

4、额外压缩任务:并发P图流程的关键参数,设置后将创建指定数量的独立的压缩进程,这些压缩进程时刻监控P图程序产出的spt,发现后立即进行压缩。

压缩进程监控范围是所有最终目录,如果有替身盘则监控替身盘。

压缩任务数量只要能及时处理掉新P出来的spt图即可。

好在它们监控状态不消耗系统资源,压缩时每个任务需要1个CPU核心和1.6GB~4GB内存(低于1.6GB无法运行)。

你可能会问这些额外的压缩任务跟直接创建「只压缩」模式的P图任务有什么不同?他们功能完全相同。

5、每个P图任务内存强烈建议提前规划好任务数量和每个任务的内存大小,手动指定具体数值,否则极有可能导致某个任务申请不到最低运行内存而报错。

在NoSSD内核中,如果内存足够大P图任务默认会申请123GB内存,P图任务最低内存要求是2.72 GB;压缩任务默认申请4GB内存,压缩进程最低内存要求1.6GB。

6、每个P图任务CPU:P图任务间歇性使用CPU,所以不必均分CPU核心给各个任务,可适当调高。

在NoSSD内核中每个P图任务默认使用一半的CPU核心,每个压缩任务默认使用1个核心。

7、每个P图任务挂盘数这是影响性能的关键参数,一定要给P图任务分配至少3个机械盘,推荐5个。

8、填充辅助目录强烈建议给P图任务设置辅助盘,想把机械盘完美装满就必然要借助外部空间,这就需要提供除了最终目录以外的一个独立磁盘(或目录),这个磁盘至少要有410+GB空间用来生产fpt文件。

但是并不是一定要配置该参数,如果任务最终目录里面有替身盘、有未被P图任务挂上的最终目录、都会被P夫拿来作辅助盘使用,此时不配置【填充辅助目录】也是可以的。

可以用系统盘的某个目录、单独的机械盘、SSD都可以。

NoSSD默认会将机械盘P满spt,保证第一时间形成算力获得收益,这是不错的机制,但是P出最终的fpt图装满机械盘的过程就比较曲折,逐个压缩这些spt为fpt,挤出来空闲空间再重新P图直到把硬盘的装满fpt文件,机械盘大概率会剩余一个spt无法解决(当然有时候磁盘剩一个spt无所谓,即使把它压缩了也无法再多存一个图,P夫填充磁盘时候会根据实际情况决定是否压缩最后一个图)。

9、最终目录:就是存图的机械盘,盘的数量决定了并发任务数量。

假如有8个机械盘(最终目录),【每个P图任务挂盘】设置为5,【P图任务】设置为4,此时因为没有足够的机械盘只会创建2个P图任务。

如果想开3个并发P图任务,每个任务4块盘,总共能挂12块盘,如果有SSD或者其他盘建议也加到最终目录里面,12块盘之后又加了两个SSD在最后,那么最后这两个SSD就会在前面12个盘全部被NoSSD P满时最后填充时充当辅助盘。

【填充】是指NoSSD会剩余一个最大达225G的tmp和1个spt在盘里,P夫在最后会想办法全用fpt装满磁盘,这就需要借助外部磁盘实现。首先会寻找替身盘当辅助盘、其次是P图任务没挂上的机械盘、最后是任务中的某个机械盘。所以最差的情况是P图任务下的N个盘中有N-1个盘完美装满了fpt,还有一块盘会剩下spt。

10、替身SSD:虽然称为SSD,配置一个高速机械盘也是可以的。加上这个功能是因为NoSSD在P图和压缩对SSD的损耗极少(有待更多数据验证)。

它代替机械盘进行P图和压缩,只将最终的fpt文件拷贝到机械盘(是压缩成fpt再拷贝,还是一边压缩一边导出是可配置的)。为体质参差不齐的机械盘提供P图速度保底;并且有了替身盘直接就可将机械盘装满fpt而不必像原生NoSSD那样剩余NoSSDChiaPool.tmp、spt文件之后再由P夫逐个填满。

单个P图任务写入速度大概270+MB/s,压缩任务可能有130+MB/s,可以将一个SSD分配给多个机械盘当替身,建议普通sata接口的SSD不要给超过2个任务做替身,m2或者企业固态请根据SSD读写能力自行决定数量。

一个替身目录极端情况会有三个进程同时读写,1个P进程P图、1个压缩进程压缩、1个剪切图的进程往机械盘拷贝fpt,(剪切图进程和压缩进程在勾选【从替身直接压缩到机械盘】时不会同时存在)。

11、从替身直接压缩到机械盘:建议默认勾选即可。

该功能只对有【替身SSD】的最终目录生效,强烈推荐勾选,替身盘中的spt文件压缩同时导出在机械盘,免去了在替身盘中压缩后再次剪切的步骤,避免浪费时间。

三、NoSSD参数例子

样例1,该例子仅用作参数介绍,不是P图参数建议!!!

主机物理内存512,CPU核心128,19个物理机械盘

4个P图任务需要内存 4 x 90 GB = 360 GB,6个压缩任务需要内存 6 x 4 GB = 24 GB,这要求主机要有至少360 GB + 24 GB=384GB空闲内存。

能开4个P图任务的前提是要有足够多的机械盘,【每个P图任务挂盘】5个,最多需要20个盘,最少需要16个,硬盘<=15只会创建3个P图任务,此例子中每个任务的挂盘数就是:5、5、5、4。

例子2:主机CPU64核心、128GB内存、18块机械盘,想开2个并发P图和4个压缩,如何设置?

例子2的创建任务确认提示:

四、一些已知问题:

  1. NoSSD内核有时候无法申请到【已缓存】状态的系统内存导致任务实际使用的内存远低于系统可用的内存。

NoSSD的压缩图研究

最近这个NoSSD压缩图的矿池出镜率比较高,它是个奇亚压缩图的矿池整体方案,调研之后打算将它集成进P夫,预计三五天内能发布第一个版本。

有趣的是它P图过程对CPU使用是间歇性的,写盘速度很明显在软件层面做了特定的限制,基本维持在270MB/s左右,所以CPU性能对P图时间影响不像传统P图内核那么大,限制了写盘速度也导致SSD的优势没那么大,但是P图的流程有较大的优化空间,这也是P夫要做的。

NoSSD官网:https://nossd.com/

下面是我调研之后的一些结论,方便大家快速了解。

一、关于NoSSD的一些结论

  • 它是个闭源的压缩图算法,未被chia官方认可;
  • 猜测可能是NoSSD自己实现了读取图的数据层相关逻辑,本质上我们P的图属于NoSSD的账号,如果有一天NoSSD发放的收益变少也是有可能的,请自行评估风险;
  • 它不是压缩现有的plot图,需要重新P图,并且NoSSD的图是私有格式无法solo、无法切换其他池;
  • 它的图文件不是plot,粗压缩文件是.spt,最终压缩后的图文件是.fpt ,粗压缩的spt文件就已经可以用来挖矿产生收益;
  • NoSSD的P图分为两步,第一步粗压缩后的图文件是spt格式,第二步将spt压缩成fpt格式,fpt文件就是最终的压缩图;
  • 压缩比率分为五级,相较于传统plot图最大压缩比例为30%,压缩程度越高图文件越小、单位存储量越高、总收益也就越高,对挂盘机CPU的要求也越高;
  • NoSSD的图文件中不包含任何你的个人信息,图在谁的盘里它就是谁的,因此它的挖矿奖励地址是可以随便更换的(任何奇亚指纹生成的收款地址都可以);
  • 基于上一条,不要随便购买其他人的NoSSD带图盘,因为无法辨别盘中的图是P的还是拷贝来的;
  • 基于上述原因为了防止代P老板欺骗你,NoSSD贴心地设计了一个加密解密图的功能,你可以给代P老板生成一个P图秘钥(public key),这个key是你用自定义的密码生成出来的,不知道密码的情况下别人无法解锁代P出来的图进行挖矿,从而保证你找别人代P时不会被骗;

二、NoSSD的一些常见问题

1、NoSSD是什么?

它是个奇亚矿池,有自研的压缩图算法可以压缩图文件。

2、NoSSD有什么优势?

它的压缩图算法能把标准的k32图压缩最高30%,提高单位存储空间的存图量从而提高收益。

3、要重新P图吗?

要,好消息是完全可以只用机械盘P图,速度也还不错

4、如何P图?

命令P图:下载NoSSD官方的工具,P图参数略有些复杂,之后有时间单独开贴介绍吧,建议直接参考官方的帮助文档 https://nossd.com/help

图形P图工具:那必须是【P夫】了

5、P了图如何挖?

用NoSSD给的挖矿程序,不用安装奇亚官方客户端。

命令挖:下面给个例子,假设d盘和e盘是压缩图的目录,有更多盘照样都拼上就行了,收款地址可以随意更换,中括号里面的参数不是必需的,自己看情况加上。

client.exe -a xch收款地址 -d,r d:\ -d,r e:\ [-w 英文名字(用来区分多个主机的贡献)] [--no-benchmark] [--no-plotting] [--no-finalizing] [-p 图密码] [--m-threads 挖矿程序使用CPU核心数] 

--no-finalizing 禁用压缩
--no-plotting 禁用P图
--no-benchmark 禁用性能评估

图形工具挖:P夫里附带了个NoSSD的一键挂图挖矿功能(严格说P夫只专注P图,以后可能会做成一个单独的工具)

三、NoSSD压缩图跟各个P图核心的硬件需求对比


NoSSD P图程序madmaxBladeBit 1.x
CPU要求不太高(注1)越强越好越强越好
内存越大越好要求极低(用Ramdisk另说)416GB(不算系统使用的)
SSD不需要(注2)240GB左右(k32)至少102GB做中转(注3)

测试用例目前还没全部完成,表里数据并不严谨,以后有了更多数据支持可能会更新。

注1:不是说CPU要求不高,是大部分P图机内存容量会先成为瓶颈。

注2:用SSD当然更好,但是机械盘只要速度正常发挥也基本能CPU和内存资源利用最大化。

注3:虽然bladebit不强制使用SSD接收内存导出的图文件,实际上已经是标配了,否则影响速度。

奇亚的三个P图内核简介

奇亚有史以来总共就三个P图内核程序,市面上所有的第三方P图工具都是在这三个内核上做的二次包装,简单说就是给它们加了个图形界面的外皮。

本文以下讨论的缓存占用大小均以K32为标准。

一、P图内核介绍

这三个P图内核分别是:chiapos、chia-plotter和bladebit,下表将bladebit 2.0姑且也算作一个新内核。

功能对比chiaposchia-plotterbladebitbladebit 2.0(开发中)
速度最慢中等最快(未发布正式版,无法评估)
速度量级小时左右主流约20~40分钟约5~15分钟(未发布正式版,无法评估)
内存要求每个任务3.32GiB左右未知(可能是几百兆)最少416GiB(未发布正式版,无法评估)
缓存盘要求每个任务约239GiB少于256GiB不需要(未发布正式版,无法评估)
K范围k32~k35
测试图最小可以k25
k32~k34
测试图最小k26
k32k32
优势可以P k35的大图SSD P图速度最快,使用110G ramdisk能节省大量SSD损耗速度最快、不损耗SSD原生支持内存缓存,并且能自定内存大小,降低内存门槛
劣势速度最慢、多任务调度困难无明显缺点,速度中规中矩硬件门槛高(未发布正式版,无法评估)
开发者奇亚官方团队madMAx43v3rharold-bharold-b

1.1 chiapos

它在奇亚官方客户端中叫做Chia Proof of Space,虽然三个内核都已经集成到了chia官方客户端中,但我还是习惯称呼chiapos为【官方内核】,它是官方内置的第一个P图内核程序,它的代码集成在了奇亚币最核心的chiapos项目中,在chia-plotter发布前它是唯一的P图选择,它的缺点非常多,比如:无法最大化利用CPU、内存等系统资源、多个任务之间无法协调优化,它的低效的实现算法就决定了它最后被抛弃的命运。

1.2 chia-plotter

它是由国外开发者madMAx43v3r开发,它的名字太普通了所以大家也习惯用作者名字称呼它为madmax,一经发布立即碾压了官方内核,作者放出的测试日志显示它的速度来到了42分钟(k32),由于它P图时CPU资源几乎是全程100%,使用时不必像官方内核一样要同时启动多个任务,也不用精心协调调度这些任务,只要启动一个P图任务即可又快又省力地P图了,这也就是为什么有人给它起名:极速快P内核、快P。

1.3 bladebit

作者公开发布软件的消息是他2021年7月7日在YouTube发布了一个P图视频,使用64核ARM 架构Graviton 2 处理器+416GiB内存5分钟P完了一个k32,将P图速度提高到了5分钟级别。

后来奇亚官方在1.2.11版本将个人开发者的两款内核都集成在了官方客户端中,算是得到了官方的认可,harold-b更是被奇亚官方收编,bladebit项目也转移到了奇亚官方github账号下。

二、扩展阅读:全内存、半内存

2.1【全内存】

字面能看出是指P图任务完全在内存中进行,不再损耗SSD,全内存有两种实现方法:

第一种是416GiB内存+bladebit内核

第二种是将至少240GiB内存用软件虚拟为硬盘(也就是RamDisk,说白了就是把内存空间虚拟成硬盘用),使用chia-plotter内核将RamDisk作为缓存目录P图(官方内核理论也能用但还是因为资源无法高效利用不在考虑范围)

bladebit方案RamDisk方案
内存要求至少416GiB至少240GiB
内核bladebitchia-plotter

2.2 半内存

半内存指的是给chia-plotter的两个缓存目录分别使用SSD和RamDisk磁盘,创建一个不小于110GiB的RamDisk,将它配置到chia-plotter的-2参数上,再将另外一个SSD缓存目录配置到chia-plotter的-t参数上。

值得注意的是chia-plotter使用RamDisk几乎不会提高速度,它的唯一的优势是可以分摊75%的SSD损耗到内存上。

另外,bladebit 2.0也是一个半内存方案,准确说它才是原生支持半内存的P图方案,毕竟chia-plotter还需要借助第三方工具将内存虚拟成硬盘,bladebit 2.0目前尚未正式发布,暂不参与讨论。

广告:

老板们的时间不要用来研究P图,花点小钱解放双手,最屌的P图工具请点这里

P图需要的几个key分别从哪里找到?

  • Farmer public key(即农民公钥、fpk,新图老图都需要它)
  • Pool public key(奖励池公钥、ppk,P老图用)
  • Pool contract address(合约地址,P新图用)

查看自己奇亚账号的这三个参数的方法非常简单,在奇亚客户端就能找到。

一、Farmer public key和Pool public key的获取方法

第一种:客户端界面查看:

打开奇亚客户端(以1.3.3为例),点击右上角的【退出】按钮回到助记词指纹选择界面,单击助记词右侧的眼睛👁图标后会显示账号信息,其中【农民公钥】就是Farmer public key、【奖励池公钥】就是Pool public key。

第二种:命令查看:

以Windows系统为例,依次运行下面两个命令:

cd %USERPROFILE%\AppData\Local\chia-blockchain\app-*\resources\app.asar.unpacked\daemon

chia keys show

二、合约地址(Pool contract address)的查看方法:

第一种:客户端查看

点击【农业合作社】的标签,这里列出的就是已经创建的合作社,如果还没有请先创建。找到想要P图的合作社,按下图操作即可获取到Pool Contract Address。

第二种:命令

cd %USERPROFILE%\AppData\Local\chia-blockchain\app-*\resources\app.asar.unpacked\daemon

chia plotnft show

使用P夫在Linux下P图以及网络传图方案

目前比较好的P图方案应该是Linux系统P图到SSD,然后通过局域网共享拷贝到【存图机】的机械盘上。

下文例子仅使用3台P盘机,更多的P盘机、存图机、网络拓扑以及单个存图机的带宽上限均不在本文讨论范围,请根据自己的实际情况做规划,本文示例仅供参考。

一、方案简介

1、P图机安装Centos系统,将SSD作为中转盘挂载到/ssd目录(可以随便指定,下文所有例子均假设它挂载到了该目录),运行P夫开始P图。

2、P图机安装samba服务将/ssd目录设置为共享。

3、【分发机】分别将每一台【P盘机】的共享目录映射为本地驱动器,然后运行P夫【分发拷贝】功能监控这三台P盘机的/ssd目录即可实现从P图机自动拷贝到机械盘。

二、硬件网络架构

仅供参考,图中仅展示3台机器时最经济的网络方案

2.1 P盘机设置

每台P盘机要求有一张万兆网卡用于局域网传图,上图例子中需要给三台P图机的传图网卡手动设置IP,假如依次是:192.168.5.4、192.168.5.5、192.168.5.6。

P盘机设置samba服务将/ssd目录共享。设置方法见《Centos 一键设置共享目录》

万兆网卡理论传输速度1.25GB/s,假设平均传输速度只能达到理论的60%,传输一张k32图大概需要134秒,只要P一张图的速度低于134秒是完全够用的。

P盘机使用P夫创建BladeBit任务时无需再设置【中转盘】选项,将/ssd目录添加到最终目录即可,不要忘记在最终目录上右键勾选【无限空间】(目的是让P夫知道该最终目录能存无数个图,而不是根据磁盘空间大小自己计算P图数量)。

2.3 存图机(分发机)配置

P图机需要有3个万兆网口分别与三台P盘机相连,三个网卡的IP均需手动设置,假设设置为:192.168.5.1、192.168.5.2、192.168.5.3

按照下图方法映射为网络驱动器

映射后如下图,它也有盘符,跟读写本机磁盘一模一样。

存图机分发拷贝设置如下图:

CentOS一键安装向日葵

CentOS安装向日葵总提示缺少依赖的两个库,yum更新了也搜索不到,只能手动去网站下载之后安装,懒得列出来,直接用我下载好的安装就行了。

下载这个压缩包,运行里面的sh脚本文件就自动安装上了。

只在CentOS 9上做了测试,其他Centos版本不保证完美能用。

https://fork-linux-file.c4dig.cn/pfu-plotter/others/SunloginClient_Centos9.tgz

解压后进入文件夹,打开终端执行命令:

chmod +x ./installSunFlower.sh && sudo ./installSunFlower.sh

Centos 一键设置共享目录

Liunx配置共享文件夹大概分为这几步:

1、关闭防火墙

2、安装&配置Samba

3、将samba设置为开机自启动

我将这几步写成了自助操作脚本,依次将脚本中的1、2、3步执行后即可配置成功。

脚本用法:

打开终端,拷贝下面这行命令,后面加上自己想要共享的路径即可执行。

wget https://file.c4dig.cn/pfu-plotter/others/centos-smb.sh -O a.sh && chmod +x a.sh && sudo ./a.sh  [想要共享的目录]

下图例子中的共享目录使用的是/ssd,请改成你自己的共享路径。