1. 23 Nov, 2007 1 commit
  2. 20 Nov, 2007 1 commit
    • Simon Marlow's avatar
      Move file locking into the RTS, fixing #629, #1109 · 1d026619
      Simon Marlow authored
      File locking (of the Haskell 98 variety) was previously done using a
      static table with linear search, which had two problems: the array had
      a fixed size and was sometimes too small (#1109), and performance of
      lockFile/unlockFile was suboptimal due to the linear search.
      Also the algorithm failed to count readers as required by Haskell 98
      (#629).
      
      Now it's done using a hash table (provided by the RTS).  Furthermore I
      avoided the extra fstat() for every open file by passing the dev_t and
      ino_t into lockFile.  This and the improvements to the locking
      algorithm result in a healthy 20% or so performance increase for
      opening/closing files (see openFile008 test).
      1d026619
  3. 15 Nov, 2007 1 commit
  4. 29 Oct, 2007 1 commit
  5. 30 Oct, 2007 1 commit
  6. 27 Oct, 2007 1 commit
  7. 24 Oct, 2007 1 commit
  8. 23 Oct, 2007 2 commits
  9. 18 Oct, 2007 1 commit
    • Simon Marlow's avatar
      add PIC relocations for x86_64, and use a simpler hack in place of x86_64_high_symbol() · 2fc88e73
      Simon Marlow authored
      This is Wolfgang Thaller's patch sent to cvs-ghc recently, with extra
      commentary by me.  It turns out that this patch is not just a cleanup,
      it is also necessary for GHCi to work on x86_64 with shared libraries,
      because previously lookupSymbol() was creating jump-table entries for
      all symbols looked up that resolved outside 2Gb, whereas Wolfgang's
      version only generates jump-table entries for 32-bit symbol references
      in object code that we load.
      2fc88e73
  10. 16 Oct, 2007 1 commit
  11. 19 Oct, 2007 1 commit
  12. 18 Oct, 2007 6 commits
  13. 17 Oct, 2007 2 commits
  14. 15 Oct, 2007 1 commit
  15. 12 Oct, 2007 4 commits
  16. 11 Oct, 2007 1 commit
    • Simon Marlow's avatar
      Add a proper write barrier for MVars · 1ed01a87
      Simon Marlow authored
      Previously MVars were always on the mutable list of the old
      generation, which meant every MVar was visited during every minor GC.
      With lots of MVars hanging around, this gets expensive.  We addressed
      this problem for MUT_VARs (aka IORefs) a while ago, the solution is to
      use a traditional GC write-barrier when the object is modified.  This
      patch does the same thing for MVars.
      
      TVars are still done the old way, they could probably benefit from the
      same treatment too.
      1ed01a87
  17. 10 Oct, 2007 2 commits
    • Simon Marlow's avatar
      we need to #include "Stg.h" first, we can't rely on GHC to inject it · 53d57aa3
      Simon Marlow authored
      This fixes the unreg build, and in general building the RTS code
      via-C. I'm not sure at what stage this was broken, but I think it
      was working accidentally before.
      53d57aa3
    • Simon Marlow's avatar
      GHCi: use non-updatable thunks for breakpoints · 27779403
      Simon Marlow authored
      The extra safe points introduced for breakpoints were previously
      compiled as normal updatable thunks, but they are guaranteed
      single-entry, so we can use non-updatable thunks here.  This restores
      the tail-call property where it was lost in some cases (although stack
      squeezing probably often recovered it), and should improve
      performance.
      27779403
  18. 09 Oct, 2007 2 commits
  19. 05 Oct, 2007 2 commits
  20. 27 Sep, 2007 3 commits
  21. 26 Sep, 2007 1 commit
  22. 25 Sep, 2007 1 commit
  23. 17 Sep, 2007 1 commit
    • Simon Marlow's avatar
      FIX #1038: failure of selector-thunk machinery to do its job · 2018c430
      Simon Marlow authored
      After a couple of abortive attempts, I think I've got this right.
      When the GC sees a chain of the form 
      
         snd (_, snd (_, snd (_, ...)))
      
      it can now deal with an arbitrary nesting depth, whereas previously it
      had a depth limit which was necessitated by the use of recursion.  Now
      we chain all the selector thunks together in the heap, and go back and
      update them all when we find the value at the end of the chain.
      
      While I was here I removed some old cruft in eval_thunk_selector()
      which was carefully manintaing invariants that aren't necessary any
      more, the main one being that evacuate() can safely be passed a
      to-space pointer now.
      
      In addition to validate I've tested building a stage3 compiler with
      and without +RTS -c, so I'm reasonably sure this is safe.
      2018c430
  24. 14 Sep, 2007 1 commit
  25. 16 Sep, 2007 1 commit