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()