[PATCH] Darwin, option to monitor anonymous pages

David Holmes david.holmes at oracle.com
Sun Sep 1 22:30:52 UTC 2019


Hi David,

On 1/09/2019 6:19 am, David CARLIER wrote:
> Hi
> 
> Here a little patch proposal to be able to monitor anonymous pages
> with tools like mmap

This patch add a product flag which requires additional processes to be 
followed. Changes to product flags require a CSR request [1] to be filed 
and approved. Without an author/committer to actively work with you to 
get these patches through the process they will likely just languish on 
the mailing list.

David H.

[1] https://wiki.openjdk.java.net/display/csr/Main

> Kind regards.
> 
> # HG changeset patch
> # User David Carlier <devnexen at gmail.com>
> # Date 1567278245 -3600
> #      Sat Aug 31 20:04:05 2019 +0100
> # Node ID 7c566025b2e224b241704ec3a3f2fb8c70167c48
> # Parent  1262b3ddd7e4f010bf81f2564bf86e7e2c00467a
> Darwin, option to monitor anonymous pages
> 
> new flag AnonMapId, from 240 up to 255
> to follow up Apple recommendations and flexibility
> to avoid collisions with increasing code using it.
> 
> diff -r 1262b3ddd7e4 -r 7c566025b2e2 src/hotspot/os/bsd/globals_bsd.hpp
> --- a/src/hotspot/os/bsd/globals_bsd.hpp Sat Aug 31 09:18:40 2019 -0700
> +++ b/src/hotspot/os/bsd/globals_bsd.hpp Sat Aug 31 20:04:05 2019 +0100
> @@ -46,6 +46,7 @@
>     /*  overridden in Arguments::parse_each_vm_init_arg.            */
>            \
>     product(bool, UseBsdPosixThreadCPUClocks, true,
>            \
>             "enable fast Bsd Posix clocks where available")
>            \
> +  product(intx, AnonMapId, 240, "set anonymous page tag ID")
>            \
> 
>   //
>   // Defines Bsd-specific default values. The flags are available on all
> diff -r 1262b3ddd7e4 -r 7c566025b2e2 src/hotspot/os/bsd/os_bsd.cpp
> --- a/src/hotspot/os/bsd/os_bsd.cpp Sat Aug 31 09:18:40 2019 -0700
> +++ b/src/hotspot/os/bsd/os_bsd.cpp Sat Aug 31 20:04:05 2019 +0100
> @@ -104,6 +104,7 @@
> 
>   #ifdef __APPLE__
>     #include <mach-o/dyld.h>
> +  #include <mach/vm_statistics.h>
>   #endif
> 
>   #ifndef MAP_ANONYMOUS
> @@ -2066,18 +2067,26 @@
>   static char* anon_mmap(char* requested_addr, size_t bytes, bool fixed) {
>     char * addr;
>     int flags;
> +  int fd;
> 
>     flags = MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS;
> +  fd = -1;
>     if (fixed) {
>       assert((uintptr_t)requested_addr % os::Bsd::page_size() == 0,
> "unaligned address");
>       flags |= MAP_FIXED;
>     }
> +#ifdef __APPLE__
> +  // Apple guarantees free IDs from 240 up to 255
> +  // for userland applications.
> +  if (AnonMapId >= 240 && AnonMapId < 255)
> +    fd = VM_MAKE_TAG(AnonMapId);
> +#endif
> 
>     // Map reserved/uncommitted pages PROT_NONE so we fail early if we
>     // touch an uncommitted page. Otherwise, the read/write might
>     // succeed if we have enough swap space to back the physical page.
>     addr = (char*)::mmap(requested_addr, bytes, PROT_NONE,
> -                       flags, -1, 0);
> +                       flags, fd, 0);
> 
>     return addr == MAP_FAILED ? NULL : addr;
>   }
> 


More information about the hotspot-dev mailing list