Skip to content

Commit

Permalink
simulation: refined vote size config, see vote-bundle-size-*
Browse files Browse the repository at this point in the history
  • Loading branch information
Saizan committed Jan 23, 2025
1 parent d92e7de commit 46eb34e
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 41 deletions.
4 changes: 2 additions & 2 deletions data/simulation/config.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ export interface Config {
"vote-validation-cpu-time-ms": number;
"vote-threshold": bigint;
"vote-one-eb-per-vrf-win": boolean;
"vote-size-bytes-constant": bigint;
"vote-size-bytes-per-node": bigint;
"vote-bundle-size-bytes-constant": bigint;
"vote-bundle-size-bytes-per-eb": bigint;

// Certificate Configuration
"cert-generation-cpu-time-ms-constant": number;
Expand Down
4 changes: 2 additions & 2 deletions data/simulation/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ vote-generation-cpu-time-ms-per-ib: 1.0
vote-validation-cpu-time-ms: 3.0
vote-threshold: 150
vote-one-eb-per-vrf-win: false
vote-size-bytes-constant: 32
vote-size-bytes-per-eb: 32
vote-bundle-size-bytes-constant: 32
vote-bundle-size-bytes-per-eb: 32

################################################################################
# Certificate Configuration
Expand Down
20 changes: 10 additions & 10 deletions data/simulation/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,16 @@
"tx-validation-cpu-time-ms": {
"type": "number"
},
"vote-bundle-size-bytes-constant": {
"additionalProperties": false,
"properties": {},
"type": "number"
},
"vote-bundle-size-bytes-per-eb": {
"additionalProperties": false,
"properties": {},
"type": "number"
},
"vote-generation-cpu-time-ms-constant": {
"type": "number"
},
Expand All @@ -199,16 +209,6 @@
"vote-one-eb-per-vrf-win": {
"type": "boolean"
},
"vote-size-bytes-constant": {
"additionalProperties": false,
"properties": {},
"type": "number"
},
"vote-size-bytes-per-node": {
"additionalProperties": false,
"properties": {},
"type": "number"
},
"vote-threshold": {
"additionalProperties": false,
"properties": {},
Expand Down
4 changes: 2 additions & 2 deletions data/simulation/former-ols-sim-default-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ vote-generation-cpu-time-ms-constant: 1
vote-generation-cpu-time-ms-per-ib: 1
vote-generation-probability: 500.0
vote-one-eb-per-vrf-win: false
vote-size-bytes-constant: 32
vote-size-bytes-per-node: 32
vote-bundle-size-bytes-constant: 32
vote-bundle-size-bytes-per-eb: 32
vote-threshold: 150
vote-validation-cpu-time-ms: 3
4 changes: 2 additions & 2 deletions data/simulation/former-ols-viz-default-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ vote-generation-cpu-time-ms-constant: 1
vote-generation-cpu-time-ms-per-ib: 1
vote-generation-probability: 500.0
vote-one-eb-per-vrf-win: false
vote-size-bytes-constant: 32
vote-size-bytes-per-node: 32
vote-bundle-size-bytes-constant: 32
vote-bundle-size-bytes-per-eb: 32
vote-threshold: 150
vote-validation-cpu-time-ms: 3
16 changes: 8 additions & 8 deletions simulation/src/LeiosProtocol/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ data Config = Config
, voteValidationCpuTimeMs :: DurationMs
, voteThreshold :: Word
, voteOneEbPerVrfWin :: Bool
, voteSizeBytesConstant :: SizeBytes
, voteSizeBytesPerNode :: SizeBytes
, voteBundleSizeBytesConstant :: SizeBytes
, voteBundleSizeBytesPerEb :: SizeBytes
, certGenerationCpuTimeMsConstant :: DurationMs
, certGenerationCpuTimeMsPerNode :: DurationMs
, certValidationCpuTimeMsConstant :: DurationMs
Expand Down Expand Up @@ -122,8 +122,8 @@ instance Default Config where
, voteValidationCpuTimeMs = 3.0
, voteThreshold = 150
, voteOneEbPerVrfWin = False
, voteSizeBytesConstant = 32
, voteSizeBytesPerNode = 32
, voteBundleSizeBytesConstant = 32
, voteBundleSizeBytesPerEb = 32
, certGenerationCpuTimeMsConstant = 50.0
, certGenerationCpuTimeMsPerNode = 1.0
, certValidationCpuTimeMsConstant = 50.0
Expand Down Expand Up @@ -174,8 +174,8 @@ configToKVsWith getter cfg =
, get @"voteValidationCpuTimeMs" getter cfg
, get @"voteThreshold" getter cfg
, get @"voteOneEbPerVrfWin" getter cfg
, get @"voteSizeBytesConstant" getter cfg
, get @"voteSizeBytesPerNode" getter cfg
, get @"voteBundleSizeBytesConstant" getter cfg
, get @"voteBundleSizeBytesPerEb" getter cfg
, get @"certGenerationCpuTimeMsConstant" getter cfg
, get @"certGenerationCpuTimeMsPerNode" getter cfg
, get @"certValidationCpuTimeMsConstant" getter cfg
Expand Down Expand Up @@ -236,8 +236,8 @@ instance FromJSON Config where
voteValidationCpuTimeMs <- parseFieldOrDefault @Config @"voteValidationCpuTimeMs" obj
voteThreshold <- parseFieldOrDefault @Config @"voteThreshold" obj
voteOneEbPerVrfWin <- parseFieldOrDefault @Config @"voteOneEbPerVrfWin" obj
voteSizeBytesConstant <- parseFieldOrDefault @Config @"voteSizeBytesConstant" obj
voteSizeBytesPerNode <- parseFieldOrDefault @Config @"voteSizeBytesPerNode" obj
voteBundleSizeBytesConstant <- parseFieldOrDefault @Config @"voteBundleSizeBytesConstant" obj
voteBundleSizeBytesPerEb <- parseFieldOrDefault @Config @"voteBundleSizeBytesPerEb" obj
certGenerationCpuTimeMsConstant <- parseFieldOrDefault @Config @"certGenerationCpuTimeMsConstant" obj
certGenerationCpuTimeMsPerNode <- parseFieldOrDefault @Config @"certGenerationCpuTimeMsPerNode" obj
certValidationCpuTimeMsConstant <- parseFieldOrDefault @Config @"certValidationCpuTimeMsConstant" obj
Expand Down
46 changes: 31 additions & 15 deletions simulation/src/LeiosProtocol/Short.hs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ convertConfig disk =
, delays
}
where
forEach n xs = n * fromIntegral (length xs)
forEachKey n m = n * fromIntegral (Map.size m)
durationMsToDiffTime (DurationMs d) = secondsToDiffTime $ d / 1000
praos =
PraosConfig
{ blockFrequencyPerSlot = disk.rbGenerationProbability
Expand All @@ -94,42 +97,53 @@ convertConfig disk =
, blockValidationDelay = \(Block _ body) ->
let legacy
| body.payload > 0 =
durationMsToDiffTime disk.rbBodyLegacyPraosPayloadValidationCpuTimeMsConstant
+ durationMsToDiffTime disk.rbBodyLegacyPraosPayloadValidationCpuTimeMsPerByte * fromIntegral body.payload
durationMsToDiffTime $
disk.rbBodyLegacyPraosPayloadValidationCpuTimeMsConstant
+ disk.rbBodyLegacyPraosPayloadValidationCpuTimeMsPerByte * fromIntegral body.payload
| otherwise = 0
in legacy
+ sum (map (certificateValidation . snd) body.endorseBlocks)
, headerValidationDelay = const $ durationMsToDiffTime disk.ibHeadValidationCpuTimeMs
, blockGenerationDelay = \(Block _ body) ->
durationMsToDiffTime disk.rbGenerationCpuTimeMs + sum (map (certificateGeneration . snd) body.endorseBlocks)
durationMsToDiffTime disk.rbGenerationCpuTimeMs
+ sum (map (certificateGeneration . snd) body.endorseBlocks)
}
certificateSize (Certificate xs) =
certificateSize (Certificate votesMap) =
fromIntegral $
disk.certSizeBytesConstant
+ fromIntegral (Map.size xs) * disk.certSizeBytesPerNode
+ disk.certSizeBytesPerNode `forEachKey` votesMap
sizes =
SizesConfig
{ inputBlockHeader = fromIntegral disk.ibHeadSizeBytes
, inputBlockBodyAvgSize = fromIntegral disk.ibBodyAvgSizeBytes
, inputBlockBodyMaxSize = fromIntegral disk.ibBodyMaxSizeBytes
, endorseBlock = \eb -> fromIntegral $ disk.ebSizeBytesConstant + fromIntegral (length eb.inputBlocks) * disk.ebSizeBytesPerIb
, voteMsg = \_vt -> fromIntegral disk.voteSizeBytesConstant -- TODO: include a per-eb factor.
, endorseBlock = \eb ->
fromIntegral $
disk.ebSizeBytesConstant
+ disk.ebSizeBytesPerIb `forEach` eb.inputBlocks
, voteMsg = \vt ->
fromIntegral $
disk.voteBundleSizeBytesConstant
+ disk.voteBundleSizeBytesPerEb `forEach` vt.endorseBlocks
, certificate = const $ error "certificate size config already included in PraosConfig{bodySize}"
, rankingBlockLegacyPraosPayloadAvgSize = fromIntegral disk.rbBodyLegacyPraosPayloadAvgSizeBytes
}
durationMsToDiffTime (DurationMs d) = secondsToDiffTime $ d / 1000
certificateGeneration (Certificate xs) =
durationMsToDiffTime $ disk.certGenerationCpuTimeMsConstant + fromIntegral (length xs) * disk.certGenerationCpuTimeMsPerNode
certificateValidation (Certificate xs) =
durationMsToDiffTime $ disk.certValidationCpuTimeMsConstant + fromIntegral (length xs) * disk.certValidationCpuTimeMsPerNode
certificateGeneration (Certificate votesMap) =
durationMsToDiffTime $
disk.certGenerationCpuTimeMsConstant
+ disk.certGenerationCpuTimeMsPerNode `forEachKey` votesMap
certificateValidation (Certificate votesMap) =
durationMsToDiffTime $
disk.certValidationCpuTimeMsConstant
+ disk.certValidationCpuTimeMsPerNode `forEachKey` votesMap
delays =
LeiosDelays
{ inputBlockGeneration = const $ durationMsToDiffTime disk.ibGenerationCpuTimeMs
, inputBlockHeaderValidation = const $ durationMsToDiffTime disk.ibHeadValidationCpuTimeMs
, inputBlockValidation = \ib ->
durationMsToDiffTime $
disk.ibBodyValidationCpuTimeMsConstant
+ fromIntegral ib.body.size * disk.ibBodyValidationCpuTimeMsPerByte
+ disk.ibBodyValidationCpuTimeMsPerByte * fromIntegral ib.body.size
, endorseBlockGeneration = const $ durationMsToDiffTime disk.ebGenerationCpuTimeMs
, endorseBlockValidation = const $ durationMsToDiffTime disk.ebValidationCpuTimeMs
, -- TODO: can parallelize?
Expand All @@ -138,10 +152,12 @@ convertConfig disk =
durationMsToDiffTime $
sum
[ disk.voteGenerationCpuTimeMsConstant
+ disk.voteGenerationCpuTimeMsPerIb * fromIntegral (length eb.inputBlocks)
+ disk.voteGenerationCpuTimeMsPerIb `forEach` eb.inputBlocks
| eb <- ebs
]
, voteMsgValidation = \vm -> durationMsToDiffTime $ fromIntegral (length vm.endorseBlocks) * disk.voteValidationCpuTimeMs
, voteMsgValidation = \vm ->
durationMsToDiffTime $
disk.voteValidationCpuTimeMs `forEach` vm.endorseBlocks
, certificateGeneration = const $ error "certificateGeneration delay included in RB generation"
, certificateValidation = const $ error "certificateValidation delay included in RB validation"
}
Expand Down

0 comments on commit 46eb34e

Please sign in to comment.