Commit 5811e9cb authored by Simon Marlow's avatar Simon Marlow

generate results for GC counts

parent 8eb091c6
......@@ -125,8 +125,10 @@ muttime_spec = SpecP "Mutator Time" "MutTime" "mutator-time" (mean mut_time) run
mutetime_spec = SpecP "Mutator Elapsed Time" "MutETime" "mutator-elapsed-time" (mean mut_elapsed_time) run_status time_ok
gctime_spec = SpecP "GC Time" "GCTime" "gc-time" (mean gc_time) run_status time_ok
gcelap_spec = SpecP "GC Elapsed Time" "GCETime" "gc-elapsed-time" (mean gc_elapsed_time) run_status time_ok
gc0count_spec = SpecP "GC(0) Count" "GC0Count" "gc0-count" (meanInt gc0_count) run_status always_ok
gc0time_spec = SpecP "GC(0) Time" "GC0Time" "gc0-time" (mean gc0_time) run_status time_ok
gc0elap_spec = SpecP "GC(0) Elapsed Time" "GC0ETime" "gc0-elapsed-time" (mean gc0_elapsed_time) run_status time_ok
gc1count_spec = SpecP "GC(1) Count" "GC1Count" "gc1-count" (meanInt gc1_count) run_status always_ok
gc1time_spec = SpecP "GC(1) Time" "GC1Time" "gc1-time" (mean gc1_time) run_status time_ok
gc1elap_spec = SpecP "GC(1) Elapsed Time" "GC1ETime" "gc1-elapsed-time" (mean gc1_elapsed_time) run_status time_ok
balance_spec = SpecP "GC work balance" "Balance" "balance" (mean balance) run_status time_ok
......@@ -147,8 +149,10 @@ all_specs = [
mutetime_spec,
gctime_spec,
gcelap_spec,
gc0count_spec,
gc0time_spec,
gc0elap_spec,
gc1count_spec,
gc1time_spec,
gc1elap_spec,
balance_spec,
......
......@@ -42,8 +42,10 @@ data Results = Results {
gc_work :: Maybe Integer,
gc_time :: [Float],
gc_elapsed_time :: [Float],
gc0_count :: [Int],
gc0_time :: [Float],
gc0_elapsed_time :: [Float],
gc1_count :: [Int],
gc1_time :: [Float],
gc1_elapsed_time :: [Float],
balance :: [Float],
......@@ -69,8 +71,10 @@ emptyResults = Results {
cache_misses = Nothing,
gc_time = [],
gc_elapsed_time = [],
gc0_count = [],
gc0_time = [],
gc0_elapsed_time = [],
gc1_count = [],
gc1_time = [],
gc1_elapsed_time = [],
balance = [],
......@@ -140,6 +144,7 @@ ghc1_re = pre GHC 4.02
ghc2_re = GHC 4.02 (includes "xxM in use")
ghc3_re = GHC 4.03 (includes "xxxx bytes GC work")
ghc5_re = GHC 6.9 (includes GC(0) and GC(1) times)
ghc6_re = GHC 7.2 (includes GC counts)
-}
ghc1_re :: String -> Maybe (Integer, Integer, Integer, Integer, Integer, Integer, Float, Float, Float, Float, Float, Float)
......@@ -182,6 +187,14 @@ ghc5_re s = case matchRegex re s of
Nothing -> Nothing
where re = mkRegex "^<<ghc:[ \t]+([0-9]+)[ \t]+bytes,[ \t]*([0-9]+)[ \t]+GCs,[ \t]*([0-9]+)/([0-9]+)[ \t]+avg/max bytes residency \\(([0-9]+) samples\\), ([0-9]+) bytes GC work, ([0-9]+)M in use, ([0-9.]+) INIT \\(([0-9.]+) elapsed\\), ([0-9.]+) MUT \\(([0-9.]+) elapsed\\), ([0-9.]+) GC \\(([0-9.]+) elapsed\\), ([0-9.]+) GC\\(0\\) \\(([0-9.]+) elapsed\\), ([0-9.]+) GC\\(1\\) \\(([0-9.]+) elapsed\\), ([0-9.]+) balance :ghc>>"
ghc6_re :: String -> Maybe (Integer, Integer, Integer, Integer, Integer, Integer, Integer, Float, Float, Float, Float, Float, Float,Int,Float,Float,Int,Float,Float,Float)
ghc6_re s = case matchRegex re s of
Just [allocations, gcs, gc0_count, gc1_count, avg_residency, max_residency, samples, gc_work', in_use, initialisation, initialisation_elapsed, mut, mut_elapsed, gc, gc_elapsed, gc0, gc0_elapsed, gc1, gc1_elapsed, bal] ->
Just (read allocations, read gcs, read avg_residency, read max_residency, read samples, read gc_work', 1048576 * read in_use, read initialisation, read initialisation_elapsed, read mut, read mut_elapsed, read gc, read gc_elapsed, read gc0_count, read gc0, read gc0_elapsed, read gc1_count, read gc1, read gc1_elapsed, read bal)
Just _ -> error "ghc3_re: Can't happen"
Nothing -> Nothing
where re = mkRegex "^<<ghc:[ \t]+([0-9]+)[ \t]+bytes,[ \t]*([0-9]+)[ \t]+GCs\\(([0-9]+)[ \t]*\\+[ \t]*([0-9]+)\\),[ \t]*([0-9]+)/([0-9]+)[ \t]+avg/max bytes residency \\(([0-9]+) samples\\), ([0-9]+) bytes GC work, ([0-9]+)M in use, ([0-9.]+) INIT \\(([0-9.]+) elapsed\\), ([0-9.]+) MUT \\(([0-9.]+) elapsed\\), ([0-9.]+) GC \\(([0-9.]+) elapsed\\), ([0-9.]+) GC\\(0\\) \\(([0-9.]+) elapsed\\), ([0-9.]+) GC\\(1\\) \\(([0-9.]+) elapsed\\), ([0-9.]+) balance :ghc>>"
wrong_exit_status, wrong_output, out_of_heap, out_of_stack :: Regex
wrong_exit_status = mkRegex "^\\**[ \t]*expected exit status ([0-9]+) not seen ; got ([0-9]+)"
wrong_output = mkRegex "^expected (stdout|stderr) not matched by reality$"
......@@ -211,8 +224,8 @@ combine2Results
instrs = is1, mem_reads = mr1, mem_writes = mw1,
cache_misses = cm1,
gc_time = gt1, gc_elapsed_time = ge1, gc_work = gw1,
gc0_time = g0t1, gc0_elapsed_time = g0e1,
gc1_time = g1t1, gc1_elapsed_time = g1e1,
gc0_count = g0c1, gc0_time = g0t1, gc0_elapsed_time = g0e1,
gc1_count = g1c1, gc1_time = g1t1, gc1_elapsed_time = g1e1,
balance = b1,
binary_size = bs1, allocs = al1,
run_status = rs1, compile_status = cs1,
......@@ -224,8 +237,8 @@ combine2Results
instrs = is2, mem_reads = mr2, mem_writes = mw2,
cache_misses = cm2,
gc_time = gt2, gc_elapsed_time = ge2, gc_work = gw2,
gc0_time = g0t2, gc0_elapsed_time = g0e2,
gc1_time = g1t2, gc1_elapsed_time = g1e2,
gc0_count = g0c2, gc0_time = g0t2, gc0_elapsed_time = g0e2,
gc1_count = g1c2, gc1_time = g1t2, gc1_elapsed_time = g1e2,
balance = b2,
binary_size = bs2, allocs = al2,
run_status = rs2, compile_status = cs2,
......@@ -243,8 +256,10 @@ combine2Results
cache_misses = cm1 `mplus` cm2,
gc_time = gt1 ++ gt2,
gc_elapsed_time= ge1 ++ ge2,
gc0_count = g0c1 ++ g0c2,
gc0_time = g0t1 ++ g0t2,
gc0_elapsed_time= g0e1 ++ g0e2,
gc1_count = g1c1 ++ g1c2,
gc1_time = g1t1 ++ g1t2,
gc1_elapsed_time= g1e1 ++ g1e2,
balance = b1 ++ b2,
......@@ -356,27 +371,27 @@ parse_run_time prog [] res ex = [(prog, res{run_status=ex})]
parse_run_time prog (l:ls) res ex =
case ghc1_re l of {
Just (allocations, _, _, _, _, _, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] []
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] [] []
Nothing Nothing Nothing Nothing Nothing [];
Nothing ->
case ghc2_re l of {
Just (allocations, _, _, _, _, in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] []
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] [] []
Nothing Nothing Nothing Nothing Nothing [in_use];
Nothing ->
case ghc3_re l of {
Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] []
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] [] []
(Just gc_work') Nothing Nothing Nothing Nothing [in_use];
Nothing ->
case ghc4_re l of {
Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed, is, mem_rs, mem_ws, cache_misses') ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] []
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] [] []
(Just gc_work') (Just is) (Just mem_rs)
(Just mem_ws) (Just cache_misses') [in_use];
......@@ -385,7 +400,15 @@ parse_run_time prog (l:ls) res ex =
case ghc5_re l of {
Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed, gc0, gc0_elapsed, gc1, gc1_elapsed, bal) ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed
[gc0] [gc0_elapsed] [gc1] [gc1_elapsed] [bal]
[] [gc0] [gc0_elapsed] [] [gc1] [gc1_elapsed] [bal]
(Just gc_work') Nothing Nothing Nothing Nothing [in_use];
Nothing ->
case ghc6_re l of {
Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed, gc0_count, gc0, gc0_elapsed, gc1_count, gc1, gc1_elapsed, bal) ->
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed
[gc0_count] [gc0] [gc0_elapsed] [gc1_count] [gc1] [gc1_elapsed] [bal]
(Just gc_work') Nothing Nothing Nothing Nothing [in_use];
Nothing ->
......@@ -415,9 +438,9 @@ parse_run_time prog (l:ls) res ex =
Nothing ->
parse_run_time prog ls res ex;
}}}}}}}}}
}}}}}}}}}}
where
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed gc0 gc0_elapsed gc1 gc1_elapsed bal gc_work' instrs' mem_rs mem_ws cache_misses' in_use
got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed gc0_count gc0 gc0_elapsed gc1_count gc1 gc1_elapsed bal gc_work' instrs' mem_rs mem_ws cache_misses' in_use
= -- trace ("got_run_result: " ++ initialisation ++ ", " ++ mut ++ ", " ++ gc) $
let
time = initialisation + mut + gc
......@@ -429,8 +452,10 @@ parse_run_time prog (l:ls) res ex =
mut_elapsed_time = [mut_elapsed],
gc_time = [gc],
gc_elapsed_time = [gc_elapsed],
gc0_count = gc0_count,
gc0_time = gc0,
gc0_elapsed_time = gc0_elapsed,
gc1_count = gc1_count,
gc1_time = gc1,
gc1_elapsed_time = gc1_elapsed,
balance = bal,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment