Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions analysis/sims/trace-processor/src/Leios/Tracing/Cpu.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ import System.IO (IOMode (WriteMode), hClose, hPutStrLn, openFile)

import qualified Data.Text as T (unpack)

data ItemKey
= ItemKey
data ItemKey = ItemKey
{ slot :: Int
, node :: Text
, task :: Text
Expand Down
12 changes: 5 additions & 7 deletions analysis/sims/trace-processor/src/Leios/Tracing/Lifecycle.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import Control.Concurrent.MVar (MVar, takeMVar)
import Control.Monad ((<=<))
import Control.Monad.IO.Class (liftIO)
import Control.Monad.State.Strict (StateT, execStateT, gets, modify')
import Data.Aeson (Value (Object), withObject, (.:))
import Data.Aeson (Value (Object), withObject, (.:), (.:?))
import Data.Aeson.Types (Parser, parseMaybe)
import Data.Function (on)
import Data.List (intercalate)
Expand All @@ -28,15 +28,13 @@ import qualified Data.Map.Strict as M (elems, fromList, insertWith, restrictKeys
import qualified Data.Set as S (map, singleton)
import qualified Data.Text as T (unpack)

data ItemKey
= ItemKey
data ItemKey = ItemKey
{ kind :: Text
, item :: Text
}
deriving (Eq, Ord, Show)

data ItemInfo
= ItemInfo
data ItemInfo = ItemInfo
{ size :: Minimum Int
, references :: Sum Int
, created :: Minimum Double
Expand Down Expand Up @@ -137,7 +135,7 @@ parseMessage "EBGenerated" item created =
do
size <- message .: "size_bytes"
let destination = mempty{toEB = created, inEBs = S.singleton item, references = Sum 1}
txs <- mapM (fmap ((,destination) . ItemKey "TX") . (.: "id")) =<< message .: "transactions"
txs <- maybe (pure []) (mapM (fmap ((,destination) . ItemKey "TX") . (.: "id"))) =<< message .:? "transactions"
ibs <- mapM (fmap ((,destination) . ItemKey "IB") . (.: "id")) =<< message .: "input_blocks"
ebs <- mapM (fmap ((,destination) . ItemKey "EB") . (.: "id")) =<< message .: "endorser_blocks"
pure (ItemKey{kind = "EB", item}, mempty{size, created}, M.fromList $ txs <> ibs <> ebs)
Expand All @@ -150,7 +148,7 @@ parseMessage "RBGenerated" item created =
(pure mempty)
(fmap (pure . (,mempty{toRB = created, references = Sum 1}) . ItemKey "EB") . (.: "id") <=< (.: "eb"))
=<< message .: "endorsement"
txs <- fmap ((,mempty{inRB = created, references = Sum 1}) . ItemKey "TX") <$> message .: "transactions"
txs <- maybe [] (fmap ((,mempty{inRB = created, references = Sum 1}) . ItemKey "TX")) <$> message .: "transactions"
pure (ItemKey{kind = "RB", item}, mempty{size, created}, M.fromList $ ebs <> txs)
parseMessage _ _ _ =
const $ fail "Ignore"
Expand Down
6 changes: 2 additions & 4 deletions analysis/sims/trace-processor/src/Leios/Tracing/Receipt.hs
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,13 @@ import System.IO (IOMode (WriteMode), hClose, hPutStrLn, openFile)
import qualified Data.Map.Strict as M (insertWith, (!))
import qualified Data.Text as T (unpack)

data ItemKey
= ItemKey
data ItemKey = ItemKey
{ kind :: Text
, item :: Text
}
deriving (Eq, Ord, Show)

data ItemInfo
= ItemInfo
data ItemInfo = ItemInfo
{ producer :: Text
, sent :: Minimum Double
, size :: Maximum Double
Expand Down
12 changes: 4 additions & 8 deletions analysis/sims/trace-processor/src/Leios/Tracing/Resource.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,13 @@ import Leios.Tracing.Util (Maximum (..))
import qualified Data.Map.Strict as M (insertWith, map, mapKeysWith, toList)
import qualified Data.Text as T (unpack)

data ItemKey'
= ItemKey'
data ItemKey' = ItemKey'
{ slot' :: Int
, node' :: Text
}
deriving (Eq, Ord, Show)

data ItemInfo'
= ItemInfo'
data ItemInfo' = ItemInfo'
{ egress' :: Sum Double
, disk' :: Sum Double
, cpu' :: Sum Double
Expand All @@ -58,14 +56,12 @@ instance Monoid ItemInfo' where

type Index' = Map ItemKey' ItemInfo'

newtype ItemKey
= ItemKey
newtype ItemKey = ItemKey
{ node :: Text
}
deriving (Eq, Ord, Show)

data ItemInfo
= ItemInfo
data ItemInfo = ItemInfo
{ egress :: Sum Double
, disk :: Sum Double
, totalCpu :: Sum Double
Expand Down
3 changes: 3 additions & 0 deletions data/simulation/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ eb-max-age-for-relay-slots: 40
# Only relevant when running with the "full-without-ibs" variant.
eb-referenced-txs-max-size-bytes: 16384000

# For Linear Leios
eb-body-avg-size-bytes: 2500000

################################################################################
# Vote Configuration
################################################################################
Expand Down
24 changes: 23 additions & 1 deletion leios-trace-hs/src/LeiosConfig.hs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ instance Default CleanupPolicies where
allCleanupPolicies :: CleanupPolicies
allCleanupPolicies = CleanupPolicies $ Set.fromList [minBound .. maxBound]

data LeiosVariant = Short | Full
data LeiosVariant = Short | Full | Linear
deriving (Show, Eq, Generic)

data Config = Config
Expand All @@ -97,6 +97,8 @@ data Config = Config
, simulateTransactions :: Bool
, leiosStageLengthSlots :: Word
, leiosStageActiveVotingSlots :: Word
, linearVoteStageLengthSlots :: Word
, linearDiffuseStageLengthSlots :: Word
, leiosVoteSendRecvStages :: Bool
, leiosVariant :: LeiosVariant
, leiosLateIbInclusion :: Bool
Expand Down Expand Up @@ -132,6 +134,9 @@ data Config = Config
, ebValidationCpuTimeMs :: DurationMs
, ebSizeBytesConstant :: SizeBytes
, ebSizeBytesPerIb :: SizeBytes
, ebBodyAvgSizeBytes :: SizeBytes
, ebBodyValidationCpuTimeMsConstant :: DurationMs
, ebBodyValidationCpuTimeMsPerByte :: DurationMs
, ebDiffusionStrategy :: DiffusionStrategy
, ebDiffusionMaxWindowSize :: Word16
, ebDiffusionMaxHeadersToRequest :: Word16
Expand All @@ -141,6 +146,7 @@ data Config = Config
, voteGenerationProbability :: Double
, voteGenerationCpuTimeMsConstant :: DurationMs
, voteGenerationCpuTimeMsPerIb :: DurationMs
, voteGenerationCpuTimeMsPerTx :: DurationMs
, voteValidationCpuTimeMs :: DurationMs
, voteThreshold :: Word
, voteBundleSizeBytesConstant :: SizeBytes
Expand Down Expand Up @@ -170,6 +176,8 @@ instance Default Config where
, simulateTransactions = True
, leiosStageLengthSlots = 20
, leiosStageActiveVotingSlots = 1
, linearVoteStageLengthSlots = 5
, linearDiffuseStageLengthSlots = 5
, leiosVoteSendRecvStages = False
, leiosVariant = Short
, leiosLateIbInclusion = True
Expand Down Expand Up @@ -205,6 +213,9 @@ instance Default Config where
, ebValidationCpuTimeMs = 1.0
, ebSizeBytesConstant = 240
, ebSizeBytesPerIb = 32
, ebBodyAvgSizeBytes = 2500000
, ebBodyValidationCpuTimeMsConstant = 50.0
, ebBodyValidationCpuTimeMsPerByte = 0.0005
, ebDiffusionStrategy = PeerOrder
, ebDiffusionMaxWindowSize = 100
, ebDiffusionMaxHeadersToRequest = 100
Expand All @@ -214,6 +225,7 @@ instance Default Config where
, voteGenerationProbability = 500.0
, voteGenerationCpuTimeMsConstant = 0.164
, voteGenerationCpuTimeMsPerIb = 0.0
, voteGenerationCpuTimeMsPerTx = 0.0
, voteValidationCpuTimeMs = 0.816
, voteThreshold = 300
, voteBundleSizeBytesConstant = 0
Expand Down Expand Up @@ -282,6 +294,9 @@ configToKVsWith getter cfg =
, get @"ebValidationCpuTimeMs" getter cfg
, get @"ebSizeBytesConstant" getter cfg
, get @"ebSizeBytesPerIb" getter cfg
, get @"ebBodyAvgSizeBytes" getter cfg
, get @"ebBodyValidationCpuTimeMsConstant" getter cfg
, get @"ebBodyValidationCpuTimeMsPerByte" getter cfg
, get @"ebDiffusionStrategy" getter cfg
, get @"ebDiffusionMaxWindowSize" getter cfg
, get @"ebDiffusionMaxHeadersToRequest" getter cfg
Expand All @@ -291,6 +306,7 @@ configToKVsWith getter cfg =
, get @"voteGenerationProbability" getter cfg
, get @"voteGenerationCpuTimeMsConstant" getter cfg
, get @"voteGenerationCpuTimeMsPerIb" getter cfg
, get @"voteGenerationCpuTimeMsPerTx" getter cfg
, get @"voteValidationCpuTimeMs" getter cfg
, get @"voteThreshold" getter cfg
, get @"voteBundleSizeBytesConstant" getter cfg
Expand Down Expand Up @@ -339,6 +355,8 @@ instance FromJSON Config where
leiosStageLengthSlots <- parseFieldOrDefault @Config @"leiosStageLengthSlots" obj
leiosStageActiveVotingSlots <- parseFieldOrDefault @Config @"leiosStageActiveVotingSlots" obj
leiosVoteSendRecvStages <- parseFieldOrDefault @Config @"leiosVoteSendRecvStages" obj
linearVoteStageLengthSlots <- parseFieldOrDefault @Config @"linearVoteStageLengthSlots" obj
linearDiffuseStageLengthSlots <- parseFieldOrDefault @Config @"linearDiffuseStageLengthSlots" obj
txGenerationDistribution <- parseFieldOrDefault @Config @"txGenerationDistribution" obj
txSizeBytesDistribution <- parseFieldOrDefault @Config @"txSizeBytesDistribution" obj
txValidationCpuTimeMs <- parseFieldOrDefault @Config @"txValidationCpuTimeMs" obj
Expand Down Expand Up @@ -369,6 +387,9 @@ instance FromJSON Config where
ebValidationCpuTimeMs <- parseFieldOrDefault @Config @"ebValidationCpuTimeMs" obj
ebSizeBytesConstant <- parseFieldOrDefault @Config @"ebSizeBytesConstant" obj
ebSizeBytesPerIb <- parseFieldOrDefault @Config @"ebSizeBytesPerIb" obj
ebBodyAvgSizeBytes <- parseFieldOrDefault @Config @"ebBodyAvgSizeBytes" obj
ebBodyValidationCpuTimeMsConstant <- parseFieldOrDefault @Config @"ebBodyValidationCpuTimeMsConstant" obj
ebBodyValidationCpuTimeMsPerByte <- parseFieldOrDefault @Config @"ebBodyValidationCpuTimeMsPerByte" obj
ebDiffusionStrategy <- parseFieldOrDefault @Config @"ebDiffusionStrategy" obj
ebDiffusionMaxWindowSize <- parseFieldOrDefault @Config @"ebDiffusionMaxWindowSize" obj
ebDiffusionMaxHeadersToRequest <- parseFieldOrDefault @Config @"ebDiffusionMaxHeadersToRequest" obj
Expand All @@ -378,6 +399,7 @@ instance FromJSON Config where
voteGenerationProbability <- parseFieldOrDefault @Config @"voteGenerationProbability" obj
voteGenerationCpuTimeMsConstant <- parseFieldOrDefault @Config @"voteGenerationCpuTimeMsConstant" obj
voteGenerationCpuTimeMsPerIb <- parseFieldOrDefault @Config @"voteGenerationCpuTimeMsPerIb" obj
voteGenerationCpuTimeMsPerTx <- parseFieldOrDefault @Config @"voteGenerationCpuTimeMsPerTx" obj
voteValidationCpuTimeMs <- parseFieldOrDefault @Config @"voteValidationCpuTimeMs" obj
voteThreshold <- parseFieldOrDefault @Config @"voteThreshold" obj
voteBundleSizeBytesConstant <- parseFieldOrDefault @Config @"voteBundleSizeBytesConstant" obj
Expand Down
3 changes: 2 additions & 1 deletion leios-trace-verifier/hs-src/test/Spec/Scenario.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module Spec.Scenario (
) where

import Control.Monad (mzero)
import Data.Default (Default (..))
import LeiosConfig (CleanupPolicies (..), CleanupPolicy (..), Config (..), DiffusionStrategy (..), Distribution (..), LeiosVariant (..), RelayStrategy (..))
import LeiosTopology (BandwidthBps (..), CpuCoreCount (..), LinkInfo (..), Location (..), LocationKind (..), Node (..), NodeInfo (..), NodeName (..), Topology (..))
import LeiosTypes (Point (..))
Expand All @@ -19,7 +20,7 @@ import qualified Data.Map.Strict as M
import qualified Data.Set as S

config :: Config
config = Config{relayStrategy = RequestFromFirst, tcpCongestionControl = True, multiplexMiniProtocols = True, treatBlocksAsFull = False, cleanupPolicies = CleanupPolicies (S.fromList [CleanupExpiredVote]), simulateTransactions = True, leiosStageLengthSlots = 2, leiosStageActiveVotingSlots = 1, leiosVoteSendRecvStages = False, leiosVariant = Short, leiosLateIbInclusion = False, leiosHeaderDiffusionTimeMs = 1000.0, praosChainQuality = 20.0, txGenerationDistribution = Exp{lambda = 0.85, scale = pure 1000.0}, txSizeBytesDistribution = LogNormal{mu = 6.833, sigma = 1.127}, txValidationCpuTimeMs = 1.5, txMaxSizeBytes = 16384, rbGenerationProbability = 5.0e-2, rbGenerationCpuTimeMs = 1.0, rbHeadValidationCpuTimeMs = 1.0, rbHeadSizeBytes = 1024, rbBodyMaxSizeBytes = 90112, rbBodyLegacyPraosPayloadValidationCpuTimeMsConstant = 50.0, rbBodyLegacyPraosPayloadValidationCpuTimeMsPerByte = 5.0e-4, rbBodyLegacyPraosPayloadAvgSizeBytes = 0, ibGenerationProbability = 5.0, ibGenerationCpuTimeMs = 130.0, ibHeadSizeBytes = 304, ibHeadValidationCpuTimeMs = 1.0, ibBodyValidationCpuTimeMsConstant = 50.0, ibBodyValidationCpuTimeMsPerByte = 5.0e-4, ibBodyMaxSizeBytes = 327680, ibBodyAvgSizeBytes = 98304, ibDiffusionStrategy = FreshestFirst, ibDiffusionMaxWindowSize = 100, ibDiffusionMaxHeadersToRequest = 100, ibDiffusionMaxBodiesToRequest = 1, ibShards = 50, ebGenerationProbability = 1.5, ebGenerationCpuTimeMs = 75.0, ebValidationCpuTimeMs = 1.0, ebSizeBytesConstant = 240, ebSizeBytesPerIb = 32, ebDiffusionStrategy = PeerOrder, ebDiffusionMaxWindowSize = 100, ebDiffusionMaxHeadersToRequest = 100, ebDiffusionMaxBodiesToRequest = 1, ebMaxAgeSlots = 100, ebMaxAgeForRelaySlots = 40, voteGenerationProbability = 500.0, voteGenerationCpuTimeMsConstant = 0.164, voteGenerationCpuTimeMsPerIb = 0.0, voteValidationCpuTimeMs = 0.816, voteThreshold = 300, voteBundleSizeBytesConstant = 0, voteBundleSizeBytesPerEb = 105, voteDiffusionStrategy = PeerOrder, voteDiffusionMaxWindowSize = 100, voteDiffusionMaxHeadersToRequest = 100, voteDiffusionMaxBodiesToRequest = 1, certGenerationCpuTimeMsConstant = 90.0, certGenerationCpuTimeMsPerNode = 0.0, certValidationCpuTimeMsConstant = 130.0, certValidationCpuTimeMsPerNode = 0.0, certSizeBytesConstant = 7168, certSizeBytesPerNode = 0}
config = def{relayStrategy = RequestFromFirst, tcpCongestionControl = True, multiplexMiniProtocols = True, treatBlocksAsFull = False, cleanupPolicies = CleanupPolicies (S.fromList [CleanupExpiredVote]), simulateTransactions = True, leiosStageLengthSlots = 2, leiosStageActiveVotingSlots = 1, leiosVoteSendRecvStages = False, leiosVariant = Short, leiosLateIbInclusion = False, leiosHeaderDiffusionTimeMs = 1000.0, praosChainQuality = 20.0, txGenerationDistribution = Exp{lambda = 0.85, scale = pure 1000.0}, txSizeBytesDistribution = LogNormal{mu = 6.833, sigma = 1.127}, txValidationCpuTimeMs = 1.5, txMaxSizeBytes = 16384, rbGenerationProbability = 5.0e-2, rbGenerationCpuTimeMs = 1.0, rbHeadValidationCpuTimeMs = 1.0, rbHeadSizeBytes = 1024, rbBodyMaxSizeBytes = 90112, rbBodyLegacyPraosPayloadValidationCpuTimeMsConstant = 50.0, rbBodyLegacyPraosPayloadValidationCpuTimeMsPerByte = 5.0e-4, rbBodyLegacyPraosPayloadAvgSizeBytes = 0, ibGenerationProbability = 5.0, ibGenerationCpuTimeMs = 130.0, ibHeadSizeBytes = 304, ibHeadValidationCpuTimeMs = 1.0, ibBodyValidationCpuTimeMsConstant = 50.0, ibBodyValidationCpuTimeMsPerByte = 5.0e-4, ibBodyMaxSizeBytes = 327680, ibBodyAvgSizeBytes = 98304, ibDiffusionStrategy = FreshestFirst, ibDiffusionMaxWindowSize = 100, ibDiffusionMaxHeadersToRequest = 100, ibDiffusionMaxBodiesToRequest = 1, ibShards = 50, ebGenerationProbability = 1.5, ebGenerationCpuTimeMs = 75.0, ebValidationCpuTimeMs = 1.0, ebSizeBytesConstant = 240, ebSizeBytesPerIb = 32, ebDiffusionStrategy = PeerOrder, ebDiffusionMaxWindowSize = 100, ebDiffusionMaxHeadersToRequest = 100, ebDiffusionMaxBodiesToRequest = 1, ebMaxAgeSlots = 100, ebMaxAgeForRelaySlots = 40, voteGenerationProbability = 500.0, voteGenerationCpuTimeMsConstant = 0.164, voteGenerationCpuTimeMsPerIb = 0.0, voteValidationCpuTimeMs = 0.816, voteThreshold = 300, voteBundleSizeBytesConstant = 0, voteBundleSizeBytesPerEb = 105, voteDiffusionStrategy = PeerOrder, voteDiffusionMaxWindowSize = 100, voteDiffusionMaxHeadersToRequest = 100, voteDiffusionMaxBodiesToRequest = 1, certGenerationCpuTimeMsConstant = 90.0, certGenerationCpuTimeMsPerNode = 0.0, certValidationCpuTimeMsConstant = 130.0, certValidationCpuTimeMsPerNode = 0.0, certSizeBytesConstant = 7168, certSizeBytesPerNode = 0}

topology :: Topology 'COORD2D
topology = Topology{nodes = M.fromList [(NodeName "node-0", Node{nodeInfo = NodeInfo{stake = 500, cpuCoreCount = CpuCoreCount mzero, location = LocCoord2D{coord2D = Point{_1 = 0.12000040231003672, _2 = 0.1631004621065356}}, adversarial = mzero}, producers = M.fromList [(NodeName "node-1", LinkInfo{latencyMs = 141.01364015418432, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000}), (NodeName "node-2", LinkInfo{latencyMs = 254.6249782835189, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000})]}), (NodeName "node-1", Node{nodeInfo = NodeInfo{stake = 200, cpuCoreCount = CpuCoreCount mzero, location = LocCoord2D{coord2D = Point{_1 = 0.34276660615051174, _2 = 0.2636899791034371}}, adversarial = mzero}, producers = M.fromList [(NodeName "node-2", LinkInfo{latencyMs = 175.32530255486685, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000}), (NodeName "node-3", LinkInfo{latencyMs = 379.1167948193313, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000})]}), (NodeName "node-2", Node{nodeInfo = NodeInfo{stake = 100, cpuCoreCount = CpuCoreCount mzero, location = LocCoord2D{coord2D = Point{_1 = 0.5150493264153491, _2 = 0.27873594531347595}}, adversarial = mzero}, producers = M.fromList [(NodeName "node-3", LinkInfo{latencyMs = 248.31457793649423, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000})]}), (NodeName "node-3", Node{nodeInfo = NodeInfo{stake = 0, cpuCoreCount = CpuCoreCount mzero, location = LocCoord2D{coord2D = Point{_1 = 0.3503537969220088, _2 = 0.13879558055660354}}, adversarial = mzero}, producers = M.fromList [(NodeName "node-0", LinkInfo{latencyMs = 140.19739576271448, bandwidthBytesPerSecond = BandwidthBps $ pure 1024000})]})]}
Expand Down
3 changes: 1 addition & 2 deletions leios-trace-verifier/hs-src/test/Spec/Transition.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ import qualified Data.Set as S
import qualified Data.Text as T
import qualified Spec.Scenario as Scenario (config, idOther, idSut)

data TracingContext
= TracingContext
data TracingContext = TracingContext
{ _clock :: Time
, _slotNo :: SlotNo
, _rbs :: Map Text Text
Expand Down
Loading
Loading