Skip to content

Commit

Permalink
tx-generator: cabal-level bechmarks
Browse files Browse the repository at this point in the history
* Add a small built-in tx-generator-script.
* Add cabal-level criterion benchmark.
* Add new 'selftest' command: write some txs to a outfile.
  • Loading branch information
MarcFontaine committed Apr 7, 2022
1 parent 59932f7 commit 48da5cf
Show file tree
Hide file tree
Showing 9 changed files with 354 additions and 26 deletions.
29 changes: 19 additions & 10 deletions bench/script/test-stand-alone.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[
{ "SetProtocolParameters": { "UseLocalProtocolFile": "/tmp/t2.json" } },
{ "SetProtocolParameters": { "UseLocalProtocolFile": "/tmp/t2.json" } },
{ "Set": { "SNumberOfInputsPerTx": 2 } },
{ "Set": { "SNumberOfOutputsPerTx": 2 } },
{ "Set": { "STxAdditionalSize": 39 } },
Expand All @@ -8,6 +8,7 @@
{ "Set": { "STTL": 1000000 } },
{ "Set": { "SEra": "Allegra" } },
{ "Set": { "SNetworkId": { "Testnet": 42 } } },
{ "InitWallet": "test-wallet" },
{ "DefineSigningKey":
[ "pass-partout"
, {
Expand All @@ -16,50 +17,58 @@
"cborHex": "58200b6c317eb6c9762898fa41ca9d683003f86899ab0f2f6dbaf244e415b62826a2"
} ] },
{ "AddFund":
[ "900fc5da77a0747da53f7675cbb7d149d46779346dea2f879ab811ccc72a2162#0"
[ "test-wallet"
, "900fc5da77a0747da53f7675cbb7d149d46779346dea2f879ab811ccc72a2162#0"
, 90000000000000
, "pass-partout"
] },
{ "CreateChange": [
"test-wallet",
"test-wallet",
{ "DumpToFile": "/tmp/script-txs.txt" },
{ "PayToAddr": "pass-partout" },
149200212345,
1
] },
{ "CreateChange": [
"test-wallet",
"test-wallet",
{ "DumpToFile": "/tmp/script-txs.txt" },
{ "PayToCollateral": "pass-partout" },
149200000000,
1
] },
{ "CreateChange": [
"test-wallet",
"test-wallet",
{ "DumpToFile": "/tmp/split-txs.txt" },
{ "PayToAddr": "pass-partout" },
2200000000000,
10
] },
{ "CreateChange": [
"test-wallet",
"test-wallet",
{ "DumpToFile": "/tmp/split-txs.txt" },
{ "PayToAddr": "pass-partout" },
70000000000,
300
] },
{ "CreateChange": [
"test-wallet",
"test-wallet",
{ "DumpToFile": "/tmp/script-txs.txt" },
{ "PayToScript": [ "bench/script/sum1ToN.plutus", 3 ] },
{ "PayToAddr": "pass-partout" },
2300000000,
9000
] },
] },
{ "RunBenchmark": [
"test-wallet",
{ "DumpToFile": "/tmp/submit-txs.txt" },
{ "SpendScript": [
"bench/script/sum1ToN.plutus",
{ "PreExecuteScript": [] },
3,
6
] },
{ "SpendOutput": []},
"walletBasedBenchmark",
4000,
10
] }

]
208 changes: 208 additions & 0 deletions bench/tx-generator/data/protocol-parameters.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
{
"txFeePerByte": 44,
"minUTxOValue": null,
"decentralization": 0,
"utxoCostPerWord": 34482,
"stakePoolDeposit": 500000000,
"poolRetireMaxEpoch": 18,
"extraPraosEntropy": null,
"collateralPercentage": 150,
"stakePoolTargetNum": 500,
"maxBlockBodySize": 65536,
"minPoolCost": 340000000,
"maxTxSize": 16384,
"treasuryCut": 0.2,
"maxBlockExecutionUnits": {
"memory": 50000000,
"steps": 40000000000
},
"maxCollateralInputs": 3,
"maxValueSize": 5000,
"maxBlockHeaderSize": 1100,
"maxTxExecutionUnits": {
"memory": 10000000,
"steps": 10000000000
},
"costModels": {
"PlutusScriptV1": {
"cekConstCost-exBudgetMemory": 100,
"unBData-cpu-arguments": 150000,
"divideInteger-memory-arguments-minimum": 1,
"nullList-cpu-arguments": 150000,
"cekDelayCost-exBudgetMemory": 100,
"appendByteString-cpu-arguments-slope": 621,
"sha2_256-memory-arguments": 4,
"multiplyInteger-cpu-arguments-intercept": 61516,
"iData-cpu-arguments": 150000,
"equalsString-cpu-arguments-intercept": 150000,
"trace-cpu-arguments": 150000,
"lessThanEqualsByteString-cpu-arguments-intercept": 103599,
"encodeUtf8-cpu-arguments-slope": 1000,
"equalsString-cpu-arguments-constant": 1000,
"blake2b-cpu-arguments-slope": 29175,
"consByteString-memory-arguments-intercept": 0,
"headList-cpu-arguments": 150000,
"listData-cpu-arguments": 150000,
"divideInteger-cpu-arguments-model-arguments-slope": 118,
"divideInteger-memory-arguments-slope": 1,
"bData-cpu-arguments": 150000,
"chooseData-memory-arguments": 32,
"cekBuiltinCost-exBudgetCPU": 29773,
"mkNilData-memory-arguments": 32,
"equalsInteger-cpu-arguments-intercept": 136542,
"lengthOfByteString-cpu-arguments": 150000,
"subtractInteger-cpu-arguments-slope": 0,
"unIData-cpu-arguments": 150000,
"sliceByteString-cpu-arguments-slope": 5000,
"unMapData-cpu-arguments": 150000,
"modInteger-cpu-arguments-model-arguments-slope": 118,
"lessThanInteger-cpu-arguments-intercept": 179690,
"appendString-memory-arguments-intercept": 0,
"mkCons-cpu-arguments": 150000,
"sha3_256-cpu-arguments-slope": 82363,
"ifThenElse-cpu-arguments": 1,
"mkNilPairData-cpu-arguments": 150000,
"constrData-memory-arguments": 32,
"lessThanEqualsInteger-cpu-arguments-intercept": 145276,
"addInteger-memory-arguments-slope": 1,
"chooseList-memory-arguments": 32,
"equalsData-memory-arguments": 1,
"decodeUtf8-cpu-arguments-intercept": 150000,
"bData-memory-arguments": 32,
"lessThanByteString-cpu-arguments-slope": 248,
"listData-memory-arguments": 32,
"consByteString-cpu-arguments-intercept": 150000,
"headList-memory-arguments": 32,
"subtractInteger-memory-arguments-slope": 1,
"appendByteString-memory-arguments-intercept": 0,
"unIData-memory-arguments": 32,
"remainderInteger-memory-arguments-minimum": 1,
"lengthOfByteString-memory-arguments": 4,
"encodeUtf8-memory-arguments-intercept": 0,
"cekStartupCost-exBudgetCPU": 100,
"remainderInteger-memory-arguments-slope": 1,
"multiplyInteger-memory-arguments-intercept": 0,
"cekForceCost-exBudgetCPU": 29773,
"unListData-memory-arguments": 32,
"sha2_256-cpu-arguments-slope": 29175,
"indexByteString-memory-arguments": 1,
"equalsInteger-memory-arguments": 1,
"remainderInteger-cpu-arguments-model-arguments-slope": 118,
"cekVarCost-exBudgetCPU": 29773,
"lessThanEqualsInteger-cpu-arguments-slope": 1366,
"addInteger-memory-arguments-intercept": 1,
"sndPair-cpu-arguments": 150000,
"lessThanInteger-memory-arguments": 1,
"cekLamCost-exBudgetCPU": 29773,
"chooseUnit-cpu-arguments": 150000,
"decodeUtf8-cpu-arguments-slope": 1000,
"fstPair-cpu-arguments": 150000,
"quotientInteger-memory-arguments-minimum": 1,
"lessThanEqualsInteger-memory-arguments": 1,
"chooseUnit-memory-arguments": 32,
"fstPair-memory-arguments": 32,
"quotientInteger-cpu-arguments-constant": 148000,
"mapData-cpu-arguments": 150000,
"unConstrData-cpu-arguments": 150000,
"mkPairData-cpu-arguments": 150000,
"sndPair-memory-arguments": 32,
"decodeUtf8-memory-arguments-slope": 8,
"equalsData-cpu-arguments-intercept": 150000,
"addInteger-cpu-arguments-intercept": 197209,
"modInteger-memory-arguments-intercept": 0,
"cekStartupCost-exBudgetMemory": 100,
"divideInteger-cpu-arguments-model-arguments-intercept": 425507,
"divideInteger-memory-arguments-intercept": 0,
"cekVarCost-exBudgetMemory": 100,
"consByteString-memory-arguments-slope": 1,
"cekForceCost-exBudgetMemory": 100,
"unListData-cpu-arguments": 150000,
"subtractInteger-cpu-arguments-intercept": 197209,
"indexByteString-cpu-arguments": 150000,
"equalsInteger-cpu-arguments-slope": 1326,
"lessThanByteString-memory-arguments": 1,
"blake2b-cpu-arguments-intercept": 2477736,
"encodeUtf8-cpu-arguments-intercept": 150000,
"multiplyInteger-cpu-arguments-slope": 11218,
"tailList-cpu-arguments": 150000,
"appendByteString-cpu-arguments-intercept": 396231,
"equalsString-cpu-arguments-slope": 1000,
"lessThanEqualsByteString-cpu-arguments-slope": 248,
"remainderInteger-cpu-arguments-constant": 148000,
"chooseList-cpu-arguments": 150000,
"equalsByteString-memory-arguments": 1,
"constrData-cpu-arguments": 150000,
"cekApplyCost-exBudgetCPU": 29773,
"equalsData-cpu-arguments-slope": 10000,
"decodeUtf8-memory-arguments-intercept": 0,
"modInteger-memory-arguments-slope": 1,
"addInteger-cpu-arguments-slope": 0,
"appendString-cpu-arguments-intercept": 150000,
"quotientInteger-cpu-arguments-model-arguments-slope": 118,
"unMapData-memory-arguments": 32,
"cekApplyCost-exBudgetMemory": 100,
"quotientInteger-memory-arguments-slope": 1,
"mkNilPairData-memory-arguments": 32,
"ifThenElse-memory-arguments": 1,
"equalsByteString-cpu-arguments-slope": 247,
"sliceByteString-memory-arguments-slope": 1,
"sha3_256-memory-arguments": 4,
"mkCons-memory-arguments": 32,
"verifySignature-cpu-arguments-intercept": 3345831,
"cekBuiltinCost-exBudgetMemory": 100,
"remainderInteger-memory-arguments-intercept": 0,
"lessThanEqualsByteString-memory-arguments": 1,
"mkNilData-cpu-arguments": 150000,
"equalsString-memory-arguments": 1,
"chooseData-cpu-arguments": 150000,
"remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
"tailList-memory-arguments": 32,
"sha2_256-cpu-arguments-intercept": 2477736,
"multiplyInteger-memory-arguments-slope": 1,
"iData-memory-arguments": 32,
"divideInteger-cpu-arguments-constant": 148000,
"cekDelayCost-exBudgetCPU": 29773,
"encodeUtf8-memory-arguments-slope": 8,
"subtractInteger-memory-arguments-intercept": 1,
"nullList-memory-arguments": 32,
"lessThanByteString-cpu-arguments-intercept": 103599,
"appendByteString-memory-arguments-slope": 1,
"blake2b-memory-arguments": 4,
"unBData-memory-arguments": 32,
"cekConstCost-exBudgetCPU": 29773,
"consByteString-cpu-arguments-slope": 1000,
"trace-memory-arguments": 32,
"quotientInteger-memory-arguments-intercept": 0,
"mapData-memory-arguments": 32,
"verifySignature-cpu-arguments-slope": 1,
"quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
"modInteger-cpu-arguments-constant": 148000,
"appendString-cpu-arguments-slope": 1000,
"unConstrData-memory-arguments": 32,
"mkPairData-memory-arguments": 32,
"equalsByteString-cpu-arguments-constant": 150000,
"equalsByteString-cpu-arguments-intercept": 112536,
"sliceByteString-memory-arguments-intercept": 0,
"lessThanInteger-cpu-arguments-slope": 497,
"verifySignature-memory-arguments": 1,
"cekLamCost-exBudgetMemory": 100,
"sliceByteString-cpu-arguments-intercept": 150000,
"modInteger-cpu-arguments-model-arguments-intercept": 425507,
"modInteger-memory-arguments-minimum": 1,
"appendString-memory-arguments-slope": 1,
"sha3_256-cpu-arguments-intercept": 0
}
},
"protocolVersion": {
"minor": 0,
"major": 5
},
"txFeeFixed": 155381,
"stakeAddressDeposit": 2000000,
"monetaryExpansion": 3.0e-3,
"poolPledgeInfluence": 0.3,
"executionUnitPrices": {
"priceSteps": 7.21e-5,
"priceMemory": 5.77e-2
}
}
12 changes: 11 additions & 1 deletion bench/tx-generator/src/Cardano/Benchmarking/Command.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ import Cardano.Benchmarking.Compiler (compileOptions)
import Cardano.Benchmarking.NixOptions (parseNixServiceOptions)
import Cardano.Benchmarking.Script (runScript, parseScriptFileAeson)
import Cardano.Benchmarking.Script.Aeson (prettyPrint)
import Cardano.Benchmarking.Script.Selftest (runSelftest)

