wdpost: Config for disabling sector prechecks
This commit is contained in:
parent
84881f64ad
commit
59f3161fd6
@ -117,7 +117,7 @@ func ConfigStorageMiner(c interface{}) Option {
|
|||||||
Override(new(*miner.Miner), modules.SetupBlockProducer),
|
Override(new(*miner.Miner), modules.SetupBlockProducer),
|
||||||
Override(new(gen.WinningPoStProver), storage.NewWinningPoStProver),
|
Override(new(gen.WinningPoStProver), storage.NewWinningPoStProver),
|
||||||
Override(new(*storage.Miner), modules.StorageMiner(cfg.Fees)),
|
Override(new(*storage.Miner), modules.StorageMiner(cfg.Fees)),
|
||||||
Override(new(*wdpost.WindowPoStScheduler), modules.WindowPostScheduler(cfg.Fees)),
|
Override(new(*wdpost.WindowPoStScheduler), modules.WindowPostScheduler(cfg.Fees, cfg.Proving)),
|
||||||
Override(new(sectorblocks.SectorBuilder), From(new(*storage.Miner))),
|
Override(new(sectorblocks.SectorBuilder), From(new(*storage.Miner))),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -627,16 +627,15 @@ over the worker address if this flag is set.`,
|
|||||||
Name: "ParallelCheckLimit",
|
Name: "ParallelCheckLimit",
|
||||||
Type: "int",
|
Type: "int",
|
||||||
|
|
||||||
Comment: `WARNING: Setting this value too high may make the node crash by running out of stack
|
Comment: `After changing this option, confirm that the new value works in your setup by invoking
|
||||||
WARNING: Setting this value too low may make sector challenge reading much slower, resulting in failed PoSt due
|
'lotus-miner proving compute window-post 0'`,
|
||||||
to late submission.`,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "DisableBuiltinWindowPoSt",
|
Name: "DisableBuiltinWindowPoSt",
|
||||||
Type: "bool",
|
Type: "bool",
|
||||||
|
|
||||||
Comment: `WARNING: If no windowPoSt workers are connected, window PoSt WILL FAIL resulting in faulty sectors which will need
|
Comment: `After changing this option, confirm that the new value works in your setup by invoking
|
||||||
to be recovered. Before enabling this option, make sure your PoSt workers work correctly.`,
|
'lotus-miner proving compute window-post 0'`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "DisableBuiltinWinningPoSt",
|
Name: "DisableBuiltinWinningPoSt",
|
||||||
@ -645,6 +644,13 @@ to be recovered. Before enabling this option, make sure your PoSt workers work c
|
|||||||
Comment: `WARNING: If no WinningPoSt workers are connected, Winning PoSt WILL FAIL resulting in lost block rewards.
|
Comment: `WARNING: If no WinningPoSt workers are connected, Winning PoSt WILL FAIL resulting in lost block rewards.
|
||||||
Before enabling this option, make sure your PoSt workers work correctly.`,
|
Before enabling this option, make sure your PoSt workers work correctly.`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "DisableWDPoStPreChecks",
|
||||||
|
Type: "bool",
|
||||||
|
|
||||||
|
Comment: `After changing this option, confirm that the new value works in your setup by invoking
|
||||||
|
'lotus-miner proving compute window-post 0'`,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
"Pubsub": []DocField{
|
"Pubsub": []DocField{
|
||||||
{
|
{
|
||||||
|
@ -225,12 +225,18 @@ type ProvingConfig struct {
|
|||||||
// WARNING: Setting this value too high may make the node crash by running out of stack
|
// WARNING: Setting this value too high may make the node crash by running out of stack
|
||||||
// WARNING: Setting this value too low may make sector challenge reading much slower, resulting in failed PoSt due
|
// WARNING: Setting this value too low may make sector challenge reading much slower, resulting in failed PoSt due
|
||||||
// to late submission.
|
// to late submission.
|
||||||
|
//
|
||||||
|
// After changing this option, confirm that the new value works in your setup by invoking
|
||||||
|
// 'lotus-miner proving compute window-post 0'
|
||||||
ParallelCheckLimit int
|
ParallelCheckLimit int
|
||||||
|
|
||||||
// Disable Window PoSt computation on the lotus-miner process even if no window PoSt workers are present.
|
// Disable Window PoSt computation on the lotus-miner process even if no window PoSt workers are present.
|
||||||
//
|
//
|
||||||
// WARNING: If no windowPoSt workers are connected, window PoSt WILL FAIL resulting in faulty sectors which will need
|
// WARNING: If no windowPoSt workers are connected, window PoSt WILL FAIL resulting in faulty sectors which will need
|
||||||
// to be recovered. Before enabling this option, make sure your PoSt workers work correctly.
|
// to be recovered. Before enabling this option, make sure your PoSt workers work correctly.
|
||||||
|
//
|
||||||
|
// After changing this option, confirm that the new value works in your setup by invoking
|
||||||
|
// 'lotus-miner proving compute window-post 0'
|
||||||
DisableBuiltinWindowPoSt bool
|
DisableBuiltinWindowPoSt bool
|
||||||
|
|
||||||
// Disable Winning PoSt computation on the lotus-miner process even if no winning PoSt workers are present.
|
// Disable Winning PoSt computation on the lotus-miner process even if no winning PoSt workers are present.
|
||||||
@ -238,6 +244,32 @@ type ProvingConfig struct {
|
|||||||
// WARNING: If no WinningPoSt workers are connected, Winning PoSt WILL FAIL resulting in lost block rewards.
|
// WARNING: If no WinningPoSt workers are connected, Winning PoSt WILL FAIL resulting in lost block rewards.
|
||||||
// Before enabling this option, make sure your PoSt workers work correctly.
|
// Before enabling this option, make sure your PoSt workers work correctly.
|
||||||
DisableBuiltinWinningPoSt bool
|
DisableBuiltinWinningPoSt bool
|
||||||
|
|
||||||
|
// Disable WindowPoSt provable sector readability checks.
|
||||||
|
//
|
||||||
|
// In normal operation, when preparing to compute WindowPoSt, lotus-miner will perform a round of reading challenges
|
||||||
|
// from all sectors to confirm that those sectors can be proven. Challenges read in this process are discarded, as
|
||||||
|
// we're only interested in checkdng that sector data can be read.
|
||||||
|
//
|
||||||
|
// When using builtin proof computation (no PoSt workers, and DisableBuiltinWindowPoSt is set to false), this process
|
||||||
|
// can save a lot of time and compute resources in the case that some sectors are not readable - this is caused by
|
||||||
|
// the builtin logic not skipping snark computation when some sectors need to be skipped.
|
||||||
|
//
|
||||||
|
// When using PoSt workers, this process is mostly redundant, with PoSt workers challenges will be read once, and
|
||||||
|
// if challenges for some sectors aren't readable, those sectors will just get skipped.
|
||||||
|
//
|
||||||
|
// Disabling sector pre-checks will slightly requice IO load when proving sectors, possibly resulting in shorter
|
||||||
|
// time to produce window PoSt. In setups with good IO capabilities the effect of this option on proving time should
|
||||||
|
// be negligible.
|
||||||
|
//
|
||||||
|
// NOTE: It likely is a bad idea to disable sector pre-checks in setups with no PoSt workers.
|
||||||
|
//
|
||||||
|
// NOTE: Even when this option is enabled, recovering sectors will be checked before recovery declaration message is
|
||||||
|
// sent to the chain
|
||||||
|
//
|
||||||
|
// After changing this option, confirm that the new value works in your setup by invoking
|
||||||
|
// 'lotus-miner proving compute window-post 0'
|
||||||
|
DisableWDPoStPreChecks bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type SealingConfig struct {
|
type SealingConfig struct {
|
||||||
|
@ -254,7 +254,7 @@ func StorageMiner(fc config.MinerFeeConfig) func(params StorageMinerParams) (*st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func WindowPostScheduler(fc config.MinerFeeConfig) func(params StorageMinerParams) (*wdpost.WindowPoStScheduler, error) {
|
func WindowPostScheduler(fc config.MinerFeeConfig, pc config.ProvingConfig) func(params StorageMinerParams) (*wdpost.WindowPoStScheduler, error) {
|
||||||
return func(params StorageMinerParams) (*wdpost.WindowPoStScheduler, error) {
|
return func(params StorageMinerParams) (*wdpost.WindowPoStScheduler, error) {
|
||||||
var (
|
var (
|
||||||
mctx = params.MetricsCtx
|
mctx = params.MetricsCtx
|
||||||
@ -269,7 +269,7 @@ func WindowPostScheduler(fc config.MinerFeeConfig) func(params StorageMinerParam
|
|||||||
|
|
||||||
ctx := helpers.LifecycleCtx(mctx, lc)
|
ctx := helpers.LifecycleCtx(mctx, lc)
|
||||||
|
|
||||||
fps, err := wdpost.NewWindowedPoStScheduler(api, fc, as, sealer, verif, sealer, j, maddr)
|
fps, err := wdpost.NewWindowedPoStScheduler(api, fc, pc, as, sealer, verif, sealer, j, maddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -335,10 +335,16 @@ func (s *WindowPoStScheduler) runPoStCycle(ctx context.Context, manual bool, di
|
|||||||
return nil, xerrors.Errorf("adding recoveries to set of sectors to prove: %w", err)
|
return nil, xerrors.Errorf("adding recoveries to set of sectors to prove: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
good, err := s.checkSectors(ctx, toProve, ts.Key())
|
good, err := toProve.Copy()
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("copy toProve: %w", err)
|
||||||
|
}
|
||||||
|
if !s.disablePreChecks {
|
||||||
|
good, err = s.checkSectors(ctx, toProve, ts.Key())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("checking sectors to skip: %w", err)
|
return nil, xerrors.Errorf("checking sectors to skip: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
good, err = bitfield.SubtractBitField(good, postSkipped)
|
good, err = bitfield.SubtractBitField(good, postSkipped)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -70,6 +70,7 @@ type WindowPoStScheduler struct {
|
|||||||
faultTracker sealer.FaultTracker
|
faultTracker sealer.FaultTracker
|
||||||
proofType abi.RegisteredPoStProof
|
proofType abi.RegisteredPoStProof
|
||||||
partitionSectors uint64
|
partitionSectors uint64
|
||||||
|
disablePreChecks bool
|
||||||
ch *changeHandler
|
ch *changeHandler
|
||||||
|
|
||||||
actor address.Address
|
actor address.Address
|
||||||
@ -84,6 +85,7 @@ type WindowPoStScheduler struct {
|
|||||||
// NewWindowedPoStScheduler creates a new WindowPoStScheduler scheduler.
|
// NewWindowedPoStScheduler creates a new WindowPoStScheduler scheduler.
|
||||||
func NewWindowedPoStScheduler(api NodeAPI,
|
func NewWindowedPoStScheduler(api NodeAPI,
|
||||||
cfg config.MinerFeeConfig,
|
cfg config.MinerFeeConfig,
|
||||||
|
pcfg config.ProvingConfig,
|
||||||
as *ctladdr.AddressSelector,
|
as *ctladdr.AddressSelector,
|
||||||
sp storiface.ProverPoSt,
|
sp storiface.ProverPoSt,
|
||||||
verif storiface.Verifier,
|
verif storiface.Verifier,
|
||||||
@ -104,6 +106,7 @@ func NewWindowedPoStScheduler(api NodeAPI,
|
|||||||
faultTracker: ft,
|
faultTracker: ft,
|
||||||
proofType: mi.WindowPoStProofType,
|
proofType: mi.WindowPoStProofType,
|
||||||
partitionSectors: mi.WindowPoStPartitionSectors,
|
partitionSectors: mi.WindowPoStPartitionSectors,
|
||||||
|
disablePreChecks: pcfg.DisableWDPoStPreChecks,
|
||||||
|
|
||||||
actor: actor,
|
actor: actor,
|
||||||
evtTypes: [...]journal.EventType{
|
evtTypes: [...]journal.EventType{
|
||||||
|
Loading…
Reference in New Issue
Block a user