1. 03 Feb, 2005 1 commit
  2. 18 Nov, 2004 1 commit
  3. 13 Aug, 2004 1 commit
  4. 23 Jan, 2003 1 commit
    • simonmar's avatar
      [project @ 2003-01-23 12:13:10 by simonmar] · 70c1ca01
      simonmar authored
      - Add a new flag, -xt, which enables inclusion of TSOs in a heap profile.
      
      - Include large objects in heap profiles (except TSOs unless the -xt flag
        is given).
      
      - In order to make this work, I had to set the bd->free field of the
        block descriptor for a large object to the correct value.  Previously,
        it pointed to the start of the block (i.e. the same as bd->start).
        I hope this doesn't have any other consequences; it looks more
        correct this way in any case.
      70c1ca01
  5. 11 Dec, 2002 1 commit
    • simonmar's avatar
      [project @ 2002-12-11 15:36:20 by simonmar] · 0bffc410
      simonmar authored
      Merge the eval-apply-branch on to the HEAD
      ------------------------------------------
      
      This is a change to GHC's evaluation model in order to ultimately make
      GHC more portable and to reduce complexity in some areas.
      
      At some point we'll update the commentary to describe the new state of
      the RTS.  Pending that, the highlights of this change are:
      
        - No more Su.  The Su register is gone, update frames are one
          word smaller.
      
        - Slow-entry points and arg checks are gone.  Unknown function calls
          are handled by automatically-generated RTS entry points (AutoApply.hc,
          generated by the program in utils/genapply).
      
        - The stack layout is stricter: there are no "pending arguments" on
          the stack any more, the stack is always strictly a sequence of
          stack frames.
      
          This means that there's no need for LOOKS_LIKE_GHC_INFO() or
          LOOKS_LIKE_STATIC_CLOSURE() any more, and GHC doesn't need to know
          how to find the boundary between the text and data segments (BIG WIN!).
      
        - A couple of nasty hacks in the mangler caused by the neet to
          identify closure ptrs vs. info tables have gone away.
      
        - Info tables are a bit more complicated.  See InfoTables.h for the
          details.
      
        - As a side effect, GHCi can now deal with polymorphic seq.  Some bugs
          in GHCi which affected primitives and unboxed tuples are now
          fixed.
      
        - Binary sizes are reduced by about 7% on x86.  Performance is roughly
          similar, some programs get faster while some get slower.  I've seen
          GHCi perform worse on some examples, but haven't investigated
          further yet (GHCi performance *should* be about the same or better
          in theory).
      
        - Internally the code generator is rather better organised.  I've moved
          info-table generation from the NCG into the main codeGen where it is
          shared with the C back-end; info tables are now emitted as arrays
          of words in both back-ends.  The NCG is one step closer to being able
          to support profiling.
      
      This has all been fairly thoroughly tested, but no doubt I've messed
      up the commit in some way.
      0bffc410
  6. 05 Aug, 2002 1 commit
    • simonmar's avatar
      [project @ 2002-08-05 10:11:03 by simonmar] · 3c5a4f17
      simonmar authored
      Overhaul the debugging flags.  The old bitfield mechanism was a bit
      silly, so now instead of writing -D129 (the one I use most) you can
      now write -DSs.  Each debugging option has a single character assigned
      to it, documented in the -? help text.
      3c5a4f17
  7. 17 Jul, 2002 1 commit
    • simonmar's avatar
      [project @ 2002-07-17 09:21:48 by simonmar] · 7457757f
      simonmar authored
      Remove most #includes of system headers from Stg.h, and instead
      #include any required headers directly in each RTS source file.
      
      The idea is to (a) reduce namespace pollution from system headers that
      we don't need, (c) be clearer about dependencies on system things in
      the RTS, and (c) improve via-C compilation times (maybe).
      
      In practice though, HsBase.h #includes everything anyway, so the
      difference from the point of view of .hc source is minimal.  However,
      this makes it easier to move to zero-includes if we wanted to (see
      discussion on the FFI list; I'm still not sure that's possible but
      at least this is a step in the right direction).
      7457757f
  8. 12 Dec, 2001 1 commit
  9. 26 Nov, 2001 1 commit
    • simonmar's avatar
      [project @ 2001-11-26 16:54:21 by simonmar] · dbef766c
      simonmar authored
      Profiling cleanup.
      
      This commit eliminates some duplication in the various heap profiling
      subsystems, and generally centralises much of the machinery.  The key
      concept is the separation of a heap *census* (which is now done in one
      place only instead of three) from the calculation of retainer sets.
      Previously the retainer profiling code also did a heap census on the
      fly, and lag-drag-void profiling had its own census machinery.
      
      Value-adds:
      
         - you can now restrict a heap profile to certain retainer sets,
           but still display by cost centre (or type, or closure or
           whatever).
      
         - I've added an option to restrict the maximum retainer set size
           (+RTS -R<size>, defaulting to 8).
      
         - I've cleaned up the heap profiling options at the request of
           Simon PJ.  See the help text for details.  The new scheme
           is backwards compatible with the old.
      
         - I've removed some odd bits of LDV or retainer profiling-specific
           code from various parts of the system.
      
         - the time taken doing heap censuses (and retainer set calculation)
           is now accurately reported by the RTS when you say +RTS -Sstderr.
      
      Still to come:
      
         - restricting a profile to a particular biography
           (lag/drag/void/use).  This requires keeping old heap censuses
           around, but the infrastructure is now in place to do this.
      dbef766c
  10. 25 Nov, 2001 1 commit
    • sof's avatar
      [project @ 2001-11-25 16:57:38 by sof] · a412def3
      sof authored
      Retainer/LDV changes.
      
      The recent prof-related commit forgot to include RtsFlags.h, methinks.
      But, modulo trivia, I'm reasonably sure that this commit mirrors
      whatever mods that unchecked-in file contains.
      a412def3
  11. 31 Aug, 2001 1 commit
  12. 08 Aug, 2001 1 commit
    • simonmar's avatar
      [project @ 2001-08-08 14:14:08 by simonmar] · f3d40a6e
      simonmar authored
      Flag tweaks: +RTS -c now means "enable compaction all the time"
      (previously there was no way to do this *and* run without a maximum
      heap size).
      
      The heuristics for determining the generation sizes are also slightly
      better now.
      f3d40a6e
  13. 07 Aug, 2001 2 commits
    • simonmar's avatar
      [project @ 2001-08-07 10:11:05 by simonmar] · b36887cd
      simonmar authored
      Move RtsFlags.h into ghc/includes, so it's available in a binary
      installation.  RtsFlags.h was repository-copied behind the scenes to
      keep the revision history.
      b36887cd
    • simonmar's avatar
      [project @ 2001-08-07 09:20:52 by simonmar] · 433cdcad
      simonmar authored
      - Allow RTS options to be given using the GHCRTS environment variable.
      
      - Fix the heap size calculation to take into account all generations.
        It's more conservative than it used to be, but now it is less likely
        that the maximum heap size will be exceeded.
      
      - Compacting collection is turned on automatically when residency
        reaches 30% of the maximum heap size, tunable with +RTS -c<n>.
        +RTS -c turns off compaction altogether.
      
      - The maximum heap size is off by default.  NOTE: this also means no
        compaction by default.  It is recommended that people enable a maximum
        heap size for their system using the GHCRTS environment var; eg:
        GHCRTS=-M128m.
      433cdcad
  14. 23 Jul, 2001 1 commit
    • simonmar's avatar
      [project @ 2001-07-23 17:23:19 by simonmar] · dfd7d6d0
      simonmar authored
      Add a compacting garbage collector.
      
      It isn't enabled by default, as there are still a couple of problems:
      there's a fallback case I haven't implemented yet which means it will
      occasionally bomb out, and speed-wise it's quite a bit slower than the
      copying collector (about 1.8x slower).
      
      Until I can make it go faster, it'll only be useful when you're
      actually running low on real memory.
      
      '+RTS -c' to enable it.
      
      Oh, and I cleaned up a few things in the RTS while I was there, and
      fixed one or two possibly real bugs in the existing GC.
      dfd7d6d0
  15. 19 Jul, 2001 1 commit
    • andy's avatar
      [project @ 2001-07-19 07:28:00 by andy] · c95b2db6
      andy authored
      Re-adding the -i flag for heap profiling.
      
      The problem was that profiling forces 2-space collection,
      and the census was done on *every* GC. Now, we still keep
      the 2-space for profiling, but just do the census periodically,
      according to a new flag, -i<secs>.
      c95b2db6
  16. 22 Mar, 2001 1 commit
    • hwloidl's avatar
      [project @ 2001-03-22 03:51:08 by hwloidl] · 20fc2f0c
      hwloidl authored
      -*- outline -*-
      Time-stamp: <Thu Mar 22 2001 03:50:16 Stardate: [-30]6365.79 hwloidl>
      
      This commit covers changes in GHC to get GUM (way=mp) and GUM/GdH (way=md)
      working. It is a merge of my working version of GUM, based on GHC 4.06,
      with GHC 4.11. Almost all changes are in the RTS (see below).
      
      GUM is reasonably stable, we used the 4.06 version in large-ish programs for
      recent papers. Couple of things I want to change, but nothing urgent.
      GUM/GdH has just been merged and needs more testing. Hope to do that in the
      next weeks. It works in our working build but needs tweaking to run.
      GranSim doesn't work yet (*sigh*). Most of the code should be in, but needs
      more debugging.
      
      ToDo: I still want to make the following minor modifications before the release
      - Better wrapper skript for parallel execution [ghc/compiler/main]
      - Update parallel docu: started on it but it's minimal [ghc/docs/users_guide]
      - Clean up [nofib/parallel]: it's a real mess right now (*sigh*)
      - Update visualisation tools (minor things only IIRC) [ghc/utils/parallel]
      - Add a Klingon-English glossary
      
      * RTS:
      
      Almost all changes are restricted to ghc/rts/parallel and should not
      interfere with the rest. I only comment on changes outside the parallel
      dir:
      
      - Several changes in Schedule.c (scheduling loop; createThreads etc);
        should only affect parallel code
      - Added ghc/rts/hooks/ShutdownEachPEHook.c
      - ghc/rts/Linker.[ch]: GUM doesn't know about Stable Names (ifdefs)!!
      - StgMiscClosures.h: END_TSO_QUEUE etc now defined here (from StgMiscClosures.hc)
                           END_ECAF_LIST was missing a leading stg_
      - SchedAPI.h: taskStart now defined in here; it's only a wrapper around
                    scheduleThread now, but might use some init, shutdown later
      - RtsAPI.h: I have nuked the def of rts_evalNothing
      
      * Compiler:
      
      - ghc/compiler/main/DriverState.hs
        added PVM-ish flags to the parallel way
        added new ways for parallel ticky profiling and distributed exec
      
      - ghc/compiler/main/DriverPipeline.hs
        added a fct run_phase_MoveBinary which is called with way=mp after linking;
        it moves the bin file into a PVM dir and produces a wrapper script for
        parallel execution
        maybe cleaner to add a MoveBinary phase in DriverPhases.hs but this way
        it's less intrusive and MoveBinary makes probably only sense for mp anyway
      
      * Nofib:
      
      - nofib/spectral/Makefile, nofib/real/Makefile, ghc/tests/programs/Makefile:
        modified to skip some tests if HWL_NOFIB_HACK is set; only tmp to record
        which test prgs cause problems in my working build right now
      20fc2f0c
  17. 14 Mar, 2001 1 commit
    • sewardj's avatar
      [project @ 2001-03-14 11:18:18 by sewardj] · bc210f7d
      sewardj authored
      Add closure selection for heap profiling.  You can use
      -hc{cc_names}, -hd{descrs}, -hy{types}, -hm{mods} to restrict profiled
      closures to the specified sets.  Multiple restrictions are allowed.
      bc210f7d
  18. 19 Dec, 2000 1 commit
  19. 04 Dec, 2000 1 commit
  20. 01 Nov, 2000 1 commit
    • simonmar's avatar
      [project @ 2000-11-01 11:41:47 by simonmar] · 39a99171
      simonmar authored
      Add a basic "front panel" for GHC-compiled programs.
      
      How to use it:
      
      	- re-autoconf & configure to detect GTK+
      
      	- add "GhcRtsWithFrontPanel = YES" to mk/build.mk
      
      	- rebuild the RTS
      
      	- compile up a program, add `gtk-config --libs` to the
      	  link command line
      
      	- run with program with +RTS -f,
      
      	- sit back & watch the show :-)  Programs with lots of
      	  heap-resident data are the most interesting.  For extra
      	  kicks, turn up the number of generations & steps like so:
      	  +RTS -f -G5 -T3.
      
      	- Bootstrap your compiler, and see in glorious technicolor
      	  just how much of a lumbering beast GHC really is.
      
      This is a work in progress.  There's lots more stuff we could display
      on the panel: suggestions/comments are of course welcome.  The window
      layout was designed with GLADE, I'll commit the config file shortly.
      
      I haven't quite figured out how we're going to integrate this with the
      release yet (ie. whether we'll distribute two separate RTS's or what).
      39a99171
  21. 06 Oct, 2000 1 commit
  22. 03 Aug, 2000 1 commit
    • simonmar's avatar
      [project @ 2000-08-03 11:28:35 by simonmar] · 66f7a41d
      simonmar authored
      Implement +RTS -C<n>, the context switch interval flag.  This was
      previously advertised in the usage message, but there was a note in
      the Users' Guide stating that it didn't work.  Anwyay, I'm going to
      consider it a bug and backport to 4.08.1.
      66f7a41d
  23. 19 Apr, 2000 1 commit
  24. 03 Apr, 2000 1 commit
  25. 31 Mar, 2000 1 commit
    • hwloidl's avatar
      [project @ 2000-03-31 03:09:35 by hwloidl] · dd4c28a9
      hwloidl authored
      Numerous changes in the RTS to get GUM-4.06 working (currently works with
      parfib-ish programs). Most changes are isolated in the rts/parallel dir.
      
      rts/parallel/:
        The most important changes are a rewrite of the (un-)packing code (Pack.c)
        and changes in LAGA, GALA table operations (Global.c) expecially in
        rebuilding the tables during GC.
      
      rts/:
        Minor changes in Schedule.c, GC.c (interface to par specific root marking
        and evacuation), and lots of additions to Sanity.c (surprise ;-)
        Main.c change for startup: I use a new function rts_evalNothing to
        start non-main-PEs in a PAR || SMP setup (RtsAPI.c)
      
      includes/:
        Updated GranSim macros in PrimOps.h.
      
      lib/std:
        Few changes in PrelHandle.c etc replacing ForeignObj by Addr in a PAR
        setup (we still don't support ForeignObjs or WeakPtrs in GUM).
        Typically use
          #define FILE_OBJECT	    Addr
        when dealing with files.
      
      hslibs/lang/:
        Same as above (in Foreign(Obj).lhs, Weak.lhs, IOExts.lhs etc).
      
      -- HWL
      dd4c28a9
  26. 08 Mar, 2000 1 commit
    • simonmar's avatar
      [project @ 2000-03-08 17:48:24 by simonmar] · de896403
      simonmar authored
      - generalise the per-module initialisation stubs so that we use it
        in normal (non-profiled) code too.  The initialisation stubs are
        now called '__init_<module>' rather than '_reg<module>'.
      
      - Register foreign exported functions as stable pointers in the
        initialisation code for the module.  This fixes the foreign export
        problems reported by several people.
      
      - remove the concept of "module groups" from the profiling subsystem.
      
      - change the profiling semantics slightly; it should be unnecessary
        to use '-caf-all' to get reasonable profiles now.
      de896403
  27. 17 Feb, 2000 1 commit
  28. 13 Jan, 2000 1 commit
    • hwloidl's avatar
      [project @ 2000-01-13 14:33:57 by hwloidl] · 1b28d4e1
      hwloidl authored
      Merged GUM-4-04 branch into the main trunk. In particular merged GUM and
      SMP code. Most of the GranSim code in GUM-4-04 still has to be carried over.
      1b28d4e1
  29. 12 Jan, 2000 1 commit
  30. 29 Nov, 1999 1 commit
    • keithw's avatar
      [project @ 1999-11-29 12:02:42 by keithw] · 0ee48772
      keithw authored
      This commit adds the new RTS option `-xc', which prints the current
      cost-centre stack to stderr whenever an exception is raised.  This is
      intended to be a debugging tool, to help trace those "Prelude.head:
      empty list" errors that are so frustrating to find.
      
      `-xc' is only available for programs compiled with -prof, and you
      probably want -auto as well to get useful information.
      
      This is currently experimental; it would be better if it only
      displayed the info for *uncaught* exceptions, but this is harder to
      implement.
      
      This commit also makes an OFTEL-inspired extension to the RTS option
      space.  Since we've almost run out of options, `-x' is now reserved
      for `extended' options.  `-xc' is the first of these, but that leaves
      '-x[0-9A-Zabd-wyz]' still to be used!  The prefix `-xx' is reserved
      for future extension.
      0ee48772
  31. 02 Nov, 1999 1 commit
    • simonmar's avatar
      [project @ 1999-11-02 15:05:38 by simonmar] · f6692611
      simonmar authored
      This commit adds in the current state of our SMP support.  Notably,
      this allows the new way 's' to be built, providing support for running
      multiple Haskell threads simultaneously on top of any pthreads
      implementation, the idea being to take advantage of commodity SMP
      boxes.
      
      Don't expect to get much of a speedup yet; due to the excessive
      locking required to synchronise access to mutable heap objects, you'll
      see a slowdown in most cases, even on a UP machine.  The best I've
      seen is a 1.6-1.7 speedup on an example that did no locking (two
      optimised nfibs in parallel).
      
      	- new RTS -N flag specifies how many pthreads to start.
      
      	- new driver -smp flag, tells the driver to use way 's'.
      
      	- new compiler -fsmp option (not for user comsumption)
      	  tells the compiler not to generate direct jumps to
      	  thunk entry code.
      
      	- largely rewritten scheduler
      
      	- _ccall_GC is now done by handing back a "token" to the
      	  RTS before executing the ccall; it should now be possible
      	  to execute blocking ccalls in the current thread while
      	  allowing the RTS to continue running Haskell threads as
      	  normal.
      
      	- you can only call thread-safe C libraries from a way 's'
      	  build, of course.
      
      Pthread support is still incomplete, and weird things (including
      deadlocks) are likely to happen.
      f6692611
  32. 15 Sep, 1999 1 commit
    • simonmar's avatar
      [project @ 1999-09-15 13:45:14 by simonmar] · 17315bf6
      simonmar authored
      Heap Profiling
      --------------
      
      This commit adds simple hp2ps-style heap profiling.  Just the '-h'
      option is supported so far.
      
      Heap profiles will show the top two cost centres on each cost centre
      stack.
      
      Time/Alloc profiles have been extended to aggregate the costs on a
      per-cost-centre basis and show the table of highest consuming cost
      centres before the full table of cost centre stacks.
      
      Profiles work best if '-caf-all' is used, especially when using
      one of the '-auto' flags.
      17315bf6
  33. 25 Aug, 1999 1 commit
    • simonmar's avatar
      [project @ 1999-08-25 16:11:43 by simonmar] · c6ab4bfa
      simonmar authored
      Support for thread{WaitRead,WaitWrite,Delay}.  These should behave
      identically to the 3.02 implementations.
      
      We now have the virtual timer on during all program runs, which ticks
      at 50Hz by default.  This is used to implement threadDelay, so you
      won't get any better granularity than the tick frequency
      unfortunately.  It remains to be seen whether using the virtual timer
      will have a measurable impact on performance for non-threadDelaying
      programs.
      
      All operations in the I/O subsystem should now be non-blocking with
      respect to other running Haskell threads.  It remains to be seen
      whether this will have a measurable performance impact on
      non-concurrent programs (probably not).
      c6ab4bfa
  34. 25 Jun, 1999 1 commit
  35. 11 May, 1999 1 commit
    • keithw's avatar
      [project @ 1999-05-11 16:47:39 by keithw] · eb407ca1
      keithw authored
      (this is number 9 of 9 commits to be applied together)
      
        Usage verification changes / ticky-ticky changes:
      
        We want to verify that SingleEntry thunks are indeed entered at most
        once.  In order to do this, -ticky / -DTICKY_TICKY turns on eager
        blackholing.  We blackhole with new blackholes: SE_BLACKHOLE and
        SE_CAF_BLACKHOLE.  We will enter one of these if we attempt to enter
        a SingleEntry thunk twice.  Note that CAFs are dealt with in by
        codeGen, and ordinary thunks by the RTS.
      
        We also want to see how many times we enter each Updatable thunk.
        To this end, we have modified -ticky.  When -ticky is on, we update
        with a permanent indirection, and arrange that when we enter a
        permanent indirection we count the entry and then convert the
        indirection to a normal indirection.  This gives us a means of
        counting the number of thunks entered again after the first entry.
        Obviously this screws up profiling, and so you can't build a ticky
        and profiling compiler any more.
      
        Also a few other changes that didn't make it into the previous 8
        commits, but form a part of this set.
      eb407ca1
  36. 25 Mar, 1999 1 commit
    • simonm's avatar
      [project @ 1999-03-25 13:13:51 by simonm] · e1db55d8
      simonm authored
      Profiling fixes.
      
      	- top-level CAF CCSs now *append* themselves to the
      	  current CCS when called.
      
      	- remove DICT stuff.
      
      	- fixes to the auto-scc annotating in the desugarer.
      e1db55d8
  37. 03 Mar, 1999 1 commit
  38. 18 Feb, 1999 1 commit
  39. 05 Feb, 1999 1 commit