From 8fcf89088e7c088d7816bde15b30bbb6e703a8f4 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Tue, 19 May 2026 14:15:45 +0200 Subject: [PATCH 1/2] [GR-67905] Save host inlining log for PGO profile job --- ci.jsonnet | 1 + mx.graalpython/mx_graalpython.py | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ci.jsonnet b/ci.jsonnet index 6ee423c4aa..e7b0d770bf 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -200,6 +200,7 @@ logs+: [ "default.iprof.gz", "default.lcov", + "host-inlining.txt", ], }), }), diff --git a/mx.graalpython/mx_graalpython.py b/mx.graalpython/mx_graalpython.py index 8392bc9d86..9a674fc80d 100644 --- a/mx.graalpython/mx_graalpython.py +++ b/mx.graalpython/mx_graalpython.py @@ -411,6 +411,10 @@ def graalpy_native_pgo_build_and_test(args=None): if mx_sdk_vm_ng.get_bootstrap_graalvm_version() < mx.VersionSpec("25.0"): mx.abort("python-native-pgo not supported on GraalVM < 25") + host_inlining_log = Path(SUITE.dir) / "host-inlining.txt" + if host_inlining_log.exists(): + host_inlining_log.unlink() + with set_env(GRAALPY_PGO_PROFILE=""): mx.log(mx.colorize("[PGO] Building PGO-instrumented native image", color="yellow")) build_home = graalpy_standalone_home('native', enterprise=True, build=True) @@ -469,11 +473,15 @@ def graalpy_native_pgo_build_and_test(args=None): if not os.path.isfile(iprof_path): mx.abort(f"[PGO] Could not find profile file at expected location: {iprof_path}") - with set_env(GRAALPY_PGO_PROFILE=str(iprof_path)): + with set_env(GRAALPY_PGO_PROFILE=str(iprof_path), GRAALPY_HOST_INLINING_LOG=str(host_inlining_log)): mx.log(mx.colorize("[PGO] Building optimized native image with collected profile", color="yellow")) native_bin = graalpy_standalone('native', enterprise=True, build=True) mx.log(mx.colorize(f"[PGO] Optimized PGO build complete: {native_bin}", color="yellow")) + if host_inlining_log.exists(): + mx.log(mx.colorize(f"[PGO] Host inlining log at: {host_inlining_log}", color="yellow")) + else: + mx.warn(f"[PGO] Host inlining log was not produced at expected location: {host_inlining_log}") iprof_gz_path = str(iprof_path) + '.gz' with open(iprof_path, 'rb') as f_in, gzip.open(iprof_gz_path, 'wb') as f_out: @@ -948,6 +956,14 @@ def graalpy_standalone_home(standalone_type, enterprise=False, dev=False, build= mx_args.append(f"--extra-image-builder-argument=--pgo={pgo_profile}") mx_args.append(f"--extra-image-builder-argument=-H:+UnlockExperimentalVMOptions") mx_args.append(f"--extra-image-builder-argument=-H:+PGOPrintProfileQuality") + if host_inlining_log := os.environ.get("GRAALPY_HOST_INLINING_LOG"): + mx_args.extend([ + f"--extra-image-builder-argument=-H:Log=HostInliningPhase,~CanonicalizerPhase,~GraphBuilderPhase", + f"--extra-image-builder-argument=-H:+TruffleHostInliningPrintExplored", + f"--extra-image-builder-argument=-H:MethodFilter=com.oracle.graal.python.*.*", + f"--extra-image-builder-argument=-H:-UnlockExperimentalVMOptions", + f"--extra-image-builder-argument=-Dgraal.LogFile={host_inlining_log}", + ]) else: mx_args.append(f"--extra-image-builder-argument=--pgo-instrument") mx_args.append(f"--extra-image-builder-argument=-H:+UnlockExperimentalVMOptions") From 3939e277f7e15d911caea38347ff9995e89a5db4 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Tue, 19 May 2026 18:07:12 +0200 Subject: [PATCH 2/2] [GR-67905] Gzip host inlining log artifact --- ci.jsonnet | 2 +- mx.graalpython/mx_graalpython.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ci.jsonnet b/ci.jsonnet index e7b0d770bf..2286ce6c2a 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -200,7 +200,7 @@ logs+: [ "default.iprof.gz", "default.lcov", - "host-inlining.txt", + "host-inlining.txt.gz", ], }), }), diff --git a/mx.graalpython/mx_graalpython.py b/mx.graalpython/mx_graalpython.py index 9a674fc80d..d56b2022d2 100644 --- a/mx.graalpython/mx_graalpython.py +++ b/mx.graalpython/mx_graalpython.py @@ -412,8 +412,11 @@ def graalpy_native_pgo_build_and_test(args=None): mx.abort("python-native-pgo not supported on GraalVM < 25") host_inlining_log = Path(SUITE.dir) / "host-inlining.txt" + host_inlining_log_gz = Path(str(host_inlining_log) + ".gz") if host_inlining_log.exists(): host_inlining_log.unlink() + if host_inlining_log_gz.exists(): + host_inlining_log_gz.unlink() with set_env(GRAALPY_PGO_PROFILE=""): mx.log(mx.colorize("[PGO] Building PGO-instrumented native image", color="yellow")) @@ -480,6 +483,10 @@ def graalpy_native_pgo_build_and_test(args=None): mx.log(mx.colorize(f"[PGO] Optimized PGO build complete: {native_bin}", color="yellow")) if host_inlining_log.exists(): mx.log(mx.colorize(f"[PGO] Host inlining log at: {host_inlining_log}", color="yellow")) + with open(host_inlining_log, 'rb') as f_in, gzip.open(host_inlining_log_gz, 'wb') as f_out: + shutil.copyfileobj(f_in, f_out) + host_inlining_log.unlink() + mx.log(mx.colorize(f"[PGO] Gzipped host inlining log at: {host_inlining_log_gz}", color="yellow")) else: mx.warn(f"[PGO] Host inlining log was not produced at expected location: {host_inlining_log}")