ghc-events 0.13.0 → 0.14.0
raw patch · 12 files changed
+618/−40 lines, 12 filesdep ~basebinary-addedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ GHC.RTS.Events: ConcMarkBegin :: EventInfo
+ GHC.RTS.Events: ConcMarkEnd :: !Word32 -> EventInfo
+ GHC.RTS.Events: ConcSweepBegin :: EventInfo
+ GHC.RTS.Events: ConcSweepEnd :: EventInfo
+ GHC.RTS.Events: ConcSyncBegin :: EventInfo
+ GHC.RTS.Events: ConcSyncEnd :: EventInfo
+ GHC.RTS.Events: ConcUpdRemSetFlush :: {-# UNPACK #-} !Int -> EventInfo
+ GHC.RTS.Events: NonmovingHeapCensus :: !Word8 -> !Word32 -> !Word32 -> !Word32 -> EventInfo
+ GHC.RTS.Events: [concMarkedObjectCount] :: EventInfo -> !Word32
+ GHC.RTS.Events: [nonmovingCensusActiveSegs] :: EventInfo -> !Word32
+ GHC.RTS.Events: [nonmovingCensusBlkSize] :: EventInfo -> !Word8
+ GHC.RTS.Events: [nonmovingCensusFilledSegs] :: EventInfo -> !Word32
+ GHC.RTS.Events: [nonmovingCensusLiveBlocks] :: EventInfo -> !Word32
Files
- CHANGELOG.md +7/−0
- ghc-events.cabal +33/−11
- include/EventLogFormat.h +10/−1
- src/GHC/RTS/EventTypes.hs +17/−1
- src/GHC/RTS/Events.hs +21/−0
- src/GHC/RTS/Events/Binary.hs +72/−27
- test/Roundtrip.hs +21/−0
- test/Utils.hs +2/−0
- test/nonmoving-gc-census.eventlog binary
- test/nonmoving-gc-census.eventlog.reference +340/−0
- test/nonmoving-gc.eventlog binary
- test/nonmoving-gc.eventlog.reference +95/−0
CHANGELOG.md view
@@ -1,5 +1,12 @@ # Change Log +## 0.14.0 - 2020-11-17++* Add support for non-moving GC events [#60](https://github.com/haskell/ghc-events/pull/60)+* Fix the parser error under GHC 9.0 [#64](https://github.com/haskell/ghc-events/pull/64)+* Fix string encodings [#62](https://github.com/haskell/ghc-events/pull/62)+* Switch to GitHub Actions [#65](https://github.com/haskell/ghc-events/pull/65), dropping GHC 7.8.4 from the support range+ ## 0.13.0 - 2020-04-04 * Fix broken UTF-8 decoding ([#55](https://github.com/haskell/ghc-events/pull/55))
ghc-events.cabal view
@@ -1,11 +1,12 @@+cabal-version: 2.2 name: ghc-events-version: 0.13.0+version: 0.14.0 synopsis: Library and tool for parsing .eventlog files from GHC description: Parses .eventlog files emitted by GHC 6.12.1 and later. Includes the ghc-events tool permitting, in particular, to dump an event log file as text. category: Development, GHC, Debug, Profiling, Trace-license: BSD3+license: BSD-3-Clause license-file: LICENSE author: Donnie Jones <donnie@darthik.com>, Simon Marlow <marlowsd@gmail.com>,@@ -20,15 +21,13 @@ maintainer: Simon Marlow <marlowsd@gmail.com> bug-reports: https://github.com/haskell/ghc-events/issues build-type: Simple-tested-with: GHC == 7.8.4- GHC == 7.10.3+tested-with: GHC == 7.10.3 GHC == 8.0.2 GHC == 8.2.2 GHC == 8.4.4 GHC == 8.6.5 GHC == 8.8.3- GHC == 8.10.1-cabal-version: >= 1.8+ GHC == 8.10.2 extra-source-files: include/EventLogFormat.h test/queens-ghc-6.12.1.eventlog test/queens-ghc-6.12.1.eventlog.reference@@ -36,6 +35,10 @@ test/queens-ghc-7.0.2.eventlog.reference test/mandelbrot-mmc-2011-06-14.eventlog test/mandelbrot-mmc-2011-06-14.eventlog.reference+ test/nonmoving-gc.eventlog+ test/nonmoving-gc.eventlog.reference+ test/nonmoving-gc-census.eventlog+ test/nonmoving-gc-census.eventlog.reference test/parallelTest.eventlog test/parallelTest.eventlog.reference test/pre77stop.eventlog@@ -77,8 +80,17 @@ type: git location: git@github.com:haskell/ghc-events.git +common default+ default-extensions:+ BangPatterns+ NamedFieldPuns+ PatternGuards+ RecordWildCards+ default-language: Haskell2010+ library- build-depends: base >= 4.7 && < 4.15,+ import: default+ build-depends: base >= 4.7 && < 4.16, containers >= 0.5 && < 0.7, binary >= 0.7 && < 0.11, bytestring >= 0.10.4,@@ -97,28 +109,38 @@ GHC.RTS.Events.Binary hs-source-dirs: src include-dirs: include- extensions: RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards other-extensions: FlexibleContexts, CPP ghc-options: -Wall executable ghc-events+ import: default main-is: GhcEvents.hs build-depends: ghc-events, base, containers- extensions: RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards test-suite test-versions+ import: default type: exitcode-stdio-1.0 main-is: TestVersions.hs other-modules: Utils hs-source-dirs: ., test build-depends: ghc-events, base- extensions: RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards test-suite write-merge+ import: default type: exitcode-stdio-1.0 main-is: WriteMerge.hs other-modules: Utils hs-source-dirs: ., test build-depends: ghc-events, base, bytestring- extensions: RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards+ -- disabled until #14 is fixed+ buildable: False++test-suite roundtrip+ import: default+ type: exitcode-stdio-1.0+ main-is: Roundtrip.hs+ other-modules: Utils+ hs-source-dirs: ., test+ build-depends: ghc-events, base+ -- disabled until #14 is fixed buildable: False
include/EventLogFormat.h view
@@ -202,12 +202,21 @@ #define EVENT_USER_BINARY_MSG 181 +#define EVENT_CONC_MARK_BEGIN 200+#define EVENT_CONC_MARK_END 201+#define EVENT_CONC_SYNC_BEGIN 202+#define EVENT_CONC_SYNC_END 203+#define EVENT_CONC_SWEEP_BEGIN 204+#define EVENT_CONC_SWEEP_END 205+#define EVENT_CONC_UPD_REM_SET_FLUSH 206+#define EVENT_NONMOVING_HEAP_CENSUS 207+ /* * The highest event code +1 that ghc itself emits. Note that some event * ranges higher than this are reserved but not currently emitted by ghc. * This must match the size of the EventDesc[] array in EventLog.c */-#define NUM_GHC_EVENT_TAGS 182+#define NUM_GHC_EVENT_TAGS 208 /* DEPRECATED EVENTS: */
src/GHC/RTS/EventTypes.hs view
@@ -180,7 +180,7 @@ } | SparkCounters { sparksCreated, sparksDud, sparksOverflowed, sparksConverted, sparksFizzled, sparksGCd,- sparksRemaining :: {-# UNPACK #-}! Word64+ sparksRemaining :: {-# UNPACK #-} !Word64 } | SparkCreate { } | SparkDud { }@@ -430,6 +430,22 @@ } | UserBinaryMessage { payload :: !B.ByteString+ }++ | ConcMarkBegin+ | ConcMarkEnd { concMarkedObjectCount :: !Word32+ }+ | ConcSyncBegin+ | ConcSyncEnd+ | ConcSweepBegin+ | ConcSweepEnd+ | ConcUpdRemSetFlush { cap :: {-# UNPACK #-}!Int+ }+ | NonmovingHeapCensus+ { nonmovingCensusBlkSize :: !Word8+ , nonmovingCensusActiveSegs :: !Word32+ , nonmovingCensusFilledSegs :: !Word32+ , nonmovingCensusLiveBlocks :: !Word32 } deriving Show
src/GHC/RTS/Events.hs view
@@ -492,6 +492,27 @@ UserBinaryMessage {..} -> "binary message " <> TB.fromText (replaceUnprintableWith '.' payload) + ConcMarkBegin ->+ "concurrent mark began"+ ConcMarkEnd {..} ->+ "concurrent mark ended: "+ <> "marked " <> TB.decimal concMarkedObjectCount <> " objects"+ ConcSyncBegin ->+ "post-mark synchronization began"+ ConcSyncEnd ->+ "post-mark synchronization ended"+ ConcSweepBegin ->+ "concurrent sweep began"+ ConcSweepEnd ->+ "concurrent sweep ended"+ ConcUpdRemSetFlush {..} ->+ "update remembered set flushed by " <> TB.decimal cap+ NonmovingHeapCensus {..} ->+ "nonmoving heap census " <> TB.decimal (2^nonmovingCensusBlkSize :: Int)+ <> ": " <> TB.decimal nonmovingCensusActiveSegs <> " active segments"+ <> ", " <> TB.decimal nonmovingCensusFilledSegs <> " filled segments"+ <> ", " <> TB.decimal nonmovingCensusLiveBlocks <> " live blocks"+ -- | Replace unprintable bytes in the message with the replacement character replaceUnprintableWith :: Char -- ^ Replacement character
src/GHC/RTS/Events/Binary.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ViewPatterns #-} module GHC.RTS.Events.Binary ( -- * Readers getHeader@@ -317,6 +318,27 @@ str <- getText (num - sz_tid) return ThreadLabel{ thread = tid , threadlabel = str }+ )),++ (simpleEvent EVENT_CONC_MARK_BEGIN ConcMarkBegin),+ (FixedSizeParser EVENT_CONC_MARK_END 4 (do -- (marked_object_count)+ num <- get :: Get Word32+ return ConcMarkEnd{ concMarkedObjectCount = num }+ )),+ (simpleEvent EVENT_CONC_SYNC_BEGIN ConcSyncBegin),+ (simpleEvent EVENT_CONC_SYNC_END ConcSyncEnd),+ (simpleEvent EVENT_CONC_SWEEP_BEGIN ConcSweepBegin),+ (simpleEvent EVENT_CONC_SWEEP_END ConcSweepEnd),+ (FixedSizeParser EVENT_CONC_UPD_REM_SET_FLUSH sz_cap (do -- (cap)+ cap <- get :: Get CapNo+ return ConcUpdRemSetFlush{ cap = fromIntegral cap }+ )),+ (FixedSizeParser EVENT_NONMOVING_HEAP_CENSUS 13 (do -- (blk_size, active_segs, filled_segs, live_blks)+ nonmovingCensusBlkSize <- get :: Get Word8+ nonmovingCensusActiveSegs <- get :: Get Word32+ nonmovingCensusFilledSegs <- get :: Get Word32+ nonmovingCensusLiveBlocks <- get :: Get Word32+ return NonmovingHeapCensus{..} )) ] @@ -891,12 +913,12 @@ putMarker EVENT_HET_END putMarker EVENT_HEADER_END where- putEventType (EventType n d msz) = do+ putEventType (EventType n (TE.encodeUtf8 -> d) msz) = do putMarker EVENT_ET_BEGIN putType n putE $ fromMaybe 0xffff msz- putE (fromIntegral $ T.length d :: EventTypeDescLen)- putE d+ putE (fromIntegral $ B.length d :: EventTypeDescLen)+ putByteString d -- the event type header allows for extra data, which we don't use: putE (0 :: Word32) putMarker EVENT_ET_END@@ -1002,6 +1024,14 @@ ProfSampleCostCentre {} -> EVENT_PROF_SAMPLE_COST_CENTRE ProfBegin {} -> EVENT_PROF_BEGIN UserBinaryMessage {} -> EVENT_USER_BINARY_MSG+ ConcMarkBegin {} -> EVENT_CONC_MARK_BEGIN+ ConcMarkEnd {} -> EVENT_CONC_MARK_END+ ConcSyncBegin {} -> EVENT_CONC_SYNC_BEGIN+ ConcSyncEnd {} -> EVENT_CONC_SYNC_END+ ConcSweepBegin {} -> EVENT_CONC_SWEEP_BEGIN+ ConcSweepEnd {} -> EVENT_CONC_SWEEP_END+ ConcUpdRemSetFlush {} -> EVENT_CONC_UPD_REM_SET_FLUSH+ NonmovingHeapCensus {} -> EVENT_NONMOVING_HEAP_CENSUS nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT :: EventTypeNum nEVENT_PERF_NAME = EVENT_PERF_NAME@@ -1106,10 +1136,10 @@ putE t putCap c -putEventSpec (ThreadLabel t l) = do- putE (fromIntegral (T.length l) + sz_tid :: Word16)+putEventSpec (ThreadLabel t (TE.encodeUtf8 -> l)) = do+ putE (fromIntegral (B.length l) + sz_tid :: Word16) putE t- putE l+ putByteString l putEventSpec Shutdown = return ()@@ -1215,22 +1245,22 @@ putE cs putCap cp -putEventSpec (RtsIdentifier cs rts) = do- putE (fromIntegral (T.length rts) + sz_capset :: Word16)+putEventSpec (RtsIdentifier cs (TE.encodeUtf8 -> rts)) = do+ putE (fromIntegral (B.length rts) + sz_capset :: Word16) putE cs- putE rts+ putByteString rts -putEventSpec (ProgramArgs cs as) = do- let sz_args = sum $ map ((+ 1) {- for \0 -} . T.length) as+putEventSpec (ProgramArgs cs (map TE.encodeUtf8 -> as)) = do+ let sz_args = sum (map ((+ 1) {- for \0 -} . B.length) as) - 1 putE (fromIntegral sz_args + sz_capset :: Word16) putE cs- mapM_ putE (intersperse "\0" as)+ mapM_ putByteString (intersperse "\0" as) -putEventSpec (ProgramEnv cs es) = do- let sz_env = sum $ map ((+ 1) {- for \0 -} . T.length) es+putEventSpec (ProgramEnv cs (map TE.encodeUtf8 -> es)) = do+ let sz_env = sum (map ((+ 1) {- for \0 -} . B.length) es) - 1 putE (fromIntegral sz_env + sz_capset :: Word16) putE cs- mapM_ putE $ intersperse "\0" es+ mapM_ putByteString $ intersperse "\0" es putEventSpec (OsProcessPid cs pid) = do putE cs@@ -1245,17 +1275,17 @@ putE sec putE nsec -putEventSpec (Message s) = do- putE (fromIntegral (T.length s) :: Word16)- putE s+putEventSpec (Message (TE.encodeUtf8 -> s)) = do+ putE (fromIntegral (B.length s) :: Word16)+ putByteString s -putEventSpec (UserMessage s) = do- putE (fromIntegral (T.length s) :: Word16)- putE s+putEventSpec (UserMessage (TE.encodeUtf8 -> s)) = do+ putE (fromIntegral (B.length s) :: Word16)+ putByteString s -putEventSpec (UserMarker s) = do- putE (fromIntegral (T.length s) :: Word16)- putE s+putEventSpec (UserMarker (TE.encodeUtf8 -> s)) = do+ putE (fromIntegral (B.length s) :: Word16)+ putByteString s putEventSpec (UnknownEvent {}) = error "putEventSpec UnknownEvent" @@ -1358,10 +1388,10 @@ putEventSpec MerCapSleeping = return () putEventSpec MerCallingMain = return () -putEventSpec PerfName{..} = do- putE (fromIntegral (T.length name) + sz_perf_num :: Word16)+putEventSpec PerfName{name = (TE.encodeUtf8 -> name), ..} = do+ putE (fromIntegral (B.length name) + sz_perf_num :: Word16) putE perfNum- putE name+ putByteString name putEventSpec PerfCounter{..} = do putE perfNum@@ -1427,3 +1457,18 @@ putEventSpec UserBinaryMessage {..} = do putE (fromIntegral (B.length payload) :: Word16) putByteString payload++putEventSpec ConcMarkBegin = return ()+putEventSpec ConcMarkEnd {..} = do+ putE concMarkedObjectCount+putEventSpec ConcSyncBegin = return ()+putEventSpec ConcSyncEnd = return ()+putEventSpec ConcSweepBegin = return ()+putEventSpec ConcSweepEnd = return ()+putEventSpec ConcUpdRemSetFlush {..} = do+ putCap cap+putEventSpec NonmovingHeapCensus {..} = do+ putE nonmovingCensusBlkSize+ putE nonmovingCensusActiveSegs+ putE nonmovingCensusFilledSegs+ putE nonmovingCensusLiveBlocks
+ test/Roundtrip.hs view
@@ -0,0 +1,21 @@+import Control.Monad+import System.Exit++import GHC.RTS.Events+import GHC.RTS.Events.Incremental+import Utils (files)++-- | Check that an eventlog round-trips through encoding/decoding.+checkRoundtrip :: FilePath -> IO Bool+checkRoundtrip logFile = do+ putStrLn logFile+ Right eventlog <- readEventLogFromFile logFile+ let Right (roundtripped, _) = readEventLog $ serialiseEventLog eventlog+ if show roundtripped == show eventlog+ then return True+ else putStrLn "bad" >> return False++main :: IO ()+main = do+ successes <- mapM checkRoundtrip files+ unless (and successes) exitFailure
test/Utils.hs view
@@ -5,6 +5,8 @@ [ "queens-ghc-6.12.1.eventlog" , "queens-ghc-7.0.2.eventlog" , "mandelbrot-mmc-2011-06-14.eventlog"+ , "nonmoving-gc.eventlog"+ , "nonmoving-gc-census.eventlog" , "parallelTest.eventlog" , "pre77stop.eventlog", "782stop.eventlog", "783stop.eventlog" , "sleep.h.eventlog"
+ test/nonmoving-gc-census.eventlog view
binary file changed (absent → 8099 bytes)
+ test/nonmoving-gc-census.eventlog.reference view
@@ -0,0 +1,340 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 58)+54: Synchronise stop-the-world GC (size 0)+55: Task create (size 18)+56: Task migrate (size 12)+57: Task delete (size 8)+58: User marker (size variable)+59: Empty event for bug #9003 (size 0)+160: Start of heap profile (size variable)+161: Cost center definition (size variable)+162: Start of heap profile sample (size 8)+163: Heap profile cost-centre sample (size variable)+164: Heap profile string sample (size variable)+165: End of heap profile sample (size 8)+166: Start of heap profile (biographical) sample (size 16)+167: Time profile cost-centre stack (size variable)+168: Start of a time profile (size 8)+181: User binary message (size variable)+200: Begin concurrent mark phase (size 0)+201: End concurrent mark phase (size 4)+202: Begin concurrent GC synchronisation (size 0)+203: End concurrent GC synchronisation (size 0)+204: Begin concurrent sweep (size 0)+205: End concurrent sweep (size 0)+206: Update remembered set flushed (size 2)+207: Nonmoving heap census (size 13)++Events:+227855: capset 1: wall clock time 1587597517s 544758000ns (unix epoch)+229418: capset 0: pid 1158+231368: capset 0: parent pid 25700+233264: capset 0: RTS version "GHC-8.11.0.20200422 rts_thr_l"+233773: capset 0: args: ["nofib/shootout/binary-trees/Main","15","11","+RTS","-xn","-l-an"]+2789899: Starting nonmoving GC preparation+2811955: Marking roots for nonmoving GC+2813333: Finished marking roots for nonmoving GC+2813512: Finished nonmoving GC preparation+2872560: concurrent mark began+3320668: concurrent mark ended: marked 2869 objects+3337805: post-mark synchronization began+3337996: post-mark synchronization began+3682910: cap 0: update remembered set flushed by 0+3683825: concurrent mark began+3692251: concurrent mark ended: marked 1042 objects+3692392: concurrent mark began+3692462: concurrent mark ended: marked 1 objects+3692552: concurrent mark began+3692621: concurrent mark ended: marked 1 objects+3716334: post-mark synchronization ended+3716512: post-mark synchronization ended+3720779: concurrent sweep began+3721599: concurrent sweep ended+3726029: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+3728053: nonmoving heap census 16: 0 active segments, 0 filled segments, 54 live blocks+3729679: nonmoving heap census 32: 0 active segments, 0 filled segments, 128 live blocks+3730314: nonmoving heap census 64: 0 active segments, 0 filled segments, 0 live blocks+3730776: nonmoving heap census 128: 0 active segments, 0 filled segments, 0 live blocks+3731036: nonmoving heap census 256: 0 active segments, 0 filled segments, 0 live blocks+3731339: nonmoving heap census 512: 0 active segments, 0 filled segments, 0 live blocks+3731574: nonmoving heap census 1024: 0 active segments, 0 filled segments, 0 live blocks+3731786: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+3731990: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+3732268: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+3732469: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+32362284: Starting nonmoving GC preparation+32371855: Marking roots for nonmoving GC+32373519: Finished marking roots for nonmoving GC+32373686: Finished nonmoving GC preparation+32557821: concurrent mark began+33910745: concurrent mark ended: marked 16928 objects+33914172: concurrent mark began+33916300: concurrent mark ended: marked 13 objects+33924796: post-mark synchronization began+33925033: post-mark synchronization began+34219802: cap 0: update remembered set flushed by 0+34221200: concurrent mark began+34240845: concurrent mark ended: marked 1084 objects+34241350: concurrent mark began+34241419: concurrent mark ended: marked 1 objects+34241632: concurrent mark began+34241702: concurrent mark ended: marked 1 objects+34271446: post-mark synchronization ended+34271858: post-mark synchronization ended+34283960: concurrent sweep began+34559614: concurrent sweep ended+34563964: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+34576318: nonmoving heap census 16: 3 active segments, 0 filled segments, 1259 live blocks+34591543: nonmoving heap census 32: 6 active segments, 4 filled segments, 6385 live blocks+34596442: nonmoving heap census 64: 4 active segments, 1 filled segments, 1031 live blocks+34597260: nonmoving heap census 128: 0 active segments, 0 filled segments, 42 live blocks+34597718: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+34598055: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+34598375: nonmoving heap census 1024: 0 active segments, 0 filled segments, 4 live blocks+34598666: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+34598997: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+34599265: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+34599501: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+67279769: Starting nonmoving GC preparation+67281581: Marking roots for nonmoving GC+67282874: Finished marking roots for nonmoving GC+67283133: Finished nonmoving GC preparation+67370910: concurrent mark began+68397276: concurrent mark ended: marked 16875 objects+68398499: concurrent mark began+68399339: concurrent mark ended: marked 13 objects+68402178: post-mark synchronization began+68402344: post-mark synchronization began+68682534: cap 0: update remembered set flushed by 0+68683459: concurrent mark began+68688876: concurrent mark ended: marked 352 objects+68689271: concurrent mark began+68689388: concurrent mark ended: marked 1 objects+68689515: concurrent mark began+68689626: concurrent mark ended: marked 1 objects+68704339: post-mark synchronization ended+68704591: post-mark synchronization ended+68710131: concurrent sweep began+68830040: concurrent sweep ended+68834054: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+68843935: nonmoving heap census 16: 3 active segments, 1 filled segments, 2855 live blocks+68858424: nonmoving heap census 32: 6 active segments, 3 filled segments, 5846 live blocks+68862979: nonmoving heap census 64: 4 active segments, 0 filled segments, 703 live blocks+68863622: nonmoving heap census 128: 0 active segments, 0 filled segments, 43 live blocks+68863967: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+68864313: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+68864669: nonmoving heap census 1024: 0 active segments, 0 filled segments, 5 live blocks+68865004: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+68865354: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+68865670: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+68865931: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+119827283: Starting nonmoving GC preparation+119830728: Marking roots for nonmoving GC+119831795: Finished marking roots for nonmoving GC+119831988: Finished nonmoving GC preparation+119938842: concurrent mark began+121053293: concurrent mark ended: marked 16438 objects+121056540: concurrent mark began+121057919: concurrent mark ended: marked 13 objects+121066516: post-mark synchronization began+121066859: post-mark synchronization began+121154737: cap 0: update remembered set flushed by 0+121161224: concurrent mark began+121186040: concurrent mark ended: marked 1079 objects+121186533: concurrent mark began+121186646: concurrent mark ended: marked 1 objects+121186774: concurrent mark began+121186841: concurrent mark ended: marked 1 objects+121231348: post-mark synchronization ended+121231969: post-mark synchronization ended+121242597: concurrent sweep began+121385240: concurrent sweep ended+121390264: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+121405730: nonmoving heap census 16: 3 active segments, 0 filled segments, 1568 live blocks+121430287: nonmoving heap census 32: 7 active segments, 3 filled segments, 6270 live blocks+121436146: nonmoving heap census 64: 4 active segments, 1 filled segments, 897 live blocks+121437265: nonmoving heap census 128: 0 active segments, 0 filled segments, 43 live blocks+121437840: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+121438948: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+121439371: nonmoving heap census 1024: 0 active segments, 0 filled segments, 5 live blocks+121439723: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+121440083: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+121440368: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+121441292: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+148361407: Starting nonmoving GC preparation+148365127: Marking roots for nonmoving GC+148366468: Finished marking roots for nonmoving GC+148366670: Finished nonmoving GC preparation+148527085: concurrent mark began+149775840: concurrent mark ended: marked 15225 objects+149778324: concurrent mark began+149779513: concurrent mark ended: marked 13 objects+149810324: post-mark synchronization began+149810665: post-mark synchronization began+149850617: cap 0: update remembered set flushed by 0+149851300: concurrent mark began+149866270: concurrent mark ended: marked 1049 objects+149866671: concurrent mark began+149866848: concurrent mark ended: marked 1 objects+149867039: concurrent mark began+149867202: concurrent mark ended: marked 1 objects+149874824: post-mark synchronization ended+149875168: post-mark synchronization ended+149901246: concurrent sweep began+150026135: concurrent sweep ended+150031083: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+150045140: nonmoving heap census 16: 3 active segments, 1 filled segments, 3342 live blocks+150066310: nonmoving heap census 32: 8 active segments, 3 filled segments, 5613 live blocks+150071204: nonmoving heap census 64: 4 active segments, 0 filled segments, 567 live blocks+150071885: nonmoving heap census 128: 0 active segments, 0 filled segments, 44 live blocks+150073125: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+150073558: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+150074077: nonmoving heap census 1024: 0 active segments, 0 filled segments, 6 live blocks+150074414: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+150074832: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+150075820: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+150076102: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+176942302: Starting nonmoving GC preparation+176945061: Marking roots for nonmoving GC+176946066: Finished marking roots for nonmoving GC+176946253: Finished nonmoving GC preparation+177039035: concurrent mark began+177741825: concurrent mark ended: marked 15542 objects+177744446: concurrent mark began+177745256: concurrent mark ended: marked 13 objects+177750528: post-mark synchronization began+177750635: post-mark synchronization began+177896570: cap 0: update remembered set flushed by 0+177896939: concurrent mark began+177910616: concurrent mark ended: marked 1082 objects+177911218: concurrent mark began+177911307: concurrent mark ended: marked 1 objects+177911422: concurrent mark began+177911493: concurrent mark ended: marked 1 objects+177919949: post-mark synchronization ended+177920053: post-mark synchronization ended+177925925: concurrent sweep began+178017822: concurrent sweep ended+178020408: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+178026736: nonmoving heap census 16: 1 active segments, 1 filled segments, 2963 live blocks+178041784: nonmoving heap census 32: 7 active segments, 3 filled segments, 5977 live blocks+178045269: nonmoving heap census 64: 4 active segments, 1 filled segments, 757 live blocks+178045812: nonmoving heap census 128: 0 active segments, 0 filled segments, 44 live blocks+178046142: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+178046413: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+178046632: nonmoving heap census 1024: 0 active segments, 0 filled segments, 6 live blocks+178047048: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+178047379: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+178047876: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+178048246: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+202506857: Starting nonmoving GC preparation+202508058: Marking roots for nonmoving GC+202517509: Finished marking roots for nonmoving GC+202517677: Finished nonmoving GC preparation+202566458: concurrent mark began+203074473: concurrent mark ended: marked 16604 objects+203074950: concurrent mark began+203075547: concurrent mark ended: marked 13 objects+203078118: post-mark synchronization began+203078232: post-mark synchronization began+203131205: cap 0: update remembered set flushed by 0+203131506: concurrent mark began+203140444: concurrent mark ended: marked 1083 objects+203140572: concurrent mark began+203140635: concurrent mark ended: marked 1 objects+203140714: concurrent mark began+203140783: concurrent mark ended: marked 1 objects+203149980: post-mark synchronization ended+203150083: post-mark synchronization ended+203153609: concurrent sweep began+203241257: concurrent sweep ended+203243717: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+203252554: nonmoving heap census 16: 3 active segments, 1 filled segments, 3188 live blocks+203263495: nonmoving heap census 32: 7 active segments, 4 filled segments, 6373 live blocks+203266345: nonmoving heap census 64: 4 active segments, 1 filled segments, 947 live blocks+203266828: nonmoving heap census 128: 0 active segments, 0 filled segments, 45 live blocks+203267099: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+203267302: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+203267563: nonmoving heap census 1024: 0 active segments, 0 filled segments, 7 live blocks+203267805: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+203268121: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+203268260: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+203268439: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+224422635: Starting nonmoving GC preparation+224424065: Marking roots for nonmoving GC+224424970: Finished marking roots for nonmoving GC+224425126: Finished nonmoving GC preparation+224506119: concurrent mark began+225279214: concurrent mark ended: marked 15033 objects+225280063: concurrent mark began+225280703: concurrent mark ended: marked 13 objects+225283313: post-mark synchronization began+225283479: post-mark synchronization began+225341600: cap 0: update remembered set flushed by 0+225342335: concurrent mark began+225351353: concurrent mark ended: marked 1049 objects+225351605: concurrent mark began+225351675: concurrent mark ended: marked 1 objects+225351773: concurrent mark began+225351842: concurrent mark ended: marked 1 objects+225383632: post-mark synchronization ended+225383831: post-mark synchronization ended+225388468: concurrent sweep began+225553609: concurrent sweep ended+225557870: nonmoving heap census 8: 0 active segments, 0 filled segments, 0 live blocks+225572051: nonmoving heap census 16: 3 active segments, 0 filled segments, 1860 live blocks+225587504: nonmoving heap census 32: 6 active segments, 3 filled segments, 5705 live blocks+225592583: nonmoving heap census 64: 4 active segments, 0 filled segments, 621 live blocks+225593429: nonmoving heap census 128: 0 active segments, 0 filled segments, 46 live blocks+225593797: nonmoving heap census 256: 0 active segments, 0 filled segments, 1 live blocks+225594147: nonmoving heap census 512: 0 active segments, 0 filled segments, 1 live blocks+225594554: nonmoving heap census 1024: 0 active segments, 0 filled segments, 8 live blocks+225594804: nonmoving heap census 2048: 0 active segments, 0 filled segments, 0 live blocks+225595452: nonmoving heap census 4096: 0 active segments, 0 filled segments, 0 live blocks+225596376: nonmoving heap census 8192: 0 active segments, 0 filled segments, 0 live blocks+225597481: nonmoving heap census 16384: 0 active segments, 0 filled segments, 0 live blocks+
+ test/nonmoving-gc.eventlog view
binary file changed (absent → 3212 bytes)
+ test/nonmoving-gc.eventlog.reference view
@@ -0,0 +1,95 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 58)+54: Synchronise stop-the-world GC (size 0)+55: Task create (size 18)+56: Task migrate (size 12)+57: Task delete (size 8)+58: User marker (size variable)+59: Empty event for bug #9003 (size 0)+160: Start of heap profile (size variable)+161: Cost center definition (size variable)+162: Start of heap profile sample (size 8)+163: Heap profile cost-centre sample (size variable)+164: Heap profile string sample (size variable)+165: End of heap profile sample (size 8)+166: Start of heap profile (biographical) sample (size 16)+167: Time profile cost-centre stack (size variable)+168: Start of a time profile (size 8)+181: User binary message (size variable)+200: Begin concurrent mark phase (size 0)+201: End concurrent mark phase (size 4)+202: Begin concurrent GC synchronisation (size 0)+203: End concurrent GC synchronisation (size 0)+204: Begin concurrent sweep (size 0)+205: End concurrent sweep (size 0)+206: Update remembered set flushed (size 2)+207: Nonmoving heap census (size 13)++Events:+620636: capset 1: wall clock time 1587578331s 829795000ns (unix epoch)+627395: capset 0: pid 20807+636419: capset 0: parent pid 18766+644544: capset 0: RTS version "GHC-8.10.1 rts_thr_debug"+649853: capset 0: args: ["./Main","10","+RTS","-l-an","-xn"]+20282519: Starting nonmoving GC preparation+20305849: Marking roots for nonmoving GC+20331402: Finished marking roots for nonmoving GC+20333822: Finished nonmoving GC preparation+20810540: concurrent mark began+30089152: concurrent mark ended: marked 6677 objects+30210049: post-mark synchronization began+32582336: cap 0: update remembered set flushed by 0+32608578: concurrent mark began+35122177: concurrent mark ended: marked 7758 objects+35126012: concurrent mark began+35127755: concurrent mark ended: marked 1 objects+35129046: concurrent mark began+35129935: concurrent mark ended: marked 1 objects+35203888: post-mark synchronization ended+35258771: concurrent sweep began+35263947: concurrent sweep ended+