-
Notifications
You must be signed in to change notification settings - Fork 86
Open
Description
(Moved from #1598 (comment) after I realised we're talking about a slightly different thing, I jumped the gun).
Yesterday someone was asking about gas usage of "sector extensions or recoveries". I had a quick look at some example messages for ExtendSectorExpiration2, which involved verified claims, and came to the conclusion that we should absolutely look at optimising them for that case at least.
bafy2bzaceaqaxndnsczslx3cx35q6tluaisidgs36ipxsemksaqafehlcifuy is one such message:
- 402 separate calls to verifreg here
- 33% of the gas is spent in the miner actor, the majority being storage gas writing new sector infos out which is understandable.
- The rest is divided by 402, so it's lots of small cuts from executing wasm.
They all look like some variation of this:
Subcall (f02301➜f06) gas charges:
┌───────────────────────┬───────┬─────────────┬────────┬─────────────┬────────┬───────────┬────────┐
│ Type │ Count │ Storage Gas │ S% │ Compute Gas │ C% │ Total Gas │ T% │
├───────────────────────┼───────┼─────────────┼────────┼─────────────┼────────┼───────────┼────────┤
│ OnActorGetRoot │ 1 │ 0 │ 0.00 │ 300 │ 0.01 │ 300 │ 0.00 │
│ OnBlockCreate │ 1 │ 662 │ 0.05 │ 209 │ 0.00 │ 871 │ 0.01 │
│ OnBlockOpen │ 7 │ 67320 │ 4.88 │ 48900 │ 0.91 │ 116220 │ 1.72 │
│ OnBlockOpenBase │ 7 │ 1312080 │ 95.07 │ 2100 │ 0.04 │ 1314180 │ 19.50 │
│ OnBlockRead │ 8 │ 0 │ 0.00 │ 4656 │ 0.09 │ 4656 │ 0.07 │
│ OnBlockStat │ 1 │ 0 │ 0.00 │ 0 │ 0.00 │ 0 │ 0.00 │
│ OnGetActorCodeCid │ 1 │ 0 │ 0.00 │ 0 │ 0.00 │ 0 │ 0.00 │
│ OnGetBuiltinActorType │ 1 │ 0 │ 0.00 │ 0 │ 0.00 │ 0 │ 0.00 │
│ OnHashing │ 2 │ 0 │ 0.00 │ 42 │ 0.00 │ 42 │ 0.00 │
│ OnMessageContext │ 1 │ 0 │ 0.00 │ 0 │ 0.00 │ 0 │ 0.00 │
│ OnMethodInvocation │ 1 │ 0 │ 0.00 │ 75000 │ 1.40 │ 75000 │ 1.11 │
│ OnReturnValue │ 1 │ 0 │ 0.00 │ 0 │ 0.00 │ 0 │ 0.00 │
│ OnScanIpldLinks │ 8 │ 0 │ 0.00 │ 114815 │ 2.14 │ 114815 │ 1.70 │
│ OnSyscall │ 24 │ 0 │ 0.00 │ 336000 │ 6.27 │ 336000 │ 4.99 │
│ wasm_exec │ 26 │ 0 │ 0.00 │ 4304317 │ 80.33 │ 4304317 │ 63.88 │
│ wasm_memory_grow │ 1 │ 0 │ 0.00 │ 26215 │ 0.49 │ 26215 │ 0.39 │
│ wasm_memory_init │ 1 │ 0 │ 0.00 │ 445645 │ 8.32 │ 445645 │ 6.61 │
│ Total │ 92 │ 1380062 │ 100.00 │ 5358199 │ 100.00 │ 6738261 │ 100.00 │
└───────────────────────┴───────┴─────────────┴────────┴─────────────┴────────┴───────────┴────────┘
filecoin-project/ref-fvm#2102 is related to this, there's likely ways to reduce that call cost. But what we really should be doing is batching these calls outside of that inner per-sector loop.
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
📌 Triage