Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Building opcache into the main binary breaks
opcache.huge_code_pages
, as we were relying on the fact thataccel_remap_huge_pages()
is not in the same mapping as the main text segment.This is a possible fix, using
mremap()
to replace the text segment "without downtime".A similar approach is used in https://chromium.googlesource.com/chromium/src/+/66.0.3359.158/chromeos/hugepage_text/hugepage_text.cc#120 and https://github.com/facebook/hhvm/blob/37915e288b70a47219e17956ca7cc019e031a582/hphp/runtime/base/program-functions.cpp#L866.
A possible alternative would be to exclude
accel_remap_huge_pages()
from the [start,start+size] range. We can do that by forcing the function into a separate segment, aligned to 2MiB, so it won't overlap with .text. This approach is used in https://github.com/intel/iodlr/blob/676bb7dec378d561e4d900fbdaed6ce8dbe449a1/large_page-c/large_page.c#L260.Edit: FreeBSD does not have mremap() :( I will try the intel approach.