Drop the per-task timing stats, give a summary only (#5897)
authorSimon Marlow <marlowsd@gmail.com>
Fri, 2 Mar 2012 10:53:34 +0000 (10:53 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 2 Mar 2012 11:44:17 +0000 (11:44 +0000)
commit085c7fe5d4ea6e7b59f944d46ecfeba3755a315b
tree3de7e3e6306dbf9a8869862266a35a2d0d75d11f
parent27d7d930ff8741f980245da1b895ceaa5294e257
Drop the per-task timing stats, give a summary only (#5897)

We were keeping around the Task struct (216 bytes) for every worker we
ever created, even though we only keep a maximum of 6 workers per
Capability.  These Task structs accumulate and cause a space leak in
programs that do lots of safe FFI calls; this patch frees the Task
struct as soon as a worker exits.

One reason we were keeping the Task structs around is because we print
out per-Task timing stats in +RTS -s, but that isn't terribly useful.
What is sometimes useful is knowing how *many* Tasks there were.  So
now I'm printing a single-line summary, this is for the program in

  TASKS: 2001 (1 bound, 31 peak workers (2000 total), using -N1)

So although we created 2k tasks overall, there were only 31 workers
active at any one time (which is exactly what we expect: the program
makes 30 safe FFI calls concurrently).

This also gives an indication of how many capabilities were being
used, which is handy if you use +RTS -N without an explicit number.
rts/RtsMain.c
rts/Stats.c
rts/Task.c
rts/Task.h
rts/posix/OSThreads.c
rts/sm/Compact.c