Mercurial > hg > graal-jvmci-8
comparison src/os/linux/vm/os_linux.cpp @ 12832:263f2c796d6c
8024838: Significant slowdown due to transparent huge pages
Summary: Don't turn on transparent huge pages (-XX:+UseTransparentHugePages) unless explicitly specified on the command line. This has the effect that large pages are never turned on Linux unless the user has explicitly enabled any of the large pages flags: -XX:+UseLargePages, -XX:+UseTransparentHugePages, -XX:+UseHugeTLBFS, and -XX:+UseSHM.
Reviewed-by: jwilhelm, tschatzl, brutisso
author | stefank |
---|---|
date | Sat, 05 Oct 2013 10:14:58 +0200 |
parents | 06ae47d9d088 |
children | aa6f2ea19d8f |
comparison
equal
deleted
inserted
replaced
12830:9b4d0569f2f4 | 12832:263f2c796d6c |
---|---|
3359 | 3359 |
3360 bool os::Linux::setup_large_page_type(size_t page_size) { | 3360 bool os::Linux::setup_large_page_type(size_t page_size) { |
3361 if (FLAG_IS_DEFAULT(UseHugeTLBFS) && | 3361 if (FLAG_IS_DEFAULT(UseHugeTLBFS) && |
3362 FLAG_IS_DEFAULT(UseSHM) && | 3362 FLAG_IS_DEFAULT(UseSHM) && |
3363 FLAG_IS_DEFAULT(UseTransparentHugePages)) { | 3363 FLAG_IS_DEFAULT(UseTransparentHugePages)) { |
3364 // If UseLargePages is specified on the command line try all methods, | 3364 |
3365 // if it's default, then try only UseTransparentHugePages. | 3365 // The type of large pages has not been specified by the user. |
3366 if (FLAG_IS_DEFAULT(UseLargePages)) { | 3366 |
3367 UseTransparentHugePages = true; | 3367 // Try UseHugeTLBFS and then UseSHM. |
3368 } else { | 3368 UseHugeTLBFS = UseSHM = true; |
3369 UseHugeTLBFS = UseTransparentHugePages = UseSHM = true; | 3369 |
3370 } | 3370 // Don't try UseTransparentHugePages since there are known |
3371 // performance issues with it turned on. This might change in the future. | |
3372 UseTransparentHugePages = false; | |
3371 } | 3373 } |
3372 | 3374 |
3373 if (UseTransparentHugePages) { | 3375 if (UseTransparentHugePages) { |
3374 bool warn_on_failure = !FLAG_IS_DEFAULT(UseTransparentHugePages); | 3376 bool warn_on_failure = !FLAG_IS_DEFAULT(UseTransparentHugePages); |
3375 if (transparent_huge_pages_sanity_check(warn_on_failure, page_size)) { | 3377 if (transparent_huge_pages_sanity_check(warn_on_failure, page_size)) { |
3391 | 3393 |
3392 return UseSHM; | 3394 return UseSHM; |
3393 } | 3395 } |
3394 | 3396 |
3395 void os::large_page_init() { | 3397 void os::large_page_init() { |
3396 if (!UseLargePages) { | 3398 if (!UseLargePages && |
3399 !UseTransparentHugePages && | |
3400 !UseHugeTLBFS && | |
3401 !UseSHM) { | |
3402 // Not using large pages. | |
3403 return; | |
3404 } | |
3405 | |
3406 if (!FLAG_IS_DEFAULT(UseLargePages) && !UseLargePages) { | |
3407 // The user explicitly turned off large pages. | |
3408 // Ignore the rest of the large pages flags. | |
3409 UseTransparentHugePages = false; | |
3397 UseHugeTLBFS = false; | 3410 UseHugeTLBFS = false; |
3398 UseTransparentHugePages = false; | |
3399 UseSHM = false; | 3411 UseSHM = false; |
3400 return; | 3412 return; |
3401 } | 3413 } |
3402 | 3414 |
3403 size_t large_page_size = Linux::setup_large_page_size(); | 3415 size_t large_page_size = Linux::setup_large_page_size(); |