data Command
= Json FilePath
| JsonHL FilePath
| Compile FilePath
| Selftest FilePath

runCommand :: IO ()
runCommand = withIOManager $ \iocp -> do
Expand All @@ -47,6 +49,7 @@ runCommand = withIOManager $ \iocp -> do
case compileOptions o of
Right script -> BSL.putStr $ prettyPrint script
err -> handleError err
Selftest outFile -> runSelftest iocp (Just outFile) >>= handleError
where
handleError :: Show a => Either a b -> IO ()
handleError = \case
Expand All @@ -55,7 +58,7 @@ runCommand = withIOManager $ \iocp -> do

commandParser :: Parser Command
commandParser
= subparser (jsonCmd <> jsonHLCmd <> compileCmd)
= subparser (jsonCmd <> jsonHLCmd <> compileCmd <> selfTestCmd)
where
jsonCmd = command "json"
(Json <$> info (strArgument (metavar "FILEPATH"))
Expand All @@ -78,3 +81,10 @@ commandParser
<> header "tx-generator - compile flat-options to benchmarking script"
)
)
selfTestCmd = command "selftest"
(Selftest <$> info (strArgument (metavar "FILEPATH"))
( progDesc "tx-generator selftest"
<> fullDesc
<> header "tx-generator - run a built-in selftest write txs to a file"
)
)
2 changes: 0 additions & 2 deletions bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs
Original file line number Diff line number Diff line change
Expand Up @@ -224,5 +224,3 @@ newWallet n = do
name <- WalletName <$> newIdentifier n
emit $ InitWallet name
return name


15 changes: 8 additions & 7 deletions bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ runBenchmarkInEra sourceWallet submitMode (ThreadName threadName) txCount tps er
tracers <- get BenchTracers
networkId <- getUser TNetworkId
fundKey <- getName $ KeyName "pass-partout" -- should be walletkey
targets <- getUser TTargets
(NumberOfInputsPerTx numInputs) <- getUser TNumberOfInputsPerTx
(NumberOfOutputsPerTx numOutputs) <- getUser TNumberOfOutputsPerTx
fee <- getUser TFee
Expand All @@ -269,7 +268,6 @@ runBenchmarkInEra sourceWallet submitMode (ThreadName threadName) txCount tps er
walletRefSrc <- getName sourceWallet
let walletRefDst = walletRefSrc
metadata <- makeMetadata
connectClient <- getConnectClient
let
(Quantity minValue) = lovelaceToQuantity $ fromIntegral numOutputs * minValuePerUTxO + fee

Expand Down Expand Up @@ -303,11 +301,14 @@ runBenchmarkInEra sourceWallet submitMode (ThreadName threadName) txCount tps er
walletScript :: FundSet.Target -> WalletScript era
walletScript = benchmarkWalletScript walletRefSrc txGenerator txCount (const fundSource) inToOut toUTxO fundToStore

