Skip to content

【严重问题】多次快照重载导致模拟器GPU状态污染,KVM锁无法释放,评测跑至64任务后必崩溃 #48

Description

@CthulhuAIFrenzy

环境信息

  • 部署方式:MobileWorld 容器化部署
  • 核心依赖:Android Emulator(QEMU/KVM 虚拟化)
  • 场景:批量任务评测,每个任务前均通过 load_snapshot 重置模拟器状态

问题描述

在容器中批量运行评测任务时,模拟器会在跑至约64个任务后崩溃,后续所有任务初始化均失败,报错如下:
RuntimeError: Failed to initialize task SearchItemAndCheckoutTask: 500 Server Error: Internal Server Error for url: shturl.cc/CuqQvCr4WTEUUZeiKc6cU8s

关键现象与根因分析

  1. 状态污染触发崩溃

    • 多次调用 load_snapshot 后,模拟器 GPU colorbuffer 状态出现不一致
    • 触发 KVM slot File exists 错误,直接导致 emulator 进程意外终止
    • 触发频率:跑数十个任务后必然出现
  2. 崩溃后无法自愈,锁资源泄漏

    • 调用 start_shturl.cc/K 重启时,固定卡 600s 超时失败
    • 已退出的 QEMU 僵尸进程仍持有 KVM/AVD 锁,新模拟器无法抢占资源
    • 后端 worker 因同步逻辑阻塞,所有 /task/init 请求返回 500 错误

复现步骤

  1. 启动 MobileWorld 容器环境
  2. 批量执行评测任务,每个任务均通过 load_snapshot 重置模拟器
  3. 运行至约60-70个任务时,模拟器必崩溃
  4. 后续所有任务初始化请求返回 500 错误,环境彻底无法恢复

影响与尝试过的临时方案

  • 影响:无法完成大规模批量评测,每次崩溃都需手动清理锁、重启容器
  • 临时方案尝试:
    • 延长启动超时时间:无效(锁资源未释放)
    • 手动 kill -9 僵尸进程:可临时恢复,但需人工介入,无法自动化
    • 减少单次任务数量:规避问题,但无法满足完整评测需求

求助与问题

  1. 请问是否有其他用户遇到过类似「多次快照重载导致 GPU 状态污染 + KVM 锁泄漏」的问题?
  2. 目前是否有已知的规避方案或修复补丁?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions