• Austin Clements's avatar
    runtime: assume 64kB physical pages on ARM · d7de8b6d
    Austin Clements authored
    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: 's avatarMinux Ma <minux@golang.org>
    d7de8b6d
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...