-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Explore the impact of new GraalVM defaults on Quarkus #44864
Comments
The results indicate that in most cases the binary size difference is negligible and in the worst case we observe ~1% increase in the image size. Although ~1% doesn't seem excessive, we probably need to opt-out of this new default for registrations managed by Quarkus, to reduce the impact as much as possible since oracle/graal#9679 is expected to bring more increases like this. The raw results are:
The table was generated by parsing with: import json
with open('before.json', 'r') as file:
before_data = json.load(file)
with open('after.json', 'r') as file:
after_data = json.load(file)
# filter out the images that start with acme and foo
before_data = [item for item in before_data if item['img_name'].startswith('quarkus-integration-test')]
# index after_data by image name
after_data = {item['img_name']: item for item in after_data if item['img_name'].startswith('quarkus-integration-test')}
print("| Image Name | Total Bytes Difference (%) |")
print("|------------|----------------------------|")
# Collect data for histogram
differences = []
for item in before_data:
img_name = item['img_name']
before = item['image_size_stats']['total_bytes']
after = after_data[img_name]['image_size_stats']['total_bytes']
diff = ( after - before) / after * 100
img_name = img_name.removeprefix('quarkus-integration-test-').removesuffix('-runner')
differences.append(diff)
print(f"| {img_name:70s} | {diff:.2f} |")
import matplotlib.pyplot as plt
# Plot histogram
plt.hist(differences, bins=20, edgecolor='black')
plt.title('Histogram of Total Bytes Difference (%)')
plt.xlabel('Total Bytes Difference (%)')
plt.ylabel('Frequency')
plt.grid(True)
plt.savefig('histogram.png')
plt.close() |
oracle/graal#10178 has now been split in:
The "All reflectively-accessed types now have all their fields registered for runtime access by default" change is postponed for now. The split changes are being evaluated in https://github.com/graalvm/mandrel/actions/runs/12140368060 (with collector API tag I will update this comment with the new results once available. |
Description
oracle/graal#10178 changes some defaults around reachability metadata, namely:
The goal of this issue is to track the impact of this changes on the Quarkus core integration tests to see if/when Quarkus should opt-out of these new defaults.
Implementation ideas
The new changes are being tested in https://github.com/graalvm/mandrel/actions/runs/12114945249 (with collector API tag
graal-pr-10178-reachability-test
) and will be compared to the results of https://github.com/graalvm/mandrel/actions/runs/12114969951 (with collector API taggraal-pr-10178-reachability-test-before
)The text was updated successfully, but these errors were encountered: