Skip to content

Commit

Permalink
bench | locli | mach-timeline: forging distributions
Browse files Browse the repository at this point in the history
  • Loading branch information
deepfire committed Jan 17, 2022
1 parent 4af135c commit 1ea653d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 37 deletions.
5 changes: 5 additions & 0 deletions bench/locli/src/Cardano/Analysis/API.hs
Expand Up @@ -159,6 +159,7 @@ data MachTimeline
, sDensityDistrib :: !(Distribution Float Float)
, sSpanCheckDistrib :: !(Distribution Float NominalDiffTime)
, sSpanLeadDistrib :: !(Distribution Float NominalDiffTime)
, sSpanForgeDistrib :: !(Distribution Float NominalDiffTime)
, sBlocklessDistrib :: !(Distribution Float Word64)
, sSpanLensCPU85Distrib
:: !(Distribution Float Int)
Expand All @@ -176,13 +177,15 @@ data SlotStats
, slStart :: !SlotStart
, slCountChecks :: !Word64
, slCountLeads :: !Word64
, slCountForges :: !Word64
, slChainDBSnap :: !Word64
, slRejectedTx :: !Word64
, slBlockNo :: !Word64
, slBlockless :: !Word64
, slEarliest :: !UTCTime
, slSpanCheck :: !NominalDiffTime
, slSpanLead :: !NominalDiffTime
, slSpanForge :: !NominalDiffTime
, slMempoolTxs :: !Word64
, slTxsMemSpan :: !(Maybe NominalDiffTime)
, slTxsCollected :: !Word64
Expand Down Expand Up @@ -347,10 +350,12 @@ instance RenderTimeline SlotStats where
, Field 5 0 "blockGap" "block" "gap" $ IWord64 slBlockless
, Field 3 0 "leadChecks" "lead" "chk" $ IWord64 slCountChecks
, Field 3 0 "leadShips" "ship" "win" $ IWord64 slCountLeads
, Field 3 0 "forges" "For" "ge" $ IWord64 slCountForges
, Field 4 0 "CDBSnap" "CDB" "snap" $ IWord64 slChainDBSnap
, Field 3 0 "rejTxs" "rej" "txs" $ IWord64 slRejectedTx
, Field 7 0 "checkSpan" "check" "span" $ IDeltaT slSpanCheck
, Field 5 0 "leadSpan" "lead" "span" $ IDeltaT slSpanLead
, Field 5 0 "forgeSpan" "forg" "span" $ IDeltaT slSpanForge
, Field 4 0 "mempoolTxSpan" (t 4!!0) "span" $ IText (maybe "" show.slTxsMemSpan)
, Field 4 0 "txsColl" (t 4!!1) "cold" $ IWord64 slTxsCollected
, Field 4 0 "txsAcc" (t 4!!2) "accd" $ IWord64 slTxsAccepted
Expand Down
91 changes: 54 additions & 37 deletions bench/locli/src/Cardano/Analysis/MachTimeline.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NamedFieldPuns #-}
Expand Down Expand Up @@ -37,8 +38,9 @@ instance RenderDistributions MachTimeline where
rdFields _ =
-- Width LeftPad
[ Field 4 0 "missR" "Miss" "ratio" $ DFloat sMissDistrib
, Field 6 0 "CheckΔ" "" "ChkΔt" $ DDeltaT sSpanCheckDistrib
, Field 6 0 "LeadΔ" "" "LeadΔt" $ DDeltaT sSpanLeadDistrib
, Field 5 0 "CheckΔ" (d!!0) "Check" $ DDeltaT sSpanCheckDistrib
, Field 5 0 "LeadΔ" (d!!1) "Lead" $ DDeltaT sSpanLeadDistrib
, Field 5 0 "ForgeΔ" (d!!2) "Forge" $ DDeltaT sSpanForgeDistrib
, Field 4 0 "BlkGap" "Block" "gap" $ DWord64 sBlocklessDistrib
, Field 5 0 "chDensity" "Dens" "ity" $ DFloat sDensityDistrib
, Field 3 0 "CPU" "CPU" "%" $ DWord64 (rCentiCpu . sResourceDistribs)
Expand All @@ -54,42 +56,38 @@ instance RenderDistributions MachTimeline where
, Field 5 0 "CPU85%LensEBnd" (c!!1) "EBnd" $ DInt sSpanLensCPU85EBndDistrib
]
where
d = nChunksEachOf 3 6 "---- Δt ----"
m = nChunksEachOf 3 6 "Memory usage, MB"
c = nChunksEachOf 2 6 "CPU85% spans"

