- 31 Jan, 2014 1 commit
-
-
Shawn Smith authored
LGTM=rsc, dave R=golang-codereviews, dave, josharian, rsc CC=golang-codereviews https://golang.org/cl/46490043
-
- 30 Jan, 2014 8 commits
-
-
Rémy Oudompheng authored
Array values are comparable if values of the array element type are comparable. Fixes #6526. LGTM=khr R=rsc, bradfitz, khr CC=golang-codereviews https://golang.org/cl/58580043
-
Ian Lance Taylor authored
In external link mode the linker explicitly adds the string constant "runtime/cgo". It adds the string constant using the same symbol name as the compiler, but a different format. The compiler assumes that the string data immediately follows the string header, but the linker puts the two in different sections. The result is bad string data when the compiler sees "runtime/cgo" used as a string constant. The compiler assumption is in datastring in [568]g/gobj.c. The linker layout is in addstrdata in ld/data.c. The compiler assumption is valid for string literals. The linker is not creating a string literal, so its assumption is also valid. There are a few ways to avoid this problem. This patch fixes it by only doing the fake import of runtime/cgo if necessary, and by only creating the string symbol if necessary. Fixes #7234. LGTM=dvyukov R=golang-codereviews, dvyukov, bradfitz CC=golang-codereviews https://golang.org/cl/58410043
-
David du Colombier authored
Update #7237 LGTM=bradfitz R=jas, bradfitz CC=golang-codereviews https://golang.org/cl/57190045
-
Dmitriy Vyukov authored
Tcmalloc uses 8K, 32K and 64K pages, and in custom setups 256K pages. Only Chromium uses 4K pages today (in "slow but small" configuration). The general tendency is to increase page size, because it reduces metadata size and DTLB pressure. This change reduces GC pause by ~10% and slightly improves other metrics. json-1 allocated 8037492 8038689 +0.01% allocs 105762 105573 -0.18% cputime 158400000 155800000 -1.64% gc-pause-one 4412234 4135702 -6.27% gc-pause-total 2647340 2398707 -9.39% rss 54923264 54525952 -0.72% sys-gc 3952624 3928048 -0.62% sys-heap 46399488 46006272 -0.85% sys-other 5597504 5290304 -5.49% sys-stack 393216 393216 +0.00% sys-total 56342832 55617840 -1.29% time 158478890 156046916 -1.53% virtual-mem 256548864 256593920 +0.02% garbage-1 allocated 2991113 2986259 -0.16% allocs 62844 62652 -0.31% cputime 16330000 15860000 -2.88% gc-pause-one 789108229 725555211 -8.05% gc-pause-total 3945541 3627776 -8.05% rss 1143660544 1132253184 -1.00% sys-gc 65609600 65806208 +0.30% sys-heap 1032388608 1035599872 +0.31% sys-other 37501632 22777664 -39.26% sys-stack 8650752 8781824 +1.52% sys-total 1144150592 1132965568 -0.98% time 16364602 15891994 -2.89% virtual-mem 1327296512 1313746944 -1.02% This is the exact reincarnation of already LGTMed: https://golang.org/cl/45770044 which must not break darwin/freebsd after: https://golang.org/cl/56630043 TBR=iant LGTM=khr, iant R=iant, khr CC=golang-codereviews https://golang.org/cl/58230043
-
Brad Fitzpatrick authored
The Transport's idle connection cache is keyed by a string, for pre-Go 1.0 reasons. Ever since Go has been able to use structs as map keys, there's been a TODO in the code to use structs instead of allocating strings. This change does that. Saves 3 allocatins and ~100 bytes of garbage per client request. But because string hashing is so fast these days (thanks, Keith), the performance is a wash: what we gain on GC and not allocating, we lose in slower hashing. (hashing structs of strings is slower than 1 string) This seems a bit faster usually, but I've also seen it be a bit slower. But at least it's how I've wanted it now, and it the allocation improvements are consistent. LGTM=adg R=adg CC=golang-codereviews https://golang.org/cl/58260043
-
Rémy Oudompheng authored
Fixes #6323. LGTM=r R=r CC=golang-codereviews https://golang.org/cl/56870043
-
Jeff Sickel authored
LGTM=mischief, mikioh.mikioh R=golang-codereviews, 0intro, mischief, mikioh.mikioh CC=golang-codereviews https://golang.org/cl/53960044
-
Rob Pike authored
The code is copied from cmd/6g. Empirically, all branch targets are nil in this code so something is still wrong, but at least this stops 8g -S from crashing. Update #7178 LGTM=dave, iant R=iant, dave CC=golang-codereviews https://golang.org/cl/58400043
-
- 29 Jan, 2014 5 commits
-
-
Dmitriy Vyukov authored
Ensure than heap is PageSize aligned. LGTM=iant R=iant, dave, gobot CC=golang-codereviews https://golang.org/cl/56630043
-
Brad Fitzpatrick authored
This is the chunked half of https://golang.org/cl/49570044 . We want full reads to return EOF as early as possible, when we know we're at the end, so http.Transport client connections are eagerly re-used in the common case, even if no Read or Close follows. To do this, make the chunkedReader.Read fill up its argument p []byte buffer as much as possible, as long as that doesn't involve doing any more blocking reads to read chunk headers. That means if we have a chunk EOF ("0\r\n") sitting in the incoming bufio.Reader, we see it and set EOF on our final Read. LGTM=adg R=adg CC=golang-codereviews https://golang.org/cl/58240043
-
Brad Fitzpatrick authored
Set EOF on the final Read of a body with a Content-Length, which will cause clients to recycle their connection immediately upon the final Read, rather than waiting for another Read or Close (neither of which might come). This happens often when client code is simply something like: err := json.NewDecoder(resp.Body).Decode(&dest) ... Then there's usually no subsequent Read. Even if the client calls Close (which they should): in Go 1.1, the body was slurped to EOF, but in Go 1.2, that was then treated as a Close-before-EOF and the underlying connection was closed. But that's assuming the user even calls Close. Many don't. Reading to EOF also causes a connection be reused. Now the EOF arrives earlier. This CL only addresses the Content-Length case. A future CL will address the chunked case. LGTM=adg R=adg CC=golang-codereviews https://golang.org/cl/49570044
-
David du Colombier authored
LGTM=bradfitz R=jas, mikioh.mikioh, bradfitz CC=golang-codereviews https://golang.org/cl/51200045
-
Mikio Hara authored
Fixes #7183. LGTM=iant R=golang-codereviews, gobot, iant CC=golang-codereviews https://golang.org/cl/57520043
-
- 28 Jan, 2014 10 commits
-
-
Adam Langley authored
This change also addresses some places where the comments were lacking. Fixes #7087. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/56700043
-
Dmitriy Vyukov authored
LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/57390043
-
Dmitriy Vyukov authored
json-1 cputime 99600000 98600000 -1.00% time 100005493 98859693 -1.15% garbage-1 cputime 15760000 15440000 -2.03% time 15791759 15471701 -2.03% LGTM=khr R=golang-codereviews, gobot, khr, dave CC=bradfitz, golang-codereviews, iant https://golang.org/cl/57310043
-
Dmitriy Vyukov authored
On 32-bits one can arrange make(chan) params so that the chan buffer gives you access to whole memory. LGTM=r R=golang-codereviews, r CC=bradfitz, golang-codereviews, iant, khr https://golang.org/cl/50250045
-
Dmitriy Vyukov authored
Tiny alloc memory block is shared by different goroutines running on the same thread. We call racemalloc after enabling preemption in mallocgc, as the result another goroutine can act on not yet race-cleared tiny block. Call racemalloc before enabling preemption. Fixes #7224. LGTM=dave R=golang-codereviews, dave CC=golang-codereviews https://golang.org/cl/57730043
-
Mikio Hara authored
Fixes #6803. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/57560043
-
Andrew Gerrand authored
Fixes #7216. LGTM=minux.ma R=golang-codereviews, minux.ma CC=golang-codereviews https://golang.org/cl/54740044
-
Michael Hudson-Doyle authored
Under some circumstances linking a test binary with gccgo can fail, because the installed version of the library ends up before the version built for the test on the linker command line. This admittedly slightly hackish fix fixes this by putting the library archives on the linker command line in the order that a pre-order depth first traversal of the dependencies gives them, which has the side effect of always putting the version of the library built for the test first. Fixes #6768 LGTM=rsc R=golang-codereviews, minux.ma, gobot, rsc, dave CC=golang-codereviews https://golang.org/cl/28050043
-
David du Colombier authored
LGTM=bradfitz R=jas, bradfitz CC=golang-codereviews https://golang.org/cl/52940044
-
Keith Randall authored
update #7205 LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/50730044
-
- 27 Jan, 2014 11 commits
-
-
Fredrik Enestad authored
Fixes #5967. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/57370043
-
Brad Fitzpatrick authored
Generated by addca. TBR=gobot R=gobot CC=golang-codereviews https://golang.org/cl/57420043
-
Vincent Vanackere authored
Although debug.Stack is deprecated, it should still return the correct result. Output before this CL (using a trivial library in $GOPATH/test.com/a): /home/vince/src/test.com/a/lib.go:9 (0x42311e) com/a.ShowStack: os.Stdout.Write(debug.Stack()) Output with this CL applied: /home/vince/src/test.com/a/lib.go:9 (0x42311e) ShowStack: os.Stdout.Write(debug.Stack()) LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/57330043
-
Dmitriy Vyukov authored
Currently windows crashes because early allocs in schedinit try to allocate tiny memory blocks, but m->p is not yet setup. I've considered calling procresize(1) earlier in schedinit, but this refactoring is better and must fix the issue as well. Fixes #7218. R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/54570045
-
Dmitriy Vyukov authored
When GOMAXPROCS>1 the last P in syscall is never retaken (because there are already idle P's -- npidle>0). This prevents sysmon thread from sleeping. On a darwin machine the program from issue 6673 constantly consumes ~0.2% CPU. With this change it stably consumes 0.0% CPU. Fixes #6673. R=golang-codereviews, r CC=bradfitz, golang-codereviews, iant, khr https://golang.org/cl/56990045
-
Keith Randall authored
LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/54660046
-
Brad Fitzpatrick authored
Use the smaller read-only bytes.NewReader/strings.NewReader instead of a bytes.Buffer when possible. LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/54660045
-
Ian Lance Taylor authored
In DWARF 4 the debug info for large types is put into .debug_type sections, so that the linker can discard duplicate info. This change adds support for reading type units. Another small change included here is that DWARF 3 supports storing the byte offset of a struct field as a formData rather than a formDwarfBlock. R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/56300043
-
Dmitriy Vyukov authored
On 32-bits n*sizeof(r[0]) can overflow. Or it can become 1<<32-eps, and mallocgc will "successfully" allocate 0 pages for it, there are no checks downstream and MHeap_Grow just does: npage = (npage+15)&~15; ask = npage<<PageShift; LGTM=khr R=golang-codereviews, khr CC=golang-codereviews https://golang.org/cl/54760045
-
Dmitriy Vyukov authored
When growing slice take into account size of the allocated memory block. Also apply the same optimization to string->[]byte conversion. Fixes #6307. benchmark old ns/op new ns/op delta BenchmarkAppendGrowByte 4541036 4434108 -2.35% BenchmarkAppendGrowString 59885673 44813604 -25.17% LGTM=khr R=khr CC=golang-codereviews, iant, rsc https://golang.org/cl/53340044
-
David du Colombier authored
LGTM=dvyukov R=dvyukov CC=golang-codereviews https://golang.org/cl/53000043
-
- 25 Jan, 2014 2 commits
-
-
Jeff Sickel authored
LGTM=r R=golang-codereviews, 0intro, r CC=golang-codereviews https://golang.org/cl/55430043
-
Dmitriy Vyukov authored
Fixes #7203. R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/53020044
-
- 24 Jan, 2014 3 commits
-
-
Dmitriy Vyukov authored
Combine NoScan allocations < 16 bytes into a single memory block. Reduces number of allocations on json/garbage benchmarks by 10+%. json-1 allocated 8039872 7949194 -1.13% allocs 105774 93776 -11.34% cputime 156200000 100700000 -35.53% gc-pause-one 4908873 3814853 -22.29% gc-pause-total 2748969 2899288 +5.47% rss 52674560 43560960 -17.30% sys-gc 3796976 3256304 -14.24% sys-heap 43843584 35192832 -19.73% sys-other 5589312 5310784 -4.98% sys-stack 393216 393216 +0.00% sys-total 53623088 44153136 -17.66% time 156193436 100886714 -35.41% virtual-mem 256548864 256540672 -0.00% garbage-1 allocated 2996885 2932982 -2.13% allocs 62904 55200 -12.25% cputime 17470000 17400000 -0.40% gc-pause-one 932757485 925806143 -0.75% gc-pause-total 4663787 4629030 -0.75% rss 1151074304 1133670400 -1.51% sys-gc 66068352 65085312 -1.49% sys-heap 1039728640 1024065536 -1.51% sys-other 38038208 37485248 -1.45% sys-stack 8650752 8781824 +1.52% sys-total 1152485952 1135417920 -1.48% time 17478088 17418005 -0.34% virtual-mem 1343709184 1324204032 -1.45% LGTM=iant, bradfitz R=golang-codereviews, dave, iant, rsc, bradfitz CC=golang-codereviews, khr https://golang.org/cl/38750047
-
Dmitriy Vyukov authored
Introduce fixed-size P-local caches. When local caches overflow/underflow a batch of items is transferred to/from global mutex-protected cache. benchmark old ns/op new ns/op delta BenchmarkPool 50554 22423 -55.65% BenchmarkPool-4 400359 5904 -98.53% BenchmarkPool-16 403311 1598 -99.60% BenchmarkPool-32 367310 1526 -99.58% BenchmarkPoolOverlflow 5214 3633 -30.32% BenchmarkPoolOverlflow-4 42663 9539 -77.64% BenchmarkPoolOverlflow-8 46919 11385 -75.73% BenchmarkPoolOverlflow-16 39454 13048 -66.93% BenchmarkSprintfEmpty 84 63 -25.68% BenchmarkSprintfEmpty-2 371 32 -91.13% BenchmarkSprintfEmpty-4 465 22 -95.25% BenchmarkSprintfEmpty-8 565 12 -97.77% BenchmarkSprintfEmpty-16 498 5 -98.87% BenchmarkSprintfEmpty-32 492 4 -99.04% BenchmarkSprintfString 259 229 -11.58% BenchmarkSprintfString-2 574 144 -74.91% BenchmarkSprintfString-4 651 77 -88.05% BenchmarkSprintfString-8 868 47 -94.48% BenchmarkSprintfString-16 825 33 -95.96% BenchmarkSprintfString-32 825 30 -96.28% BenchmarkSprintfInt 213 188 -11.74% BenchmarkSprintfInt-2 448 138 -69.20% BenchmarkSprintfInt-4 624 52 -91.63% BenchmarkSprintfInt-8 691 31 -95.43% BenchmarkSprintfInt-16 724 18 -97.46% BenchmarkSprintfInt-32 718 16 -97.70% BenchmarkSprintfIntInt 311 282 -9.32% BenchmarkSprintfIntInt-2 333 145 -56.46% BenchmarkSprintfIntInt-4 642 110 -82.87% BenchmarkSprintfIntInt-8 832 42 -94.90% BenchmarkSprintfIntInt-16 817 24 -97.00% BenchmarkSprintfIntInt-32 805 22 -97.17% BenchmarkSprintfPrefixedInt 309 269 -12.94% BenchmarkSprintfPrefixedInt-2 245 168 -31.43% BenchmarkSprintfPrefixedInt-4 598 99 -83.36% BenchmarkSprintfPrefixedInt-8 770 67 -91.23% BenchmarkSprintfPrefixedInt-16 829 54 -93.49% BenchmarkSprintfPrefixedInt-32 824 50 -93.83% BenchmarkSprintfFloat 418 398 -4.78% BenchmarkSprintfFloat-2 295 203 -31.19% BenchmarkSprintfFloat-4 585 128 -78.12% BenchmarkSprintfFloat-8 873 60 -93.13% BenchmarkSprintfFloat-16 884 33 -96.24% BenchmarkSprintfFloat-32 881 29 -96.62% BenchmarkManyArgs 1097 1069 -2.55% BenchmarkManyArgs-2 705 567 -19.57% BenchmarkManyArgs-4 792 319 -59.72% BenchmarkManyArgs-8 963 172 -82.14% BenchmarkManyArgs-16 1115 103 -90.76% BenchmarkManyArgs-32 1133 90 -92.03% LGTM=rsc R=golang-codereviews, bradfitz, minux.ma, gobot, rsc CC=golang-codereviews https://golang.org/cl/46010043
-
Dmitriy Vyukov authored
On top of "tiny allocator" (cl/38750047), reduces number of allocs by 1% on json. No code must rely on zero termination. So will also make debugging simpler, by uncovering issues earlier. json-1 allocated 7949686 7915766 -0.43% allocs 93778 92790 -1.05% time 100957795 97250949 -3.67% rest of the metrics are too noisy. LGTM=r R=golang-codereviews, r, bradfitz, iant CC=golang-codereviews https://golang.org/cl/40370061
-