• Austin Clements's avatar
    runtime: scavenge memory on physical page-aligned boundaries · 2cdcb6f8
    Austin Clements authored
    Currently the scavenger marks memory unused in multiples of the
    allocator page size (8K). This is safe as long as the true physical
    page size is 4K (or 8K), as it is on many platforms. However, on
    ARM64, PPC64x, and MIPS64, the physical page size is larger than 8K,
    so if we attempt to mark memory unused, the kernel will round the
    boundaries of the region *out* to all pages covered by the requested
    region, and we'll release a larger region of memory than intended. As
    a result, the scavenger is currently disabled on these platforms.
    
    Fix this by first rounding the region to be marked unused *in* to
    multiples of the physical page size, so that when we ask the kernel to
    mark it unused, it releases exactly the requested region.
    
    Fixes #9993.
    
    Change-Id: I96d5fdc2f77f9d69abadcea29bcfe55e68288cb1
    Reviewed-on: https://go-review.googlesource.com/22066Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    2cdcb6f8
mheap.go 32.7 KB