Skip to content

Commit 13643f9

Browse files
committed
[GR-55107] Enable NFI Panama by default on GraalPy on HotSpot
PullRequest: graalpython/3848
2 parents 7dd9c2c + 5e514d4 commit 13643f9

File tree

6 files changed

+13
-12
lines changed

6 files changed

+13
-12
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ language runtime. The main focus is on user-observable behavior of the engine.
1717
* Enable FTS3, FTS4, FTS5, RTREE, and math function features in the bundled sqlite3 library.
1818
* Add support patches for Torch 2.7.0, PyGObject 3.52.3, xmlschema 4.0.0, lxml < 5.4.0, SciPy 1.15, jq 1.8.0, NumPy < 2.3, ormsgpack < 1.9.1, pandas 2.2.3, PyArrow 19.0, PyMuPDF 1.25.4.
1919
* The GraalPy Native standalone on Linux now uses the G1 garbage collector which is much faster.
20+
* Speedup native extensions by using the Panama NFI backend for faster native calls, available on GraalVM 25, JDK 25 and in the GraalPy JVM standalone.
2021

2122
## Version 24.2.0
2223
* Updated developer metadata of Maven artifacts.

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "eed61bcd1e6a728edbbe22e323ca383f179faeb2" }
1+
{ "overlay": "734294916a9baacff3c31118a6052aa3eee6efd3" }

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonOptions.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
6262
import com.oracle.truffle.api.Option;
6363
import com.oracle.truffle.api.TruffleLanguage.Env;
64+
import com.oracle.truffle.api.TruffleOptions;
6465
import com.oracle.truffle.api.dsl.Idempotent;
6566
import com.oracle.truffle.api.exception.AbstractTruffleException;
6667
import com.oracle.truffle.api.nodes.ExplodeLoop;
@@ -362,8 +363,8 @@ public static void checkBytecodeDSLEnv() {
362363
@Option(category = OptionCategory.EXPERT, usageSyntax = "<bytes>", help = "Initial native memory heap size that triggers a GC (default: 256 MB).") //
363364
public static final OptionKey<Long> InitialNativeMemory = new OptionKey<>(1L << 28);
364365

365-
@Option(category = OptionCategory.EXPERT, usageSyntax = "true|false", help = "Use the experimental panama backend for NFI.", stability = OptionStability.EXPERIMENTAL) //
366-
public static final OptionKey<Boolean> UsePanama = new OptionKey<>(false);
366+
@Option(category = OptionCategory.EXPERT, usageSyntax = "true|false", help = "Use the panama backend for NFI.", stability = OptionStability.EXPERIMENTAL) //
367+
public static final OptionKey<Boolean> UsePanama = new OptionKey<>(!TruffleOptions.AOT && Runtime.version().feature() >= 22);
367368

368369
@Option(category = OptionCategory.EXPERT, usageSyntax = "true|false", help = "Set by the launcher to true (false means that GraalPy is being embedded in an application).") //
369370
public static final OptionKey<Boolean> RunViaLauncher = new OptionKey<>(false);

mx.graalpython/mx_graalpython.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ def do_run_python(args, extra_vm_args=None, env=None, jdk=None, extra_dists=None
356356
cp_prefix = ver_dep if cp_prefix is None else (ver_dep + os.pathsep + cp_prefix)
357357
else:
358358
dists = ['GRAALPYTHON']
359-
dists += ['TRUFFLE_NFI', 'TRUFFLE_NFI_LIBFFI', 'GRAALPYTHON-LAUNCHER']
359+
dists += ['GRAALPYTHON-LAUNCHER']
360360

361361
vm_args, graalpython_args = mx.extract_VM_args(args, useDoubleDash=True, defaultAllVMArgs=False)
362362
if minimal:
@@ -378,7 +378,7 @@ def do_run_python(args, extra_vm_args=None, env=None, jdk=None, extra_dists=None
378378

379379
graalpython_args.insert(0, '--experimental-options=true')
380380

381-
vm_args += mx.get_runtime_jvm_args(dists, jdk=jdk, cp_prefix=cp_prefix, cp_suffix=cp_suffix)
381+
vm_args += mx.get_runtime_jvm_args(dists, jdk=jdk, cp_prefix=cp_prefix, cp_suffix=cp_suffix, force_cp=True)
382382

383383
if not jdk:
384384
jdk = get_jdk()
@@ -396,7 +396,7 @@ def do_run_python(args, extra_vm_args=None, env=None, jdk=None, extra_dists=None
396396

397397
def node_footprint_analyzer(args, **kwargs):
398398
main_class = 'com.oracle.graal.python.test.advanced.NodeFootprintAnalyzer'
399-
vm_args = mx.get_runtime_jvm_args(['GRAALPYTHON_UNIT_TESTS', 'GRAALPYTHON', 'TRUFFLE_NFI', 'TRUFFLE_NFI_LIBFFI'])
399+
vm_args = mx.get_runtime_jvm_args(['GRAALPYTHON_UNIT_TESTS', 'GRAALPYTHON'])
400400
return mx.run_java(vm_args + [main_class] + args, **kwargs)
401401

402402

@@ -1155,7 +1155,6 @@ def graalpython_gate_runner(args, tasks):
11551155
with Task('GraalPython JUnit', tasks, tags=[GraalPythonTags.junit]) as task:
11561156
if task:
11571157
run_mx(["build"], env={**os.environ, **LATEST_JAVA_HOME})
1158-
run_mx(["build", "--only", "JLINE3"], env={**os.environ})
11591158
if WIN32:
11601159
punittest(
11611160
[
@@ -1401,7 +1400,8 @@ def graalpython_gate_runner(args, tasks):
14011400
run_mx(["build"], env={**os.environ, **LATEST_JAVA_HOME})
14021401
args =['--verbose']
14031402
vm_args = ['-Dpolyglot.engine.WarnInterpreterOnly=false']
1404-
mx_unittest.unittest(vm_args + ['org.graalvm.python.embedding.vfs.test'] + args + ["--use-graalvm"])
1403+
has_compiler = bool(mx.suite('compiler', fatalIfMissing=False))
1404+
mx_unittest.unittest(vm_args + ['org.graalvm.python.embedding.vfs.test'] + args + (["--use-graalvm"] if has_compiler else []))
14051405

14061406
with Task('GraalPython Python tests', tasks, tags=[GraalPythonTags.tagged]) as task:
14071407
if task:
@@ -2539,7 +2539,7 @@ def run_leak_launcher(input_args):
25392539

25402540
env = os.environ.copy()
25412541

2542-
dists = ['GRAALPYTHON', 'GRAALPYTHON_RESOURCES', 'TRUFFLE_NFI', 'TRUFFLE_NFI_LIBFFI', 'GRAALPYTHON_UNIT_TESTS']
2542+
dists = ['GRAALPYTHON', 'GRAALPYTHON_RESOURCES', 'GRAALPYTHON_UNIT_TESTS']
25432543

25442544
vm_args, graalpython_args = mx.extract_VM_args(args, useDoubleDash=True, defaultAllVMArgs=False)
25452545
vm_args += mx.get_runtime_jvm_args(dists)

mx.graalpython/mx_graalpython_benchmark.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier"
7474
CONFIGURATION_SANDBOXED = "sandboxed"
7575
CONFIGURATION_SANDBOXED_MULTI = "sandboxed-multi"
76-
CONFIGURATION_PANAMA = "panama"
7776

7877
PYTHON_JAVA_EMBEDDING_VM_REGISTRY_NAME = "PythonJavaDriver"
7978
CONFIGURATION_JAVA_EMBEDDING_MULTI = "java-driver-multi-default"
@@ -1042,7 +1041,6 @@ def add_graalpy_vm(name, *extra_polyglot_args):
10421041
add_graalpy_vm(CONFIGURATION_NATIVE_MULTI, '--experimental-options', '-multi-context')
10431042
add_graalpy_vm(CONFIGURATION_NATIVE_INTERPRETER_MULTI, '--experimental-options', '-multi-context', '--engine.Compilation=false')
10441043
add_graalpy_vm(CONFIGURATION_NATIVE_MULTI_TIER, '--experimental-options', '--engine.MultiTier=true')
1045-
add_graalpy_vm(CONFIGURATION_PANAMA, '--experimental-options', '--python.UsePanama=true')
10461044

10471045
# all of the graalpy vms, but with bc dsl
10481046
for name, extra_polyglot_args in graalpy_vms[:]:

mx.graalpython/suite.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,8 @@
10791079
"sdk:NATIVEIMAGE",
10801080
"sdk:COLLECTIONS",
10811081
"truffle:TRUFFLE_NFI",
1082-
"truffle:TRUFFLE_NFI_LIBFFI", # runtime dependency for convenience
1082+
"truffle:TRUFFLE_NFI_LIBFFI", # runtime dependency
1083+
"truffle:TRUFFLE_NFI_PANAMA", # runtime dependency
10831084
"truffle:TRUFFLE_ICU4J",
10841085
"truffle:TRUFFLE_XZ",
10851086
],

0 commit comments

Comments
 (0)