python / python/cpython

--disable-gil --enable-experimental-jit=yes-off: test_jit_is_active fails

未关闭
#141,956 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

tests topic-JIT type-bug
主要语言
Python
星标
77.2k
派生
35.9k
PR 合并指标
PR 指标待抓取

描述

Bug report

Bug description:

Hello.

When we started to build the JIT in Fedora's Python, we didn't do it for the freethreading build, as I was told it's not yet ready. I circled back to the referenced issue https://github.com/python/cpython/issues/118844 and saw it is long closed. Hence, I tried to build the JIT with the freethreading build as well. It builds fine, but the tests fail:

Re-running test_sys in verbose mode (matching: test_jit_is_active)
test_jit_is_active (test.test_sys.TestSysJIT.test_jit_is_active) ... FAIL
======================================================================
FAIL: test_jit_is_active (test.test_sys.TestSysJIT.test_jit_is_active)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python3.15-3.15.0_a2-build/Python-3.15.0a2/Lib/test/test_sys.py", line 2275, in test_jit_is_active
    assert_python_ok("-c", script.format(enabled=available), PYTHON_JIT="1")
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/builddir/build/BUILD/python3.15-3.15.0_a2-build/Python-3.15.0a2/Lib/test/support/script_helper.py", line 182, in assert_python_ok
    return _assert_python(True, *args, **env_vars)
  File "/builddir/build/BUILD/python3.15-3.15.0_a2-build/Python-3.15.0a2/Lib/test/support/script_helper.py", line 167, in _assert_python
    res.fail(cmd_line)
    ~~~~~~~~^^^^^^^^^^
  File "/builddir/build/BUILD/python3.15-3.15.0_a2-build/Python-3.15.0a2/Lib/test/support/script_helper.py", line 80, in fail
    raise AssertionError(f"Process return code is {exitcode}\n"
    ...<10 lines>...
                         f"---")
AssertionError: Process return code is 1
command line: ['/builddir/build/BUILD/python3.15-3.15.0_a2-build/Python-3.15.0a2/build/freethreading-debug/python', '-X', 'faulthandler', '-c', '\nimport _testcapi\nimport _testinternalcapi\nimport sys\n\ndef frame_0_interpreter() -> None:\n    assert sys._jit.is_active() is False\n\ndef frame_1_interpreter() -> None:\n    assert sys._jit.is_active() is False\n    frame_0_interpreter()\n    assert sys._jit.is_active() is False\n\ndef frame_2_jit(expected: bool) -> None:\n    # Inlined into the last loop of frame_3_jit:\n    assert sys._jit.is_active() is expected\n    # Insert C frame:\n    _testcapi.pyobject_vectorcall(frame_1_interpreter, None, None)\n    assert sys._jit.is_active() is expected\n\ndef frame_3_jit() -> None:\n    # JITs just before the last loop:\n    # 1 extra iteration for tracing.\n    for i in range(_testinternalcapi.TIER2_THRESHOLD + 2):\n        # Careful, doing this in the reverse order breaks tracing:\n        expected = True and i >= _testinternalcapi.TIER2_THRESHOLD + 1\n        assert sys._jit.is_active() is expected\n        frame_2_jit(expected)\n        assert sys._jit.is_active() is expected\n\ndef frame_4_interpreter() -> None:\n    assert sys._jit.is_active() is False\n    frame_3_jit()\n    assert sys._jit.is_active() is False\n\nassert sys._jit.is_active() is False\nframe_4_interpreter()\nassert sys._jit.is_active() is False\n']
stdout:
---
---
stderr:
---
Traceback (most recent call last):
  File "<string>", line 37, in <module>
    frame_4_interpreter()
    ~~~~~~~~~~~~~~~~~~~^^
  File "<string>", line 33, in frame_4_interpreter
    frame_3_jit()
    ~~~~~~~~~~~^^
  File "<string>", line 27, in frame_3_jit
    assert sys._jit.is_active() is expected
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
---
----------------------------------------------------------------------
Ran 1 test in 0.672s
FAILED (failures=1)
test test_sys failed
1 test failed again:
    test_sys
== Tests result: FAILURE then FAILURE ==

This is a build --with-pydebug --disable-gil --enable-experimental-jit=yes-off. An optimized build without pydebug behaves the same way. I am also testing with Python 3.14.

A full log with testinfo: build.log

The same test failure happens both on x86_64 and aarch64 Fedora. This is 3.15.0a2.

CPython versions tested on:

3.15

Operating systems tested on:

Linux

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 Lib/test/test_sys.py 和 TestSysJIT.test_jit_is_active 开始,然后使用 --with-pydebug --disable-gil --enable-experimental-jit=yes-off 重现失败。将 freethreading 构建中报告的行为与测试在跟踪循环和解释器调用期间预期的 JIT 状态进行比较。在报告的架构上,受影响的构建配置中的测试通过即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
compilers
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。