aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/internal/sys
AgeCommit message (Collapse)Author
2016-11-07cmd/internal/sys, runtime/internal/sys: gofmtMichael Munday
Change-Id: Ice8f3b42194852f7ee8f00f004e80014d1ea119b Reviewed-on: https://go-review.googlesource.com/32875 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-11-03runtime/internal/sys: add arch defs for GOARCH=mips{,le}Vladimir Stefanovic
Change-Id: I6288f1fca1ae4c64b3907af700811ee842053020 Reviewed-on: https://go-review.googlesource.com/31472 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2016-09-06runtime: don't hard-code physical page sizeAustin Clements
Now that the runtime fetches the true physical page size from the OS, make the physical page size used by heap growth a variable instead of a constant. This isn't used in any performance-critical paths, so it shouldn't be an issue. sys.PhysPageSize is also renamed to sys.DefaultPhysPageSize to make it clear that it's not necessarily the true page size. There are no uses of this constant any more, but we'll keep it around for now. Updates #12480 and #10180. Change-Id: I6c23b9df860db309c38c8287a703c53817754f03 Reviewed-on: https://go-review.googlesource.com/25022 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
2016-09-06runtime: assume 64kB physical pages on ARMAustin Clements
Currently we assume the physical page size on ARM is 4kB. While this is usually true, the architecture also supports 16kB and 64kB physical pages, and Linux (and possibly other OSes) can be configured to use these larger page sizes. With Go 1.6, such a configuration could potentially run, but generally resulted in memory corruption or random panics. With current master, this configuration will cause the runtime to panic during init on Linux when it checks the true physical page size (and will still cause corruption or panics on other OSes). However, the assumed physical page size only has to be a multiple of the true physical page size, the scavenger can now deal with large physical page sizes, and the rest of the runtime can deal with a larger assumed physical page size than the true size. Hence, there's little disadvantage to conservatively setting the assumed physical page size to 64kB on ARM. This may result in some extra memory use, since we can only return memory at multiples of the assumed physical page size. However, it is a simple change that should make Go run on systems configured for larger page sizes. The following commits will make the runtime query the actual physical page size from the OS, but this is a simple step there. Updates #12480. Change-Id: I851829595bc9e0c76235c847a7b5f62ad82b5302 Reviewed-on: https://go-review.googlesource.com/25021 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
2016-08-29runtime: insufficient padding in the `p` structureCarlos Eduardo Seo
The current padding in the 'p' struct is hardcoded at 64 bytes. It should be the cache line size. On ppc64x, the current value is only okay because sys.CacheLineSize is wrong at 64 bytes. This change fixes that by making the padding equal to the cache line size. It also fixes the cache line size for ppc64/ppc64le to 128 bytes. Fixes #16477 Change-Id: Ib7ec5195685116eb11ba312a064f41920373d4a3 Reviewed-on: https://go-review.googlesource.com/25370 Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Minux Ma <minux@golang.org> Run-TryBot: Michael Munday <munday@ca.ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-08-23cmd/compile: clean up ctz opsKeith Randall
Now that we have ops that can return 2 results, have BSF return a result and flags. We can then get rid of the redundant comparison and use CMOV instead of CMOVconst ops. Get rid of a bunch of the ops we don't use. Ctz{8,16}, plus all the Clzs, and CMOVNEs. I don't think we'll ever use them, and they would be easy to add back if needed. Change-Id: I8858a1d017903474ea7e4002fc76a6a86e7bd487 Reviewed-on: https://go-review.googlesource.com/27630 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
2016-06-30runtime/internal/sys: implement Ctz and Bswap in assembly for 386Austin Clements
Ctz is a hot-spot in the Go 1.7 memory manager. In SSA it's implemented as an intrinsic that compiles to a few instructions, but on the old backend (all architectures other than amd64), it's implemented as a fairly complex Go function. As a result, switching to bitmap-based allocation was a significant hit to allocation-heavy workloads like BinaryTree17 on non-SSA platforms. For unknown reasons, this hit 386 particularly hard. We can regain a lot of the lost performance by implementing Ctz in assembly on the 386. This isn't as good as an intrinsic, since it still generates a function call and prevents useful inlining, but it's much better than the pure Go implementation: name old time/op new time/op delta BinaryTree17-12 3.59s ± 1% 3.06s ± 1% -14.74% (p=0.000 n=19+20) Fannkuch11-12 3.72s ± 1% 3.64s ± 1% -2.09% (p=0.000 n=17+19) FmtFprintfEmpty-12 52.3ns ± 3% 52.3ns ± 3% ~ (p=0.829 n=20+19) FmtFprintfString-12 156ns ± 1% 148ns ± 3% -5.20% (p=0.000 n=18+19) FmtFprintfInt-12 137ns ± 1% 136ns ± 1% -0.56% (p=0.000 n=19+13) FmtFprintfIntInt-12 227ns ± 2% 225ns ± 2% -0.93% (p=0.000 n=19+17) FmtFprintfPrefixedInt-12 210ns ± 1% 208ns ± 1% -0.91% (p=0.000 n=19+17) FmtFprintfFloat-12 375ns ± 1% 371ns ± 1% -1.06% (p=0.000 n=19+18) FmtManyArgs-12 995ns ± 2% 978ns ± 1% -1.63% (p=0.000 n=17+17) GobDecode-12 9.33ms ± 1% 9.19ms ± 0% -1.59% (p=0.000 n=20+17) GobEncode-12 7.73ms ± 1% 7.73ms ± 1% ~ (p=0.771 n=19+20) Gzip-12 375ms ± 1% 374ms ± 1% ~ (p=0.141 n=20+18) Gunzip-12 61.8ms ± 1% 61.8ms ± 1% ~ (p=0.602 n=20+20) HTTPClientServer-12 87.7µs ± 2% 86.9µs ± 3% -0.87% (p=0.024 n=19+20) JSONEncode-12 20.2ms ± 1% 20.4ms ± 0% +0.53% (p=0.000 n=18+19) JSONDecode-12 65.3ms ± 0% 65.4ms ± 1% ~ (p=0.385 n=16+19) Mandelbrot200-12 4.11ms ± 1% 4.12ms ± 0% +0.29% (p=0.020 n=19+19) GoParse-12 3.75ms ± 1% 3.61ms ± 2% -3.90% (p=0.000 n=20+20) RegexpMatchEasy0_32-12 104ns ± 0% 103ns ± 0% -0.96% (p=0.000 n=13+16) RegexpMatchEasy0_1K-12 805ns ± 1% 803ns ± 1% ~ (p=0.189 n=18+18) RegexpMatchEasy1_32-12 111ns ± 0% 111ns ± 3% ~ (p=1.000 n=14+19) RegexpMatchEasy1_1K-12 1.00µs ± 1% 1.00µs ± 1% +0.50% (p=0.003 n=19+19) RegexpMatchMedium_32-12 133ns ± 2% 133ns ± 2% ~ (p=0.218 n=20+20) RegexpMatchMedium_1K-12 41.2µs ± 1% 42.2µs ± 1% +2.52% (p=0.000 n=18+16) RegexpMatchHard_32-12 2.35µs ± 1% 2.38µs ± 1% +1.53% (p=0.000 n=18+18) RegexpMatchHard_1K-12 70.9µs ± 2% 72.0µs ± 1% +1.42% (p=0.000 n=19+17) Revcomp-12 1.06s ± 0% 1.05s ± 0% -1.36% (p=0.000 n=20+18) Template-12 86.2ms ± 1% 84.6ms ± 0% -1.89% (p=0.000 n=20+18) TimeParse-12 425ns ± 2% 428ns ± 1% +0.77% (p=0.000 n=18+19) TimeFormat-12 517ns ± 1% 519ns ± 1% +0.43% (p=0.001 n=20+19) [Geo mean] 74.3µs 73.5µs -1.05% Prior to this commit, BinaryTree17-12 on 386 was 33% slower than at the go1.6 tag. With this commit, it's 13% slower. On arm and arm64, BinaryTree17-12 is only ~5% slower than it was at go1.6. It may be worth implementing Ctz for them as well. I consider this change low risk, since the functions it replaces are simple, very well specified, and well tested. For #16117. Change-Id: Ic39d851d5aca91330134596effd2dab9689ba066 Reviewed-on: https://go-review.googlesource.com/24640 Reviewed-by: Rick Hudson <rlh@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-04-14runtime/internal/sys: better fallback algorithms for intrinsicsKeith Randall
Use deBruijn sequences to count low-order zeros. Reorg bswap to not use &^, it takes another instruction on x86. Change-Id: I4a5ed9fd16ee6a279d88c067e8a2ba11de821156 Reviewed-on: https://go-review.googlesource.com/22084 Reviewed-by: David Chase <drchase@google.com>
2016-04-11runtime: remove remaining references to TheCharJeremy Jackins
After mdempsky's recent changes, these are the only references to "TheChar" left in the Go tree. Without the context, and without knowing the history, this is confusing. Also rename sys.TheGoos and sys.TheGoarch to sys.GOOS and sys.GOARCH. Also change the heap dump format to include sys.GOARCH rather than TheChar, which is no longer a concept. Updates #15169 (changes heapdump format) Change-Id: I3e99eeeae00ed55d7d01e6ed503d958c6e931dca Reviewed-on: https://go-review.googlesource.com/21647 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-03-28cmd/compile: added some intrinsics to SSA back endDavid Chase
One intrinsic was needed to help get the very best performance out of a future GC; as long as that one was being added, I also added Bswap since that is sometimes a handy thing to have. I had intended to fill out the bit-scan intrinsic family, but the mismatch between the "scan forward" instruction and "count leading zeroes" was large enough to cause me to leave it out -- it poses a dilemma that I'd rather dodge right now. These intrinsics are not exposed for general use. That's a separate issue requiring an API proposal change ( https://github.com/golang/proposal ) All intrinsics are tested, both that they are substituted on the appropriate architecture, and that they produce the expected result. Change-Id: I5848037cfd97de4f75bdc33bdd89bba00af4a8ee Reviewed-on: https://go-review.googlesource.com/20564 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-21runtime/internal/sys: add s390x supportMichael Munday
Change-Id: I928532b406a3457d2c5f75f4de7d46a3f795192e Reviewed-on: https://go-review.googlesource.com/20939 Reviewed-by: Minux Ma <minux@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2016-03-01all: make copyright headers consistent with one space after periodBrad Fitzpatrick
This is a subset of https://golang.org/cl/20022 with only the copyright header lines, so the next CL will be smaller and more reviewable. Go policy has been single space after periods in comments for some time. The copyright header template at: https://golang.org/doc/contribute.html#copyright also uses a single space. Make them all consistent. Change-Id: Icc26c6b8495c3820da6b171ca96a74701b4a01b0 Reviewed-on: https://go-review.googlesource.com/20111 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-11-12cmd/internal/obj, cmd/link, runtime: use a larger stack frame on ppc64Michael Hudson-Doyle
The larger stack frames causes the nosplit stack to overflow so the next change increases the stackguard. Change-Id: Ib2b4f24f0649eb1d13e3a58d265f13d1b6cc9bf9 Reviewed-on: https://go-review.googlesource.com/15964 Reviewed-by: Russ Cox <rsc@golang.org>
2015-11-12runtime/internal/sys: remove IntptrMatthew Dempsky
Apparently its last use was removed in CL 8899. Change-Id: I4f3a789b3cc4c249582e81463af62b576a281e40 Reviewed-on: https://go-review.googlesource.com/16880 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-11-12runtime, runtime/internal/sys: fix build for linux/{mips64,mips64le}Shenghou Ma
Change-Id: I37bac9680efdfd797ca5dca90bd9a9e1001bfb68 Reviewed-on: https://go-review.googlesource.com/16874 Reviewed-by: Michael Matloob <matloob@golang.org>
2015-11-12runtime: move arch_mips64(le)?.go into runtime/internal/sysMichael Matloob
Somehow these were left out of the orignial CL. Updates #11647 Change-Id: I058a30eaa25fbb72d60e7fb6bc9ff0a3b54fdb2a Reviewed-on: https://go-review.googlesource.com/16870 Reviewed-by: Minux Ma <minux@golang.org>
2015-11-12runtime: break out system-specific constants into package sysMichael Matloob
runtime/internal/sys will hold system-, architecture- and config- specific constants. Updates #11647 Change-Id: I6db29c312556087a42e8d2bdd9af40d157c56b54 Reviewed-on: https://go-review.googlesource.com/16817 Reviewed-by: Russ Cox <rsc@golang.org>