slotStatsMachTimeline :: ChainInfo -> [SlotStats] -> MachTimeline
slotStatsMachTimeline CInfo{} slots =
MachTimeline
{ sMaxChecks = maxChecks
, sSlotMisses = misses
, sSpanLensCPU85 = spanLensCPU85
, sSpanLensCPU85EBnd = sSpanLensCPU85EBnd
, sSpanLensCPU85Rwd = sSpanLensCPU85Rwd
, sSlotRange = (,) (slSlot $ head slots)
(slSlot $ last slots)
{ sMaxChecks = maxChecks
, sSlotMisses = misses
, sSpanLensCPU85 = spanLensCPU85
, sSpanLensCPU85EBnd = sSpanLensCPU85EBnd
, sSpanLensCPU85Rwd = sSpanLensCPU85Rwd
, sSlotRange = (,) (slSlot $ head slots)
(slSlot $ last slots)
, sVersion = getVersion
--
, sMissDistrib = computeDistribution stdPercentiles missRatios
, sLeadsDistrib =
computeDistribution stdPercentiles (slCountLeads <$> slots)
, sUtxoDistrib =
computeDistribution stdPercentiles (slUtxoSize <$> slots)
, sDensityDistrib =
computeDistribution stdPercentiles (slDensity <$> slots)
, sSpanCheckDistrib =
computeDistribution stdPercentiles (slSpanCheck <$> slots)
, sSpanLeadDistrib =
computeDistribution stdPercentiles (slSpanLead <$> slots)
, sBlocklessDistrib =
computeDistribution stdPercentiles (slBlockless <$> slots)
, sSpanLensCPU85Distrib
= computeDistribution stdPercentiles spanLensCPU85
, sResourceDistribs =
computeResDistrib stdPercentiles resDistProjs slots
, sSpanLensCPU85EBndDistrib = computeDistribution stdPercentiles sSpanLensCPU85EBnd
, sSpanLensCPU85RwdDistrib = computeDistribution stdPercentiles sSpanLensCPU85Rwd
, sVersion = getVersion
, sMissDistrib = dist missRatios
, sLeadsDistrib = dist (slCountLeads <$> slots)
, sUtxoDistrib = dist (slUtxoSize <$> slots)
, sDensityDistrib = dist (slDensity <$> slots)
, sSpanCheckDistrib = dist (slSpanCheck <$> slots)
, sSpanLeadDistrib = dist (slSpanLead <$> slots)
, sSpanForgeDistrib = dist (filter (/= 0) $ slSpanForge <$> slots)
, sBlocklessDistrib = dist (slBlockless <$> slots)
, sSpanLensCPU85Distrib = dist spanLensCPU85
, sSpanLensCPU85EBndDistrib = dist sSpanLensCPU85EBnd
, sSpanLensCPU85RwdDistrib = dist sSpanLensCPU85Rwd
, sResourceDistribs = computeResDistrib stdPercentiles resDistProjs slots
}
where
dist :: (Real a, ToRealFrac a Float) => [a] -> Distribution Float a
dist = computeDistribution stdPercentiles
sSpanLensCPU85EBnd = Vec.length <$>
filter (spanContainsEpochSlot 3) spansCPU85
sSpanLensCPU85Rwd = Vec.length <$>
Expand Down Expand Up @@ -192,9 +190,11 @@ timelineFromLogObjects ci =
, slStart = SlotStart zeroUTCTime
, slCountChecks = 0
, slCountLeads = 0
, slCountForges = 0
, slEarliest = zeroUTCTime
, slSpanCheck = realToFrac (0 :: Int)
, slSpanLead = realToFrac (0 :: Int)
, slSpanForge = realToFrac (0 :: Int)
, slMempoolTxs = 0
, slTxsMemSpan = Nothing
, slTxsCollected = 0
Expand Down Expand Up @@ -236,13 +236,12 @@ timelineStep ci a@TimelineAccum{aSlotStats=cur:_, ..} = \case
}

