mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fetch physical page size from the OS
Currently the physical page size assumed by the runtime is hard-coded. On Linux the runtime at least fetches the OS page size during init and sanity checks against the hard-coded value, but they may still differ. On other OSes we wouldn't even notice. Add support on all OSes to fetch the actual OS physical page size during runtime init and lift the sanity check of PhysPageSize from the Linux init code to general malloc init. Currently this is the only use of the retrieved page size, but we'll add more shortly. Updates #12480 and #10180. Change-Id: I065f2834bc97c71d3208edc17fd990ec9058b6da Reviewed-on: https://go-review.googlesource.com/25050 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
parent
d7de8b6d23
commit
276a52de55
14 changed files with 205 additions and 22 deletions
|
|
@ -79,8 +79,9 @@ var sigset_all = sigset{[4]uint32{^uint32(0), ^uint32(0), ^uint32(0), ^uint32(0)
|
|||
|
||||
// From NetBSD's <sys/sysctl.h>
|
||||
const (
|
||||
_CTL_HW = 6
|
||||
_HW_NCPU = 3
|
||||
_CTL_HW = 6
|
||||
_HW_NCPU = 3
|
||||
_HW_PAGESIZE = 7
|
||||
)
|
||||
|
||||
func getncpu() int32 {
|
||||
|
|
@ -94,6 +95,17 @@ func getncpu() int32 {
|
|||
return 1
|
||||
}
|
||||
|
||||
func getPageSize() uintptr {
|
||||
mib := [2]uint32{_CTL_HW, _HW_PAGESIZE}
|
||||
out := uint32(0)
|
||||
nout := unsafe.Sizeof(out)
|
||||
ret := sysctl(&mib[0], 2, (*byte)(unsafe.Pointer(&out)), &nout, nil, 0)
|
||||
if ret >= 0 {
|
||||
return uintptr(out)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func semacreate(mp *m) {
|
||||
}
|
||||
|
|
@ -186,6 +198,7 @@ func netbsdMstart() {
|
|||
|
||||
func osinit() {
|
||||
ncpu = getncpu()
|
||||
physPageSize = getPageSize()
|
||||
}
|
||||
|
||||
var urandom_dev = []byte("/dev/urandom\x00")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue