diff --git a/chain/vm/gas_v0.go b/chain/vm/gas_v0.go index d86edbab8..a0543cb72 100644 --- a/chain/vm/gas_v0.go +++ b/chain/vm/gas_v0.go @@ -97,13 +97,16 @@ func (pl *pricelistV0) OnChainReturnValue(dataSize int) GasCharge { // OnMethodInvocation returns the gas used when invoking a method. func (pl *pricelistV0) OnMethodInvocation(value abi.TokenAmount, methodNum abi.MethodNum) GasCharge { ret := pl.sendBase + extra := "" if value != abi.NewTokenAmount(0) { ret += pl.sendTransferFunds + extra += "t" } if methodNum != builtin.MethodSend { ret += pl.sendInvokeMethod + extra += "i" } - return newGasCharge("OnMethodInvocation", ret, 0).WithVirtual(ret*4600, 0) + return newGasCharge("OnMethodInvocation", ret, 0).WithVirtual(86315, 0).WithExtra(extra) } // OnIpldGet returns the gas used for storing an object @@ -113,12 +116,12 @@ func (pl *pricelistV0) OnIpldGet(dataSize int) GasCharge { // OnIpldPut returns the gas used for storing an object func (pl *pricelistV0) OnIpldPut(dataSize int) GasCharge { - return newGasCharge("OnIpldPut", pl.ipldPutBase, int64(dataSize)*pl.ipldPutPerByte).WithExtra(dataSize).WithVirtual(475*(pl.ipldPutBase+int64(dataSize)*pl.ipldPutPerByte), 0) + return newGasCharge("OnIpldPut", pl.ipldPutBase, int64(dataSize)*pl.ipldPutPerByte).WithExtra(dataSize).WithVirtual(9151, 0) } // OnCreateActor returns the gas used for creating an actor func (pl *pricelistV0) OnCreateActor() GasCharge { - return newGasCharge("OnCreateActor", pl.createActorBase, pl.createActorExtra).WithVirtual(162*pl.createActorBase, 0) + return newGasCharge("OnCreateActor", pl.createActorBase, pl.createActorExtra).WithVirtual(6549, 0) } // OnDeleteActor returns the gas used for deleting an actor @@ -139,28 +142,28 @@ func (pl *pricelistV0) OnVerifySignature(sigType crypto.SigType, planTextSize in // OnHashing func (pl *pricelistV0) OnHashing(dataSize int) GasCharge { - return newGasCharge("OnHashing", pl.hashingBase+int64(dataSize)*pl.hashingPerByte, 0).WithExtra(dataSize).WithVirtual(256*(pl.hashingBase+int64(dataSize)*pl.hashingPerByte), 0) + return newGasCharge("OnHashing", pl.hashingBase+int64(dataSize)*pl.hashingPerByte, 0).WithExtra(dataSize).WithVirtual(7881, 0) } // OnComputeUnsealedSectorCid func (pl *pricelistV0) OnComputeUnsealedSectorCid(proofType abi.RegisteredSealProof, pieces []abi.PieceInfo) GasCharge { // TODO: this needs more cost tunning, check with @lotus - return newGasCharge("OnComputeUnsealedSectorCid", pl.computeUnsealedSectorCidBase, 0).WithVirtual(pl.computeUnsealedSectorCidBase*405, 0) + return newGasCharge("OnComputeUnsealedSectorCid", pl.computeUnsealedSectorCidBase, 0).WithVirtual(40536, 0) } // OnVerifySeal func (pl *pricelistV0) OnVerifySeal(info abi.SealVerifyInfo) GasCharge { // TODO: this needs more cost tunning, check with @lotus - return newGasCharge("OnVerifySeal", pl.verifySealBase, 0).WithVirtual(pl.verifySealBase*177500, 0) + return newGasCharge("OnVerifySeal", pl.verifySealBase, 0).WithVirtual(199954003, 0) } // OnVerifyPost func (pl *pricelistV0) OnVerifyPost(info abi.WindowPoStVerifyInfo) GasCharge { // TODO: this needs more cost tunning, check with @lotus - return newGasCharge("OnVerifyPost", pl.verifyPostBase, 0).WithVirtual(pl.verifyPostBase*385100, 0) + return newGasCharge("OnVerifyPost", pl.verifyPostBase, 0).WithVirtual(269570688, 0) } // OnVerifyConsensusFault func (pl *pricelistV0) OnVerifyConsensusFault() GasCharge { - return newGasCharge("OnVerifyConsensusFault", pl.verifyConsensusFault, 0).WithVirtual(pl.verifyConsensusFault*5466, 0) + return newGasCharge("OnVerifyConsensusFault", pl.verifyConsensusFault, 0).WithVirtual(54665, 0) } diff --git a/chain/vm/vm.go b/chain/vm/vm.go index 45114c4c5..c76f01dac 100644 --- a/chain/vm/vm.go +++ b/chain/vm/vm.go @@ -69,7 +69,7 @@ type gasChargingBlocks struct { } func (bs *gasChargingBlocks) Get(c cid.Cid) (block.Block, error) { - bs.chargeGas(newGasCharge("OnIpldGetStart", 0, 0)) + bs.chargeGas(newGasCharge("OnIpldGetStart", 0, 0).WithVirtual(40175)) blk, err := bs.under.Get(c) if err != nil { return nil, aerrors.Escalate(err, "failed to get block from blockstore") diff --git a/cmd/lotus-bench/import.go b/cmd/lotus-bench/import.go index 3d994f3b6..f76ef4644 100644 --- a/cmd/lotus-bench/import.go +++ b/cmd/lotus-bench/import.go @@ -280,18 +280,6 @@ func (s1 *stats) Combine(s2 *stats) { func tallyGasCharges(charges map[string]*stats, et types.ExecutionTrace) { for _, gc := range et.GasCharges { - - compGas := gc.VirtualComputeGas - if compGas == 0 { - compGas = 1 - } - compGas = 1 - - ratio := float64(compGas) / float64(gc.TimeTaken.Nanoseconds()) - ratio = 1 / ratio - if math.IsNaN(ratio) { - log.Errorf("NaN: comGas: %f, taken: %d", compGas, gc.TimeTaken.Nanoseconds()) - } name := gc.Name if eString, ok := gc.Extra.(string); ok { name += "-" + eString @@ -300,10 +288,22 @@ func tallyGasCharges(charges map[string]*stats, et types.ExecutionTrace) { _ = eInt } - s := charges[gc.Name] + compGas := gc.VirtualComputeGas + if compGas == 0 { + name += "-zerogas" + compGas = 1 + } + + ratio := float64(compGas) / float64(gc.TimeTaken.Nanoseconds()) + ratio = 1 / ratio + if math.IsNaN(ratio) { + log.Errorf("NaN: comGas: %f, taken: %d", compGas, gc.TimeTaken.Nanoseconds()) + } + + s := charges[name] if s == nil { s = new(stats) - charges[gc.Name] = s + charges[name] = s } s.AddPoint(ratio)