@@ -851,6 +851,15 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
851851 }
852852 assert (is_aligned (stack_size, os::vm_page_size ()), " stack_size not aligned" );
853853
854+ // Add an additional page to the stack size to reduce its chances of getting large page aligned
855+ // so that the stack does not get backed by a transparent huge page.
856+ size_t default_large_page_size = os::Linux::default_large_page_size ();
857+ if (default_large_page_size != 0 &&
858+ stack_size >= default_large_page_size &&
859+ is_aligned (stack_size, default_large_page_size)) {
860+ stack_size += os::vm_page_size ();
861+ }
862+
854863 int status = pthread_attr_setstacksize (&attr, stack_size);
855864 if (status != 0 ) {
856865 // pthread_attr_setstacksize() function can fail
@@ -3801,8 +3810,11 @@ bool os::Linux::setup_large_page_type(size_t page_size) {
38013810}
38023811
38033812void os::large_page_init () {
3804- // 1) Handle the case where we do not want to use huge pages and hence
3805- // there is no need to scan the OS for related info
3813+ // Always initialize the default large page size even if large pages are not being used.
3814+ size_t default_large_page_size = scan_default_large_page_size ();
3815+ os::Linux::_default_large_page_size = default_large_page_size;
3816+
3817+ // 1) Handle the case where we do not want to use huge pages
38063818 if (!UseLargePages &&
38073819 !UseTransparentHugePages &&
38083820 !UseHugeTLBFS &&
@@ -3820,9 +3832,7 @@ void os::large_page_init() {
38203832 return ;
38213833 }
38223834
3823- // 2) Scan OS info
3824- size_t default_large_page_size = scan_default_large_page_size ();
3825- os::Linux::_default_large_page_size = default_large_page_size;
3835+ // 2) check if large pages are configured
38263836 if (default_large_page_size == 0 ) {
38273837 // No large pages configured, return.
38283838 warn_no_large_pages_configured ();
0 commit comments