Skip to content

test(sched): add sched-family test suite and fix kernel scheduler sys…#986

Merged
ZR233 merged 4 commits into
rcore-os:devfrom
04megumi:dev
May 29, 2026
Merged

test(sched): add sched-family test suite and fix kernel scheduler sys…#986
ZR233 merged 4 commits into
rcore-os:devfrom
04megumi:dev

Conversation

@04megumi

Copy link
Copy Markdown
Contributor
  • initialize sched-family syscall test suite
  • add cross-arch qemu test configs
  • implement comprehensive userspace scheduler tests
  • fix kernel sched_* syscall behavior and policy handling
  • pass scheduler family tests on all supported architectures

…calls

- initialize sched-family syscall test suite
- add cross-arch qemu test configs
- implement comprehensive userspace scheduler tests
- fix kernel sched_* syscall behavior and policy handling
- pass scheduler family tests on all supported architectures
@mai-team-app mai-team-app Bot mentioned this pull request May 27, 2026

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #986 Review: test(sched): add sched-family test suite and fix kernel scheduler syscalls

变更概述

本 PR 做了两件事:

  1. 内核实现:为 schedule.rs 中的 sched_getscheduler/sched_setscheduler/sched_getparam/sched_setaffinity 补充了实际语义实现,新增 check_sched_permission 权限检查,在 ax-task 中为 TaskInner 添加 sched_policysched_priority 字段。
  2. 测试用例:在 test-suit/starryos/normal/qemu-smp4/test-sched-family/c/ 新增了跨四平台(x86_64/aarch64/riscv64/loongarch64)的 scheduler 系统调用综合测试。

阻塞问题:编译失败

ax_hal 不是 starry-kernel 的直接依赖schedule.rsax_runtime::hal::* 改为 ax_hal::*,但 os/StarryOS/kernel/Cargo.toml 中只有 ax-runtime(无 ax-hal)。ax_runtime 通过 pub use ax_hal as hal 提供间接访问,但直接 use ax_hal::... 在此 crate 中不可解析。

本地验证结果:

cargo xtask clippy --package starry-kernel
→ error[E0433]: cannot find module or crate `ax_hal` in this scope
  (7 个编译错误,14 个配置全部失败)

修复方案(二选一):

  1. os/StarryOS/kernel/Cargo.toml[dependencies] 中增加 ax-hal.workspace = true
  2. use ax_hal::... 改回 use ax_runtime::hal::...(保持与现有 crate 依赖结构一致)。

非阻塞观察

  • check_sched_permission 只检查 caller.euid == target.uid || caller.euid == target.euid,缺少 caller.uid == target.uid 的检查。不过这与仓库中已有的 setpriority_cred_matches 模式一致,暂不阻塞。
  • SCHED_RESET_ON_FORK 提取后未实际实现 reset-on-fork 行为,作为首次实现可接受。
  • sys_sched_setscheduler 返回 0 而非旧 policy(Linux 返回旧 policy),语义略有差异。
  • sys_sched_setaffinitycheck_sched_permissionget_task_by_sched_pid 各查一次任务表,存在冗余查找。
  • 部分新增文件缺少末尾换行(CMakeLists.txt、qemu-riscv64.toml、qemu-x86_64.toml、main.c、test_framework.h)。

ax-task 变更

ax-task 中新增的 sched_policy/sched_priority 字段及对应 getter/setter 编译通过,16 个 clippy 配置全部 OK。

测试评价

  • 测试放在 test-suit/starryos/normal/qemu-smp4/test-sched-family/c/,符合项目测试规范。
  • 覆盖了 sched_setaffinitysched_getaffinitysched_yieldsched_setschedulersched_getschedulersched_getparamgetpriority 等关键系统调用。
  • 正确使用 syscall(SYS_...) 直接调用避免 libc 掩码。
  • 测试框架使用架构适配的 syscall number 定义,覆盖四个平台。

重复/重叠分析

