Mercurial > hg > graal-jvmci-8
comparison src/os/linux/vm/os_linux.cpp @ 20360:833b0f92429a
8046598: Scalable Native memory tracking development
Summary: Enhance scalability of native memory tracking
Reviewed-by: coleenp, ctornqvi, gtriantafill
author | zgu |
---|---|
date | Wed, 27 Aug 2014 08:19:12 -0400 |
parents | d22136881b85 |
children | 6e0cb14ce59b |
comparison
equal
deleted
inserted
replaced
20359:4d3a43351904 | 20360:833b0f92429a |
---|---|
3499 return NULL; | 3499 return NULL; |
3500 } | 3500 } |
3501 | 3501 |
3502 assert(is_ptr_aligned(start, alignment), "Must be"); | 3502 assert(is_ptr_aligned(start, alignment), "Must be"); |
3503 | 3503 |
3504 // os::reserve_memory_special will record this memory area. | 3504 if (MemTracker::tracking_level() > NMT_minimal) { |
3505 // Need to release it here to prevent overlapping reservations. | 3505 // os::reserve_memory_special will record this memory area. |
3506 MemTracker::record_virtual_memory_release((address)start, bytes); | 3506 // Need to release it here to prevent overlapping reservations. |
3507 Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
3508 tkr.record((address)start, bytes); | |
3509 } | |
3507 | 3510 |
3508 char* end = start + bytes; | 3511 char* end = start + bytes; |
3509 | 3512 |
3510 // Find the regions of the allocated chunk that can be promoted to large pages. | 3513 // Find the regions of the allocated chunk that can be promoted to large pages. |
3511 char* lp_start = (char*)align_ptr_up(start, large_page_size); | 3514 char* lp_start = (char*)align_ptr_up(start, large_page_size); |
3596 if (UseNUMAInterleaving) { | 3599 if (UseNUMAInterleaving) { |
3597 numa_make_global(addr, bytes); | 3600 numa_make_global(addr, bytes); |
3598 } | 3601 } |
3599 | 3602 |
3600 // The memory is committed | 3603 // The memory is committed |
3601 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC); | 3604 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); |
3602 } | 3605 } |
3603 | 3606 |
3604 return addr; | 3607 return addr; |
3605 } | 3608 } |
3606 | 3609 |
3612 bool os::Linux::release_memory_special_huge_tlbfs(char* base, size_t bytes) { | 3615 bool os::Linux::release_memory_special_huge_tlbfs(char* base, size_t bytes) { |
3613 return pd_release_memory(base, bytes); | 3616 return pd_release_memory(base, bytes); |
3614 } | 3617 } |
3615 | 3618 |
3616 bool os::release_memory_special(char* base, size_t bytes) { | 3619 bool os::release_memory_special(char* base, size_t bytes) { |
3620 bool res; | |
3621 if (MemTracker::tracking_level() > NMT_minimal) { | |
3622 Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
3623 res = os::Linux::release_memory_special_impl(base, bytes); | |
3624 if (res) { | |
3625 tkr.record((address)base, bytes); | |
3626 } | |
3627 | |
3628 } else { | |
3629 res = os::Linux::release_memory_special_impl(base, bytes); | |
3630 } | |
3631 return res; | |
3632 } | |
3633 | |
3634 bool os::Linux::release_memory_special_impl(char* base, size_t bytes) { | |
3617 assert(UseLargePages, "only for large pages"); | 3635 assert(UseLargePages, "only for large pages"); |
3618 | |
3619 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
3620 | |
3621 bool res; | 3636 bool res; |
3637 | |
3622 if (UseSHM) { | 3638 if (UseSHM) { |
3623 res = os::Linux::release_memory_special_shm(base, bytes); | 3639 res = os::Linux::release_memory_special_shm(base, bytes); |
3624 } else { | 3640 } else { |
3625 assert(UseHugeTLBFS, "must be"); | 3641 assert(UseHugeTLBFS, "must be"); |
3626 res = os::Linux::release_memory_special_huge_tlbfs(base, bytes); | 3642 res = os::Linux::release_memory_special_huge_tlbfs(base, bytes); |
3627 } | 3643 } |
3628 | |
3629 if (res) { | |
3630 tkr.record((address)base, bytes); | |
3631 } else { | |
3632 tkr.discard(); | |
3633 } | |
3634 | |
3635 return res; | 3644 return res; |
3636 } | 3645 } |
3637 | 3646 |
3638 size_t os::large_page_size() { | 3647 size_t os::large_page_size() { |
3639 return _large_page_size; | 3648 return _large_page_size; |