@@ -927,6 +927,15 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
927927 }
928928 assert (is_aligned (stack_size, os::vm_page_size ()), " stack_size not aligned" );
929929
930+ // Add an additional page to the stack size to reduce its chances of getting large page aligned
931+ // so that the stack does not get backed by a transparent huge page.
932+ size_t default_large_page_size = os::Linux::default_large_page_size ();
933+ if (default_large_page_size != 0 &&
934+ stack_size >= default_large_page_size &&
935+ is_aligned (stack_size, default_large_page_size)) {
936+ stack_size += os::vm_page_size ();
937+ }
938+
930939 int status = pthread_attr_setstacksize (&attr, stack_size);
931940 if (status != 0 ) {
932941 // pthread_attr_setstacksize() function can fail
@@ -3745,8 +3754,11 @@ bool os::Linux::setup_large_page_type(size_t page_size) {
37453754}
37463755
37473756void os::large_page_init () {
3748- // 1) Handle the case where we do not want to use huge pages and hence
3749- // there is no need to scan the OS for related info
3757+ // Always initialize the default large page size even if large pages are not being used.
3758+ size_t default_large_page_size = scan_default_large_page_size ();
3759+ os::Linux::_default_large_page_size = default_large_page_size;
3760+
3761+ // 1) Handle the case where we do not want to use huge pages
37503762 if (!UseLargePages &&
37513763 !UseTransparentHugePages &&
37523764 !UseHugeTLBFS &&
@@ -3764,9 +3776,7 @@ void os::large_page_init() {
37643776 return ;
37653777 }
37663778
3767- // 2) Scan OS info
3768- size_t default_large_page_size = scan_default_large_page_size ();
3769- os::Linux::_default_large_page_size = default_large_page_size;
3779+ // 2) check if large pages are configured
37703780 if (default_large_page_size == 0 ) {
37713781 // No large pages configured, return.
37723782 warn_no_large_pages_configured ();
0 commit comments