检查了当前所有 open PR(#988#989#990 等),未发现与 scheduler 系统调用或测试重叠的 PR。本 PR 无重复风险。

合并冲突

PR 可以与当前 base 干净合并,无冲突。但因编译错误,需先修复后再合入。

Powered by mimo-v2.5-pro


use ax_errno::{AxError, AxResult};
use ax_runtime::hal::time::TimeValue;
use ax_hal::time::TimeValue;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞ax_hal 不是 starry-kernel 的直接依赖,此行会导致编译失败(error[E0433]: cannot find module or crate ax_hal)。

应改为 use ax_runtime::hal::time::TimeValue;,或在 os/StarryOS/kernel/Cargo.toml 中增加 ax-hal.workspace = true

同样受影响的还有第 50、70、71、104、138、142 行中所有 ax_hal:: 调用。

@cg24-THU

Copy link
Copy Markdown
Contributor

Prepared a review-fix branch for this PR: https://github.com/cg24-THU/tgoskits/tree/fix/pr986-review

Changes included:

  • Rebased the PR changes onto current upstream/dev (d9313f3).
  • Replaced the direct ax_hal usage in starry-kernel scheduler syscalls with ax_runtime::hal, avoiding an undeclared starry-kernel dependency.
  • Added missing trailing newlines in the sched-family test files reported by review.

Verification in ghcr.io/rcore-os/tgoskits-container:latest:

  • cargo fmt --all --check
  • cargo xtask clippy --package starry-kernel
  • cargo xtask clippy --package ax-task

All checks above passed. I could not push directly to 04megumi/tgoskits:dev because this account does not have write permission to that fork, so the branch above contains the ready-to-apply commits.

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #986 Review(第二轮):test(sched): add sched-family test suite and fix kernel scheduler syscalls

变更概述

本 PR 在内核中实现了 sched_getscheduler/sched_setscheduler/sched_getparam 系统调用的真实语义,新增 check_sched_permission 权限检查,在 ax-taskTaskInner 中添加 sched_policy/sched_priority 字段。测试方面在 test-suit/starryos/normal/qemu-smp4/test-sched-family/c/ 下新增了覆盖四架构(x86_64/aarch64/riscv64/loongarch64)的 scheduler 系统调用综合测试。

上轮阻塞问题:已修复 ✅

  • ax_hal 依赖问题:作者在第二个提交 5b9e6997a 中将 use ax_hal::... 改为 use ax_runtime::hal::{self, time::TimeValue},并通过 hal::... 间接访问,符合 starry-kernel 的依赖结构。
  • 格式问题:作者在第三个提交 627401751 中修复了 schedule.rs 缺少末尾换行的问题。

本地验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo xtask clippy --package starry-kernel (14 配置) ✅ 全部通过
cargo xtask clippy --package ax-task (16 配置) ✅ 全部通过

CI 状态:前一次提交的 Check formatting / run_host 失败已在新提交中修复。当前 head 的 CI 检测到路径变更后大部分任务为 skipped 状态(非失败)。

代码实现评价

  1. check_sched_permission:检查逻辑为 has_cap_sys_nice() || caller.euid == target.uid || caller.euid == target.euid,与仓库中已有的 setpriority_cred_matches 模式一致。虽然 Linux 还检查 caller.uid == target.uid/euid,但作为首次实现可接受。

  2. sys_sched_setscheduler:策略验证(SCHED_NORMAL/FIFO/RR/BATCH/IDLE)和优先级范围检查正确。RT 策略需要 CAP_SYS_NICE,符合 Linux 行为。返回 0 符合 Linux syscall 约定。SCHED_RESET_ON_FORK 已提取但未实现,作为首次实现可接受。

  3. sys_sched_getparam:正确返回任务的 sched_priority,使用 #[repr(C)] + bytemuck::Pod 保证内存布局安全。

  4. ax-task 变更sched_policy/sched_priority 使用 AtomicI32 + Acquire/Release 语义,线程安全。默认值 0 对应 SCHED_NORMAL 和 priority 0。

  5. sys_sched_setaffinitycheck_sched_permissionget_task_by_sched_pid 存在冗余任务查找,但不影响正确性。

测试评价

  • 测试放在 test-suit/starryos/normal/qemu-smp4/test-sched-family/c/符合项目测试规范
  • 使用 syscall(SYS_...) 直接调用避免 libc 掩码,覆盖四架构 syscall number 定义。
  • 边界条件覆盖全面:EINVAL、ESRCH、EPERM、EFAULT 均有测试。
  • success_regex = ["(?m)DONE: \\d+ pass, 0 fail"]fail_regex 设计合理,能可靠区分成功/失败。
  • 测试不是 apps 测试,属于 normal test-suit 用例,无需运行完整 Starry apps 验证。

重复/重叠分析

已检查 open PRs,未发现与 scheduler 系统调用或测试重叠的 PR。现有 qemu-smp4/affinity 测试仅覆盖 sched_setaffinity/sched_getaffinity,本 PR 覆盖完整的 scheduler 系统调用家族,互补而非重叠。

合并冲突

PR 可以与当前 dev base 干净合并,无冲突。

前轮 review 线程

前一轮 inline comment 关于 ax_hal 依赖问题已在当前 head 中修复。该线程已过期(outdated),GitHub 会自动标记为 resolved。

非阻塞建议(可后续改进)

  • C/TOML 文件(test_framework.hmain.cCMakeLists.txtqemu-riscv64.tomlqemu-x86_64.toml)仍缺少末尾换行,建议补上以保持一致性。
  • sys_sched_setaffinity 中可将 check_sched_permission 返回的 task 复用,避免冗余查找。

结论

上轮阻塞问题已全部修复,代码质量良好,测试覆盖充分,无阻塞性问题。推荐合入。

Powered by mimo-v2.5-pro

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #986 Review(第三轮):test(sched): add sched-family test suite and fix kernel scheduler syscalls

变更概述

本 PR 在内核中实现了 sched_getscheduler/sched_setscheduler/sched_getparam 系统调用的真实语义,新增 check_sched_permission 权限检查,在 ax-taskTaskInner 中添加 sched_policy/sched_priority(使用 AtomicI32 + Acquire/Release 语义,线程安全)。测试方面在 test-suit/starryos/normal/qemu-smp4/test-sched-family/ 下新增了覆盖四架构(x86_64/aarch64/riscv64/loongarch64)的 scheduler 系统调用综合测试。

上轮 review 状态

前两轮 review(2026-05-27 CHANGES_REQUESTED,2026-05-28 APPROVED)的阻塞问题均已修复。当前 head(b677204)在 approval 基础上新增了第四个 commit fix: fmt,具体变更:

  • 修复 C/TOML 文件缺失末尾换行的问题(CMakeLists.txt、main.c、test_framework.h、qemu-riscv64.toml)
  • qemu-*.tomlc/ 子目录移至正确的父目录 test-sched-family/(符合项目测试结构)
  • 清理 qemu-x86_64.toml 中多余的空行(纯格式整理,内容无变化)

本地验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo xtask clippy --package starry-kernel (14 配置) ✅ 全部通过
cargo xtask clippy --package ax-task (16 配置) ✅ 全部通过

CI 状态

当前 head(b677204)的所有 CI 检查均为 skipped 状态。这是正常的——CI 路径过滤器检测到变更仅限于测试文件和配置,跳过了与测试路径无关的构建/测试任务。无失败、无取消、无挂起。

QEMU 验证说明

本 PR 添加的是 test-suit/starryos/normal/ 下的 QEMU 测试用例(shell_init_cmd = "/usr/bin/test-sched-family"),不是 apps 测试。测试需要完整的 StarryOS 构建环境和 QEMU 才能运行。由于当前审查环境无法执行完整 QEMU 测试流程(需要交叉编译工具链和 rootfs 镜像),无法在此环境运行。但本地编译验证(fmt、clippy)全部通过,且测试框架设计合理:

  • success_regex = ["(?m)DONE: \\d+ pass, 0 fail"] 可靠区分成功/失败
  • fail_regex 同时匹配 panic 和 FAIL 标记
  • 测试覆盖了 EINVAL、ESRCH、EPERM、EFAULT 等边界条件
  • 使用 syscall(SYS_...) 直接调用避免 libc 掩码

代码实现评价

  1. check_sched_permission:检查 has_cap_sys_nice() || caller.euid == target.uid || caller.euid == target.euid,与仓库已有的 setpriority_cred_matches 模式一致。虽然 Linux 还检查 caller.uid == target.uid/euid,但作为首次实现可接受。

  2. sys_sched_setscheduler:策略验证(SCHED_NORMAL/FIFO/RR/BATCH/IDLE)和优先级范围检查正确。RT 策略需要 CAP_SYS_NICE,符合 Linux 行为。SCHED_RESET_ON_FORK 已提取但未实际实现 reset-on-fork 行为,作为首次实现可接受。

  3. sys_sched_setscheduler 返回 0:Linux 返回旧 policy,当前实现返回 0。测试使用 libc sched_setscheduler() wrapper 验证返回 0,不受此差异影响。后续建议修正为返回旧 policy。

  4. ax-task 变更sched_policy/sched_priority 使用 AtomicI32 + Acquire/Release 语义,线程安全。默认值 0 对应 SCHED_NORMAL 和 priority 0。16 个 clippy 配置全部通过。

重复/重叠分析

  • 已有的 qemu-smp4/affinity 测试仅覆盖 sched_setaffinity/sched_getaffinity 和 CPU 迁移行为,本 PR 覆盖完整的 scheduler 系统调用家族(scheduler policy、param、priority、yield、getpriority),互补而非重叠。
  • 检查了当前 open PRs(#1018#1019 等),未发现与 scheduler 系统调用或测试重叠的 PR。#1019 是 Axvisor 架构重构,完全无关。

合并冲突

PR 可以与当前 dev base 干净合并,mergeable: true,无冲突。

前轮 review 线程

前一轮 inline comment(关于 ax_hal 依赖问题)已随修复 commit 变为 outdated,GitHub 自动标记为 resolved。

非阻塞建议(可后续改进)

  • sys_sched_setscheduler 可考虑返回旧 policy 以更贴近 Linux 语义
  • sys_sched_setaffinitycheck_sched_permissionget_task_by_sched_pid 存在冗余任务查找,可合并
  • check_sched_permission 可增加 caller.uid == target.uid/euid 的检查

结论

上轮阻塞问题已全部修复,第四个 commit 进一步修正了文件结构和格式问题。代码质量良好,测试覆盖充分,CI 状态正常(全部 skipped,无失败)。无阻塞性问题,推荐合入。

Powered by mimo-v2.5-pro

@ZR233
ZR233 merged commit 2dd0d2d into rcore-os:dev May 29, 2026
47 checks passed
@github-actions github-actions Bot mentioned this pull request Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants