1. 22 May, 2015 4 commits
  2. 21 May, 2015 11 commits
    • Russ Cox's avatar
      runtime: fix callwritebarrier · 001438bd
      Russ Cox authored
      Given a call frame F of size N where the return values start at offset R,
      callwritebarrier was instructing heapBitsBulkBarrier to scan the block
      of memory [F+R, F+R+N). It should only scan [F+R, F+N). The extra N-R
      bytes scanned might lead into the next allocated block in memory.
      Because the scan was consulting the heap bitmap for type information,
      scanning into the next block normally "just worked" in the sense of
      not crashing.
      
      Scanning the extra N-R bytes of memory is a problem mainly because
      it causes the GC to consider pointers that might otherwise not be
      considered, leading it to retain objects that should actually be freed.
      This is very difficult to detect.
      
      Luckily, juju turned up a case where the heap bitmap and the memory
      were out of sync for the block immediately after the call frame, so that
      heapBitsBulkBarrier saw an obvious non-pointer where it expected a
      pointer, causing a loud crash.
      
      Why is there a non-pointer in memory that the heap bitmap records as
      a pointer? That is more difficult to answer. At least one way that it
      could happen is that allocations containing no pointers at all do not
      update the heap bitmap. So if heapBitsBulkBarrier walked out of the
      current object and into a no-pointer object and consulted those bitmap
      bits, it would be misled. This doesn't happen in general because all
      the paths to heapBitsBulkBarrier first check for the no-pointer case.
      This may or may not be what happened, but it's the only scenario
      I've been able to construct.
      
      I tried for quite a while to write a simple test for this and could not.
      It does fix the juju crash, and it is clearly an improvement over the
      old code.
      
      Fixes #10844.
      
      Change-Id: I53982c93ef23ef93155c4086bbd95a4c4fdaac9a
      Reviewed-on: https://go-review.googlesource.com/10317Reviewed-by: 's avatarAustin Clements <austin@google.com>
      001438bd
    • Austin Clements's avatar
      runtime: eliminate write barrier from adjustpointers · a5c3bbe0
      Austin Clements authored
      Currently adjustpointers invokes a write barrier for every stack slot
      it updates. This is safe---the write barrier always does nothing
      because the new value is never a heap pointer---but it's unnecessary
      overhead in performance and complexity.
      
      Fix this by rewriting adjustpointers to work with *uintptrs instead of
      *unsafe.Pointers. As an added bonus, this makes the code cleaner.
      
      name                   old mean              new mean              delta
      BinaryTree17            3.35s × (0.98,1.01)   3.33s × (0.99,1.02)    ~    (p=0.095 n=20+19)
      Fannkuch11              2.49s × (1.00,1.01)   2.52s × (0.99,1.01)  +1.23% (p=0.000 n=19+20)
      FmtFprintfEmpty        52.2ns × (0.99,1.02)  52.2ns × (0.99,1.02)    ~    (p=0.766 n=19+19)
      FmtFprintfString        181ns × (0.99,1.02)   179ns × (0.99,1.01)  -1.06% (p=0.000 n=20+19)
      FmtFprintfInt           177ns × (0.99,1.01)   173ns × (0.99,1.02)  -2.26% (p=0.000 n=17+20)
      FmtFprintfIntInt        300ns × (0.99,1.01)   302ns × (0.99,1.01)  +0.76% (p=0.000 n=19+20)
      FmtFprintfPrefixedInt   253ns × (0.99,1.02)   256ns × (0.99,1.01)  +0.96% (p=0.000 n=20+19)
      FmtFprintfFloat         334ns × (0.99,1.02)   334ns × (1.00,1.01)    ~    (p=0.243 n=20+19)
      FmtManyArgs            1.16µs × (0.99,1.01)  1.17µs × (0.99,1.02)  +0.88% (p=0.000 n=20+20)
      GobDecode              9.16ms × (0.99,1.02)  9.18ms × (1.00,1.00)  +0.21% (p=0.048 n=20+17)
      GobEncode              7.03ms × (0.99,1.01)  7.05ms × (0.99,1.01)    ~    (p=0.091 n=19+19)
      Gzip                    374ms × (0.99,1.01)   372ms × (0.99,1.02)  -0.50% (p=0.008 n=18+20)
      Gunzip                 92.9ms × (0.99,1.01)  92.5ms × (1.00,1.01)  -0.47% (p=0.002 n=19+19)
      HTTPClientServer       53.1µs × (0.98,1.01)  52.5µs × (0.99,1.01)  -0.98% (p=0.000 n=20+19)
      JSONEncode             17.4ms × (0.99,1.02)  17.5ms × (0.99,1.01)    ~    (p=0.061 n=19+20)
      JSONDecode             66.0ms × (0.99,1.02)  64.7ms × (0.99,1.01)  -1.87% (p=0.000 n=20+20)
      Mandelbrot200          3.94ms × (1.00,1.01)  3.95ms × (1.00,1.01)    ~    (p=0.799 n=18+19)
      GoParse                3.89ms × (0.99,1.02)  3.86ms × (0.99,1.01)  -0.70% (p=0.016 n=20+19)
      RegexpMatchEasy0_32     102ns × (0.99,1.02)   102ns × (1.00,1.01)    ~    (p=0.557 n=20+18)
      RegexpMatchEasy0_1K     353ns × (0.99,1.02)   341ns × (0.99,1.01)  -3.38% (p=0.000 n=20+20)
      RegexpMatchEasy1_32    85.0ns × (0.99,1.02)  85.0ns × (0.99,1.01)    ~    (p=0.851 n=19+20)
      RegexpMatchEasy1_1K     521ns × (0.99,1.02)   506ns × (1.00,1.01)  -2.85% (p=0.000 n=20+18)
      RegexpMatchMedium_32    142ns × (0.99,1.02)   141ns × (1.00,1.01)  -1.17% (p=0.000 n=20+19)
      RegexpMatchMedium_1K   42.8µs × (0.99,1.01)  42.3µs × (0.99,1.01)  -1.07% (p=0.000 n=20+19)
      RegexpMatchHard_32     2.17µs × (0.99,1.01)  2.16µs × (1.00,1.01)  -0.51% (p=0.042 n=20+18)
      RegexpMatchHard_1K     65.6µs × (0.99,1.01)  64.8µs × (1.00,1.00)  -1.21% (p=0.000 n=20+17)
      Revcomp                 581ms × (0.99,1.04)   536ms × (1.00,1.01)  -7.71% (p=0.000 n=20+18)
      Template               77.2ms × (0.99,1.01)  76.8ms × (0.99,1.01)    ~    (p=0.426 n=20+18)
      TimeParse               369ns × (0.99,1.02)   371ns × (1.00,1.01)    ~    (p=0.117 n=20+19)
      TimeFormat              371ns × (0.99,1.02)   391ns × (0.99,1.01)  +5.33% (p=0.000 n=20+19)
      
      Change-Id: I5b952ba577ac4365c8c87db837c5804a1e30b7be
      Reviewed-on: https://go-review.googlesource.com/10293Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      a5c3bbe0
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: remove F3t field from Prog · 13781737
      Josh Bleecher Snyder authored
      F3t was effectively a local variable.
      Remove it.
      
      This shrinks obj.Prog from 456 to 448 bytes,
      which places it in a smaller malloc class.
      
      This reduces the memory usage of the compiler
      while compiling the rotate tests by ~2.75%.
      
      Change-Id: I31cc9dd67269851a430b56bcc7d255c9349eb522
      Reviewed-on: https://go-review.googlesource.com/10255Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      13781737
    • Russ Cox's avatar
      cmd/go: set correct install location for cmd/compile and cmd/link · 216e5c74
      Russ Cox authored
      Without this, they install to $GOROOT/bin.
      
      Change-Id: Iae4b8f59c8392f6abd841490e56922738089f8d4
      Reviewed-on: https://go-review.googlesource.com/10297Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      216e5c74
    • Russ Cox's avatar
      all: retire architecture letter in file names, public API · cf932cd8
      Russ Cox authored
      This CL removes the remaining visible uses of the "architecture letter" concept.
      (They are no longer in tool names nor in source directory names.)
      
      Because the architecture letter concept is now gone, delete GOCHAR
      from "go env" output, and change go/build.ArchChar to return an
      error always.
      
      The architecture letter is still used in the compiler and linker sources
      as a clumsy architecture enumeration, but that use is not visible to
      Go users and can be cleaned up separately.
      
      Change-Id: I4d97a38f372003fb610c9c5241bea440d9dbeb8d
      Reviewed-on: https://go-review.googlesource.com/10289Reviewed-by: 's avatarRob Pike <r@golang.org>
      cf932cd8
    • Russ Cox's avatar
      all: build and use go tool compile, go tool link · 0f4132c9
      Russ Cox authored
      This CL fixes the build to use the newly created go tool compile
      and go tool link in place of go tool 5g, go tool 5l, and so on.
      
      See golang-dev thread titled "go tool compile, etc" for background.
      
      Although it was not a primary motivation, this conversion does
      reduce the wall clock time and cpu time required for make.bash
      by about 10%.
      
      Change-Id: I79cbbdb676cab029db8aeefb99a53178ff55f98d
      Reviewed-on: https://go-review.googlesource.com/10288Reviewed-by: 's avatarRob Pike <r@golang.org>
      0f4132c9
    • Russ Cox's avatar
      cmd/compile, cmd/link: create from 5g, 5l, etc · 17eba6e6
      Russ Cox authored
      Trivial merging of 5g, 6g, ... into go tool compile,
      and similarlly 5l, 6l, ... into go tool link.
      The files compile/main.go and link/main.go are new.
      Everything else in those directories is a move followed by
      change of imports and package name.
      
      This CL breaks the build. Manual fixups are in the next CL.
      
      See golang-dev thread titled "go tool compile, etc" for background.
      
      Change-Id: Id35ff5a5859ad9037c61275d637b1bd51df6828b
      Reviewed-on: https://go-review.googlesource.com/10287Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      17eba6e6
    • Russ Cox's avatar
      cmd/link: move to cmd/newlink · 2a141ded
      Russ Cox authored
      In preparation for making the current linker cmd/link.
      If cmd/newlink is ever completed, it can be moved back.
      
      See golang-dev thread titled "go tool compile, etc" for background.
      
      Change-Id: I4029580f470038240c5181a37ea4202ba971f9ef
      Reviewed-on: https://go-review.googlesource.com/10286Reviewed-by: 's avatarRob Pike <r@golang.org>
      2a141ded
    • Ryan Brown's avatar
      cmd/internal/ld: output dwarf in external link mode on darwin · be59731d
      Ryan Brown authored
      Fixes #8973
      
      Change-Id: I746fae430db6d8f9ebd33586b8cffcb31d688cc8
      Reviewed-on: https://go-review.googlesource.com/10284
      Run-TryBot: Minux Ma <minux@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      be59731d
    • Rick Hudson's avatar
      runtime: turn work buffer tracing off by default · 5b66e5d0
      Rick Hudson authored
      During development we ran with monitoring code turned
      on by default. This CL turns the work buffer monitoring
      off. Performance change on most go1 benchmarks is small
      or insignificant.
      
      name                   old mean              new mean              delta
      BinaryTree17            3.35s × (0.99,1.01)   3.35s × (0.99,1.01)    ~    (p=0.841 n=5+5)
      Fannkuch11              2.59s × (1.00,1.01)   2.55s × (1.00,1.00)  -1.65% (p=0.008 n=5+5)
      FmtFprintfEmpty        52.5ns × (0.99,1.02)  53.2ns × (0.98,1.01)    ~    (p=0.063 n=5+5)
      FmtFprintfString        181ns × (1.00,1.00)   180ns × (1.00,1.00)  -0.55% (p=0.029 n=4+4)
      FmtFprintfInt           176ns × (1.00,1.01)   174ns × (1.00,1.00)  -0.91% (p=0.000 n=5+4)
      FmtFprintfIntInt        298ns × (1.00,1.00)   299ns × (1.00,1.00)    ~    (p=0.143 n=4+4)
      FmtFprintfPrefixedInt   250ns × (1.00,1.01)   246ns × (1.00,1.00)  -1.68% (p=0.000 n=5+4)
      FmtFprintfFloat         340ns × (1.00,1.00)   340ns × (1.00,1.01)    ~    (p=0.643 n=5+5)
      FmtManyArgs            1.16µs × (1.00,1.00)  1.15µs × (1.00,1.00)  -0.47% (p=0.016 n=5+5)
      GobDecode              9.22ms × (1.00,1.00)  9.23ms × (1.00,1.00)    ~    (p=0.841 n=5+5)
      GobEncode              7.00ms × (1.00,1.01)  7.09ms × (0.99,1.01)  +1.26% (p=0.016 n=5+5)
      Gzip                    387ms × (1.00,1.00)   389ms × (0.99,1.02)    ~    (p=1.000 n=5+5)
      Gunzip                 97.8ms × (1.00,1.00)  98.3ms × (1.00,1.00)  +0.51% (p=0.016 n=5+4)
      HTTPClientServer       52.6µs × (1.00,1.01)  52.7µs × (1.00,1.01)    ~    (p=1.000 n=5+5)
      JSONEncode             18.0ms × (0.99,1.02)  17.9ms × (1.00,1.00)    ~    (p=0.310 n=5+5)
      JSONDecode             64.8ms × (0.99,1.02)  63.6ms × (1.00,1.00)  -1.94% (p=0.008 n=5+5)
      Mandelbrot200          4.05ms × (1.00,1.00)  4.05ms × (1.00,1.00)    ~    (p=0.421 n=5+5)
      GoParse                3.86ms × (1.00,1.01)  3.84ms × (0.99,1.01)    ~    (p=0.421 n=5+5)
      RegexpMatchEasy0_32     101ns × (1.00,1.00)   102ns × (0.99,1.02)    ~    (p=0.238 n=4+5)
      RegexpMatchEasy0_1K     346ns × (1.00,1.01)   345ns × (1.00,1.00)    ~    (p=0.333 n=5+4)
      RegexpMatchEasy1_32    87.3ns × (0.99,1.02)  87.4ns × (1.00,1.00)    ~    (p=0.190 n=5+4)
      RegexpMatchEasy1_1K     520ns × (1.00,1.00)   520ns × (1.00,1.01)    ~    (p=1.000 n=4+5)
      RegexpMatchMedium_32    143ns × (1.00,1.00)   142ns × (1.00,1.00)  -0.70% (p=0.029 n=4+4)
      RegexpMatchMedium_1K   43.2µs × (1.00,1.01)  43.2µs × (1.00,1.00)    ~    (p=0.841 n=5+5)
      RegexpMatchHard_32     2.24µs × (1.00,1.01)  2.23µs × (1.00,1.01)  -0.63% (p=0.048 n=5+5)
      RegexpMatchHard_1K     68.7µs × (1.00,1.00)  68.3µs × (1.00,1.00)  -0.56% (p=0.008 n=5+5)
      Revcomp                 577ms × (1.00,1.01)   579ms × (1.00,1.00)    ~    (p=0.151 n=5+5)
      Template               74.9ms × (1.00,1.00)  76.5ms × (1.00,1.00)  +2.11% (p=0.008 n=5+5)
      TimeParse               359ns × (1.00,1.00)   362ns × (1.00,1.00)  +0.72% (p=0.008 n=5+5)
      TimeFormat              369ns × (1.00,1.00)   371ns × (1.00,1.01)    ~    (p=0.071 n=5+5)
      
      Change-Id: I4206a3f77a3d1450966b7a62ea7597aec44cb72f
      Reviewed-on: https://go-review.googlesource.com/10294Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      5b66e5d0
    • Austin Clements's avatar
      runtime: make runtime.callers walk calling G, not g0 · 719efc70
      Austin Clements authored
      Currently runtime.callers invokes gentraceback with the pc and sp of
      the G it is called from, but always passes g0 even if it was called
      from a regular g. Right now this has no ill effects because
      runtime.callers does not use either callback argument or the
      _TraceJumpStack flag, but it makes the code fragile and will break
      some upcoming changes.
      
      Fix this by lifting the getg() call outside of the systemstack in
      runtime.callers.
      
      Change-Id: I4e1e927961c0e0cd4dcf28693be47df7bae9e122
      Reviewed-on: https://go-review.googlesource.com/10292Reviewed-by: 's avatarDaniel Morsing <daniel.morsing@gmail.com>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      719efc70
  3. 20 May, 2015 8 commits
  4. 19 May, 2015 16 commits
  5. 18 May, 2015 1 commit