1. 22 Aug, 2003 1 commit
    • sof's avatar
      [project @ 2003-08-22 22:24:12 by sof] · cffcb52b
      sof authored
      setupRtsFlags(): don't overwrite argv[0] with its basename:
         - argv[] may not point to writeable memory
         - System.Environment.getProgName strips off the 'dirname' portion
           anyway.
         - Not possible to get at the untransformed argv[0] from
           Haskell code, should such a need arise.
      
      Uses of prog_argv[0] within the RTS has now been replaced with prog_name,
      which is the basename of prog_argv[0].
      cffcb52b
  2. 22 Feb, 2003 1 commit
    • sof's avatar
      [project @ 2003-02-22 04:51:50 by sof] · 557947d3
      sof authored
      Clean up code&interfaces that deals with timers and asynchrony:
      
      - Timer.{c,h} now defines the platform-independent interface
        to the timing services needed by the RTS. Itimer.{c,h} +
        win32/Ticker.{c,h} defines the OS-specific services that
        creates/destroys a timer.
      - For win32 plats, drop the long-standing use of the 'multimedia'
        API timers and implement the ticking service ourselves. Simpler
        and more flexible.
      - Select.c is now solely for platforms that use select() to handle
        non-blocking I/O & thread delays. win32/AwaitEvent.c provides
        the same API on the Win32 side.
      - support threadDelay on win32 platforms via worker threads.
      
      Not yet compiled up on non-win32 platforms; will do once checked in.
      557947d3
  3. 19 Dec, 2002 1 commit
  4. 01 Nov, 2002 2 commits
  5. 05 Jul, 2002 1 commit
    • mthomas's avatar
      [project @ 2002-07-05 01:23:45 by mthomas] · 2c7eeab5
      mthomas authored
      Allow module names up to 50 chars wide without misalignment of the
      profiling table.  For example: "Graphics.UI.ObjectIO.Process.Toolbar"
      no longer messes up the output.
      
      The output is now well over 80 chars wide now.
      2c7eeab5
  6. 04 Jul, 2002 1 commit
  7. 12 Dec, 2001 2 commits
    • simonmar's avatar
      [project @ 2001-12-12 15:13:20 by simonmar] · 57c676e4
      simonmar authored
      Include the cost-centre-stack ID in the time profiling output.
      57c676e4
    • simonmar's avatar
      [project @ 2001-12-12 14:31:42 by simonmar] · 55c8be52
      simonmar authored
      - Add a new type of restriction: -hC, which restricts to closures
        whose CCS contains the specified CCs *anywhere* (not just at the
        top).
      
      - Complain if the user tries to request both retainer and biographical
        profiling.  We don't support both simultaneously, because they use
        the same header word in the closure.
      
      - Allow for the fact that the heap might contain some closures which
        don't have a valid retainer set during the heap census.  The only
        known closures of this kind so far are DEAD_WEAK closures.
      
      - Some cruft-removal and renaming of functions to follow conventions.
      55c8be52
  8. 28 Nov, 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. 22 Nov, 2001 2 commits
    • simonmar's avatar
      [project @ 2001-11-22 16:33:06 by simonmar] · 9469779a
      simonmar authored
      Omit GC and SYSTEM from the cost centre summary at the top of the profile.
      9469779a
    • simonmar's avatar
      [project @ 2001-11-22 14:25:11 by simonmar] · db61851c
      simonmar authored
      Retainer Profiling / Lag-drag-void profiling.
      
      This is mostly work by Sungwoo Park, who spent a summer internship at
      MSR Cambridge this year implementing these two types of heap profiling
      in GHC.
      
      Relative to Sungwoo's original work, I've made some improvements to
      the code:
      
         - it's now possible to apply constraints to retainer and LDV profiles
           in the same way as we do for other types of heap profile (eg.
           +RTS -hc{foo,bar} -hR -RTS gives you a retainer profiling considering
           only closures with cost centres 'foo' and 'bar').
      
         - the heap-profile timer implementation is cleaned up.
      
         - heap profiling no longer has to be run in a two-space heap.
      
         - general cleanup of the code and application of the SDM C coding
           style guidelines.
      
      Profiling will be a little slower and require more space than before,
      mainly because closures have an extra header word to support either
      retainer profiling or LDV profiling (you can't do both at the same
      time).
      
      We've used the new profiling tools on GHC itself, with moderate
      success.  Fixes for some space leaks in GHC to follow...
      db61851c
  11. 18 Oct, 2001 2 commits
  12. 14 Aug, 2001 1 commit
    • sewardj's avatar
      [project @ 2001-08-14 13:40:07 by sewardj] · bc5c8021
      sewardj authored
      Change the story about POSIX headers in C compilation.
      
      Until now, all C code in the RTS and library cbits has by default been
      compiled with settings for POSIXness enabled, that is:
         #define _POSIX_SOURCE   1
         #define _POSIX_C_SOURCE 199309L
         #define _ISOC9X_SOURCE
      If you wanted to negate this, you'd have to define NON_POSIX_SOURCE
      before including headers.
      
      This scheme has some bad effects:
      
      * It means that ccall-unfoldings exported via interfaces from a
        module compiled with -DNON_POSIX_SOURCE may not compile when
        imported into a module which does not -DNON_POSIX_SOURCE.
      
      * It overlaps with the feature tests we do with autoconf.
      
      * It seems to have caused borkage in the Solaris builds for some
        considerable period of time.
      
      The New Way is:
      
      * The default changes to not-being-in-Posix mode.
      
      * If you want to force a C file into Posix mode, #include as
        the **first** include the new file ghc/includes/PosixSource.h.
        Most of the RTS C sources have this include now.
      
      * NON_POSIX_SOURCE is almost totally expunged.  Unfortunately
        we have to retain some vestiges of it in ghc/compiler so that
        modules compiled via C on Solaris using older compilers don't
        break.
      bc5c8021
  13. 23 Jul, 2001 1 commit
  14. 12 May, 2000 1 commit
    • simonmar's avatar
      [project @ 2000-05-12 13:01:04 by simonmar] · 5ee90f9b
      simonmar authored
      The time/allocation profile now shows costs as both
      
      	- "individual" (incurred by the specific cost-centre stack), and
      	- "inherited" (incurrent by the cost-centre stack and all its
      	  children).
      
      In addition, the "inner" column has been removed (should be the same
      as the sum of the scc counts of the children of the current node), and
      the "caf" column has been removed (wasn't very useful).
      5ee90f9b
  15. 19 Apr, 2000 1 commit
  16. 05 Apr, 2000 1 commit
  17. 03 Apr, 2000 1 commit
  18. 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
  19. 07 Mar, 2000 1 commit
  20. 01 Mar, 2000 1 commit
  21. 29 Feb, 2000 1 commit
    • simonmar's avatar
      [project @ 2000-02-29 16:58:08 by simonmar] · 426fa533
      simonmar authored
      Change the behaviour of the cost-centre stack profiler for recursive
      sccs.  Before, we used to remove the old copy of the CC from the stack
      and push the new one on.  Now, we record back-edges in the graph when
      a recursive scc is detected.
      
      This should give saner-looking cost-centre stacks for heavily
      recursive code.  Indeed, it reduces the number of stacks in the
      profile for some examples considerably.
      426fa533
  22. 17 Feb, 2000 1 commit
  23. 04 Nov, 1999 1 commit
  24. 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
  25. 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
  26. 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
  27. 29 Jun, 1999 1 commit
    • panne's avatar
      [project @ 1999-06-29 13:04:38 by panne] · 34533246
      panne authored
      Made the compilation of the RTS almost warning-free and improved the
      output of some "barf"s in the garbage collector . This is part of my
      epic crusade against "scavenge_mut_list: strange object?"... :-(
      34533246
  28. 23 Apr, 1999 1 commit
  29. 08 Apr, 1999 1 commit
    • simonm's avatar
      [project @ 1999-04-08 15:43:44 by simonm] · 6a19a2b9
      simonm authored
      Don't set the cost centre when entering a PAP.  Either:
      
      	-  it's fully applied, in which case we're about to
      	   set the CCS in the function anyway, or
      
      	-  we're about to build another PAP in which case the
      	   costs get attributed to the current CCS.
      
      This avoids appending CCSs twice in some cases.
      6a19a2b9
  30. 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
  31. 05 Feb, 1999 1 commit
  32. 02 Dec, 1998 1 commit