coreCall :: AsType era -> ExceptT TxGenError IO AsyncBenchmarkControl
coreCall eraProxy = GeneratorTx.walletBenchmark (btTxSubmit_ tracers) (btN2N_ tracers) connectClient
threadName targets tps LogErrors eraProxy txCount walletScript
case submitMode of
NodeToNode -> do
targets <- getUser TTargets
connectClient <- getConnectClient
let
coreCall :: AsType era -> ExceptT TxGenError IO AsyncBenchmarkControl
coreCall eraProxy = GeneratorTx.walletBenchmark (btTxSubmit_ tracers) (btN2N_ tracers) connectClient
threadName targets tps LogErrors eraProxy txCount walletScript
ret <- liftIO $ runExceptT $ coreCall era
case ret of
Left err -> liftTxGenError err
Expand All @@ -327,7 +328,6 @@ runPlutusBenchmark ::
-> ActionM ()
runPlutusBenchmark sourceWallet submitMode scriptFile scriptBudget scriptData scriptRedeemer (ThreadName threadName) txCount tps = do
tracers <- get BenchTracers
targets <- getUser TTargets
(NumberOfInputsPerTx numInputs) <- getUser TNumberOfInputsPerTx
(NumberOfOutputsPerTx numOutputs) <- getUser TNumberOfOutputsPerTx
networkId <- getUser TNetworkId
Expand All @@ -351,7 +351,6 @@ runPlutusBenchmark sourceWallet submitMode scriptFile scriptBudget scriptData sc
baseFee <- getUser TFee
_minValuePerUTxO <- getUser TMinValuePerUTxO -- TODO:Fix
metadata <- makeMetadata
connectClient <- getConnectClient

let costsPreRun = preExecuteScript protocolParameters script scriptData scriptRedeemer
executionUnits <- case (scriptBudget, costsPreRun) of
Expand Down Expand Up @@ -430,6 +429,8 @@ runPlutusBenchmark sourceWallet submitMode scriptFile scriptBudget scriptData sc

case submitMode of
NodeToNode -> do
targets <- getUser TTargets
connectClient <- getConnectClient
ret <- liftIO $ runExceptT $ GeneratorTx.walletBenchmark (btTxSubmit_ tracers) (btN2N_ tracers) connectClient
threadName targets tps LogErrors AsAlonzoEra txCount walletScript
case ret of
Expand Down
Loading

0 comments on commit 48da5cf

Please sign in to comment.