Mercurial > hg > graal-jvmci-8
comparison src/os/solaris/vm/os_solaris.cpp @ 3885:3cd0157e1d4d
7082969: NUMA interleaving
Summary: Support interleaving on NUMA systems for collectors that don't have NUMA-awareness.
Reviewed-by: iveresov, ysr
Contributed-by: Tom Deneau <tom.deneau@amd.com>
author | iveresov |
---|---|
date | Thu, 25 Aug 2011 02:57:46 -0700 |
parents | 24cee90e9453 |
children | 3607aac85aa9 |
comparison
equal
deleted
inserted
replaced
3871:2f27ed2a98fa | 3885:3cd0157e1d4d |
---|---|
2775 } | 2775 } |
2776 | 2776 |
2777 bool os::commit_memory(char* addr, size_t bytes, bool exec) { | 2777 bool os::commit_memory(char* addr, size_t bytes, bool exec) { |
2778 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; | 2778 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; |
2779 size_t size = bytes; | 2779 size_t size = bytes; |
2780 return | 2780 char *res = Solaris::mmap_chunk(addr, size, MAP_PRIVATE|MAP_FIXED, prot); |
2781 NULL != Solaris::mmap_chunk(addr, size, MAP_PRIVATE|MAP_FIXED, prot); | 2781 if (res != NULL) { |
2782 if (UseNUMAInterleaving) { | |
2783 numa_make_global(addr, bytes); | |
2784 } | |
2785 return true; | |
2786 } | |
2787 return false; | |
2782 } | 2788 } |
2783 | 2789 |
2784 bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, | 2790 bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, |
2785 bool exec) { | 2791 bool exec) { |
2786 if (commit_memory(addr, bytes, exec)) { | 2792 if (commit_memory(addr, bytes, exec)) { |
3387 return false; | 3393 return false; |
3388 } | 3394 } |
3389 return true; | 3395 return true; |
3390 } | 3396 } |
3391 | 3397 |
3392 char* os::reserve_memory_special(size_t bytes, char* addr, bool exec) { | 3398 char* os::reserve_memory_special(size_t size, char* addr, bool exec) { |
3393 // "exec" is passed in but not used. Creating the shared image for | 3399 // "exec" is passed in but not used. Creating the shared image for |
3394 // the code cache doesn't have an SHM_X executable permission to check. | 3400 // the code cache doesn't have an SHM_X executable permission to check. |
3395 assert(UseLargePages && UseISM, "only for ISM large pages"); | 3401 assert(UseLargePages && UseISM, "only for ISM large pages"); |
3396 | 3402 |
3397 size_t size = bytes; | |
3398 char* retAddr = NULL; | 3403 char* retAddr = NULL; |
3399 int shmid; | 3404 int shmid; |
3400 key_t ismKey; | 3405 key_t ismKey; |
3401 | 3406 |
3402 bool warn_on_failure = UseISM && | 3407 bool warn_on_failure = UseISM && |
3434 jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err); | 3439 jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err); |
3435 warning(msg); | 3440 warning(msg); |
3436 } | 3441 } |
3437 return NULL; | 3442 return NULL; |
3438 } | 3443 } |
3439 | 3444 if ((retAddr != NULL) && UseNUMAInterleaving) { |
3445 numa_make_global(retAddr, size); | |
3446 } | |
3440 return retAddr; | 3447 return retAddr; |
3441 } | 3448 } |
3442 | 3449 |
3443 bool os::release_memory_special(char* base, size_t bytes) { | 3450 bool os::release_memory_special(char* base, size_t bytes) { |
3444 // detaching the SHM segment will also delete it, see reserve_memory_special() | 3451 // detaching the SHM segment will also delete it, see reserve_memory_special() |