Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
Glasgow Haskell Compiler
nofib
Commits
5811e9cb
Commit
5811e9cb
authored
Apr 05, 2011
by
Simon Marlow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
generate results for GC counts
parent
8eb091c6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
11 deletions
+40
-11
nofib-analyse/Main.hs
nofib-analyse/Main.hs
+4
-0
nofib-analyse/Slurp.hs
nofib-analyse/Slurp.hs
+36
-11
No files found.
nofib-analyse/Main.hs
View file @
5811e9cb
...
...
@@ -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
,
...
...
nofib-analyse/Slurp.hs
View file @
5811e9cb
...
...
@@ -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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment