jdk11u-dev icon indicating copy to clipboard operation
jdk11u-dev copied to clipboard

8303215: Make thread stacks not use huge pages

Open tkiriyama opened this issue 1 month ago • 11 comments
trafficstars

Hi All,

I would like to backport the fix for bug JDK-8303215 from JDK 17 to JDK 11. This bug addresses an issue with Transparent Huge Pages (THP) and thread stack allocation. Backport is unclean,

1. Backport: The fix in os_linux.cpp cannot be cleanly backported. Since jdk11 does not include JDK-8244752 and JDK-8256155, it differs from the fix in jdk17. It uses setup_large_page_size() instead of scan_default_large_page_size().

2. Bug Reproduction: The bug was successfully reproduced in Linux x86_64 with THP enabled (/sys/kernel/mm/transparent_hugepage/enabled = always). Reproduction was confirmed using the following dummy thread program:

public class ThreadStackHugePageTest {
        public static void main(String[] args) {
                final int NUM_THREADS = 1000;
                final long SLEEP_SECONDS = 3600;
                final long SLEEP_MILISECONDS = SLEEP_SECONDS * 1000;

                List<Thread> threads = new ArrayList<>();

                for (int i = 0; i < NUM_THREADS; i++) {
                        Runnable task = () -> {
                                try {
                                        Thread.sleep(SLEEP_MILISECONDS);
                                } catch (InterruptedException e) {
                                        Thread.currentThread().interrupt();
                                }
                        };

                        Thread thread = new Thread(task);
                        threads.add(thread);

                        thread.start();
                }

                System.out.println("all threads are started");

                for (Thread thread : threads) {
                        try {
                                thread.join();
                        } catch (InterruptedException e) {
                                Thread.currentThread().interrupt();
                        }
                }
        }
}

The fix significantly reduces the number of anonymous regions with fully occupied RSS.

3. Regression Testing: I ran the test/hotspot tests on Linux x64 as a regression test. No failures were found.

Thank you.


Progress

  • [x] Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • [x] Change must not contain extraneous whitespace
  • [x] Commit message must refer to an issue
  • [ ] JDK-8303215 needs maintainer approval

Issue

  • JDK-8303215: Make thread stacks not use huge pages (Enhancement - P3 - Requested)

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk11u-dev.git pull/3106/head:pull/3106
$ git checkout pull/3106

Update a local copy of the PR:
$ git checkout pull/3106
$ git pull https://git.openjdk.org/jdk11u-dev.git pull/3106/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 3106

View PR using the GUI difftool:
$ git pr show -t 3106

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk11u-dev/pull/3106.diff

Using Webrev

Link to Webrev Comment

tkiriyama avatar Oct 21 '25 11:10 tkiriyama

:wave: Welcome back tkiriyama! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

bridgekeeper[bot] avatar Oct 21 '25 11:10 bridgekeeper[bot]

❗ This change is not yet ready to be integrated. See the Progress checklist in the description for automated requirements.

openjdk[bot] avatar Oct 21 '25 11:10 openjdk[bot]

Webrevs

mlbridge[bot] avatar Oct 21 '25 11:10 mlbridge[bot]

Hi, @tkiriyama. As the bot says, you need to change the PR title to "Backport 59d9d9fcb93c26dd8931d70934b889245b050acc" (I looked it up).

There are two follow-up issues, and they in turn also have follow-up issues. Please check them to see if they need to be included.

phohensee avatar Oct 21 '25 12:10 phohensee

This backport pull request has now been updated with issue from the original commit.

openjdk[bot] avatar Oct 22 '25 09:10 openjdk[bot]

Hi, @phohensee , Sorry, I fixed the title as you suggested. Are you referring to JDK-8312182 and JDK-8310687? They have not been verified yet, but they might also be needed for jdk11. If so, I'll create new pull requests.

tkiriyama avatar Oct 22 '25 09:10 tkiriyama

Yes, those two. But they in turn have related issues.

phohensee avatar Oct 23 '25 07:10 phohensee

I see, but these verifications will take time. Can we integrate this fix first? No regression was found.

tkiriyama avatar Oct 23 '25 12:10 tkiriyama

⚠️ @tkiriyama This change is now ready for you to apply for maintainer approval. This can be done directly in each associated issue or by using the /approval command.

openjdk[bot] avatar Oct 27 '25 20:10 openjdk[bot]

/approval request I would like to backport JDK-8303215 fix done in jdk17 to jdk11. Even though it is not a clean backport, it has been verified that there is no risk by testing test/hotspot.

tkiriyama avatar Oct 28 '25 12:10 tkiriyama

@tkiriyama 8303215: The approval request has been created successfully.

openjdk[bot] avatar Oct 28 '25 12:10 openjdk[bot]