patchSlotCheckGap :: Word64 -> SlotNo -> TimelineAccum -> TimelineAccum
patchSlotCheckGap gap slot a'@TimelineAccum{aSlotStats=cur':_} =
case gap of
0 -> a'
n -> patchSlotCheckGap (n - 1) (slot + 1) $
addTimelineSlot ci slot
(unSlotStart $ slotStart ci slot)
0 (slUtxoSize cur') (slDensity cur') a'
patchSlotCheckGap 0 _ a' = a'
patchSlotCheckGap gapLen slot a'@TimelineAccum{aSlotStats=cur':_} =
patchSlotCheckGap (gapLen - 1) (slot + 1) $
addTimelineSlot ci slot
(unSlotStart $ slotStart ci slot)
0 (slUtxoSize cur') (slDensity cur') a'
LogObject{loAt, loBody=LOTraceLeadershipDecided slot yesNo} ->
if slot /= slSlot cur
then error $ "LeadDecided for noncurrent slot=" <> show slot <> " cur=" <> show (slSlot cur)
Expand All @@ -251,8 +250,24 @@ timelineStep ci a@TimelineAccum{aSlotStats=cur:_, ..} = \case
onLeadershipCertainty :: UTCTime -> Bool -> SlotStats -> SlotStats
onLeadershipCertainty now lead sl@SlotStats{..} =
sl { slCountLeads = slCountLeads + if lead then 1 else 0
, slSpanLead = max 0 $ now `Time.diffUTCTime` (slSpanCheck `Time.addUTCTime` unSlotStart slStart)
, slSpanLead = checkToCertainty
}
where
checkAbsTime = slSpanCheck `Time.addUTCTime` unSlotStart slStart
checkToCertainty = now `Time.diffUTCTime` checkAbsTime
LogObject{loAt, loBody=LOBlockForged _ _ _ slot} ->
if slot /= slSlot cur
then error $ "BlockForged for noncurrent slot=" <> show slot <> " cur=" <> show (slSlot cur)
else forTAHead a (onBlockForge loAt)
where
onBlockForge :: UTCTime -> SlotStats -> SlotStats
onBlockForge now sl@SlotStats{..} =
sl { slCountForges = slCountForges + 1
, slSpanForge = certaintyToForge
}
where
certaintyAbsTime = slSpanLead `Time.addUTCTime` (slSpanCheck `Time.addUTCTime` unSlotStart slStart)
certaintyToForge = now `Time.diffUTCTime` certaintyAbsTime
LogObject{loAt, loBody=LOResources rs} ->
-- Update resource stats accumulators & record values current slot.
(forTAHead a
Expand Down Expand Up @@ -340,8 +355,10 @@ addTimelineSlot ci@CInfo{..} slot time checks utxo density a@TimelineAccum{..} =
-- Updated as we see repeats:
, slCountChecks = checks
, slCountLeads = 0
, slCountForges = 0
, slSpanCheck = time `sinceSlot` slStart
, slSpanLead = 0
, slSpanForge = 0
, slTxsMemSpan = Nothing
, slTxsCollected= 0
, slTxsAccepted = 0
Expand Down

0 comments on commit 1ea653d

Please sign in to comment.