Mercurial > hg > truffle
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 |