comparison src/os/linux/vm/os_linux.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 7c2653aefc46
children 9447b2fb6fcf
comparison
equal deleted inserted replaced
3871:2f27ed2a98fa 3885:3cd0157e1d4d
2500 // problem. 2500 // problem.
2501 bool os::commit_memory(char* addr, size_t size, bool exec) { 2501 bool os::commit_memory(char* addr, size_t size, bool exec) {
2502 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; 2502 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
2503 uintptr_t res = (uintptr_t) ::mmap(addr, size, prot, 2503 uintptr_t res = (uintptr_t) ::mmap(addr, size, prot,
2504 MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); 2504 MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
2505 return res != (uintptr_t) MAP_FAILED; 2505 if (res != (uintptr_t) MAP_FAILED) {
2506 if (UseNUMAInterleaving) {
2507 numa_make_global(addr, size);
2508 }
2509 return true;
2510 }
2511 return false;
2506 } 2512 }
2507 2513
2508 // Define MAP_HUGETLB here so we can build HotSpot on old systems. 2514 // Define MAP_HUGETLB here so we can build HotSpot on old systems.
2509 #ifndef MAP_HUGETLB 2515 #ifndef MAP_HUGETLB
2510 #define MAP_HUGETLB 0x40000 2516 #define MAP_HUGETLB 0x40000
2521 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; 2527 int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
2522 uintptr_t res = 2528 uintptr_t res =
2523 (uintptr_t) ::mmap(addr, size, prot, 2529 (uintptr_t) ::mmap(addr, size, prot,
2524 MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB, 2530 MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB,
2525 -1, 0); 2531 -1, 0);
2526 return res != (uintptr_t) MAP_FAILED; 2532 if (res != (uintptr_t) MAP_FAILED) {
2533 if (UseNUMAInterleaving) {
2534 numa_make_global(addr, size);
2535 }
2536 return true;
2537 }
2538 return false;
2527 } 2539 }
2528 2540
2529 return commit_memory(addr, size, exec); 2541 return commit_memory(addr, size, exec);
2530 } 2542 }
2531 2543
3111 if (warn_on_failure) { 3123 if (warn_on_failure) {
3112 jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err); 3124 jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
3113 warning(msg); 3125 warning(msg);
3114 } 3126 }
3115 return NULL; 3127 return NULL;
3128 }
3129
3130 if ((addr != NULL) && UseNUMAInterleaving) {
3131 numa_make_global(addr, bytes);
3116 } 3132 }
3117 3133
3118 return addr; 3134 return addr;
3119 } 3135 }
3120 3136