Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • 2 2026OS-陶酉册
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • 陶酉册
  • 2026OS-陶酉册
  • Merge requests
  • !4

kernel: 修复 trap 回收 O(N²) + procfs smaps 每读重生成导致的 libcbench-musl 卡死

  • Review changes

  • Download
  • Patches
  • Plain diff
Merged 陶酉册 requested to merge fix/trap-reap-procfs-smaps-hang into main Jun 15, 2026
  • Overview 0
  • Commits 1
  • Pipelines 0
  • Changes 3

修复内容

libc-bench b_pthread_create_serial1 创建 2500 个不 join 的线程,触发三处独立的 O(N²) 开销,导致 PID1 阻塞 waitpid 活锁、平台判「运行时间过长」、其后所有测试组(musl 性能组、全部 glibc、LTP)得 0 分。

1. 调度:去掉每-trap 全表扫描的延迟回收

trap 路径的 detached-zombie 回收每次用户态陷入都扫一遍整张进程表。改为显式工作队列 ProcessTable::detached_zombies:任何 wait4 永远收不走的僵尸(线程,以及父进程忽略 SIGCHLD 而 detach 的子进程)在 mark_zombie / exit() auto-reap 分支入队,回收时 O(k) 排空,对标 Linux release_task 的 off-trap 延迟释放。

2. procfs:seq_file per-open 快照,消除每次 read() 重生成

ProcVfsInode::read 之前每个 read() 系统调用都用生成器重新生成整文件。/proc/[pid]/smaps(2500+ VMA)被 musl 按 ~1KB 分块读取 → 整个 ~MB 缓冲重生成约 1500 次 ⇒ O(N²)。改为 per-open 快照 content_cache:offset==0 时整体快照一次,后续顺序读直接切片返回;write() 使快照失效。偏移寻址生成器(pagemap)保留 read_at 快路径。

验证

官方镜像 zhouzhouyi/os-contest:20260510 实跑:b_pthread_create_serial1 现 6.45s 跑完,libcbench-musl 跑到 #### OS COMP TEST GROUP END libcbench-musl #### 并继续进入下一阶段(此前为无限 hang)。make all RC=0,kernel-rv/kernel-la 双 ELF,0 个 SIG-DBG。

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: fix/trap-reap-procfs-smaps-hang