• Simon Marlow's avatar
    Drop the per-task timing stats, give a summary only (#5897) · 085c7fe5
    Simon Marlow authored
    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.
    085c7fe5
Compact.c 23.5 KB