Skip to content

feat(Starry): support MariaDB#906

Merged
ZR233 merged 4 commits into
rcore-os:devfrom
Alayfolk64:feat/MariaDB
May 29, 2026
Merged

feat(Starry): support MariaDB#906
ZR233 merged 4 commits into
rcore-os:devfrom
Alayfolk64:feat/MariaDB

Conversation

@Alayfolk64

@Alayfolk64 Alayfolk64 commented May 23, 2026

Copy link
Copy Markdown
Contributor

支持 Aipine 环境下的MariaDB

问题背景

MariaDB 在 StarryOS 上运行时会触发一组真实应用场景下的系统调用兼容性问题,包括 direct I/O 读写、mmap 行为以及 Linux AIO 相关系统调用缺失。为了证明 MariaDB 已经可以作为 Starry 应用运行,也需要补充对应的 app 用例和 syscall 回归测试。

修改内容

  • 新增 apps/starry/mariadb 应用适配用例。

    • 添加四种架构的 build/qemu 配置。
    • 添加 MariaDB 安装、初始化、后台启动、SQL 工作负载、重启持久化检查脚本。
    • 添加中英文 README。
    • 在运行前刷新 app 专用 rootfs,避免复用脏 rootfs 影响结果。
  • 补齐 Linux AIO 兼容层。

    • 新增 os/StarryOS/kernel/src/syscall/fs/aio.rs
    • 实现 io_setupio_destroyio_submitio_geteventsio_pgeteventsio_cancel 等兼容实现。
    • 当前不追求完整异步 I/O 语义,但保证常见应用探测和 MariaDB/InnoDB 运行路径可正常通过。
  • 修复文件读写与 mmap 相关问题。

    • 修复 read_at / write_at 行为,避免 InnoDB direct I/O 场景下出现短读、写入失败等问题。
    • 区分带 offset 的读写和普通顺序读写,避免 pread64/pwrite64 影响文件当前 offset。
    • 修复 MariaDB 运行中触发的 mmap 参数与映射兼容问题。
  • 补充 syscall 回归测试。

    • 新增 pread64pwrite64 测例。
    • 新增 Linux AIO 相关系统调用测例,每个 syscall 独立目录。
    • 清理不必要的 prebuild.sh,避免 syscall 测例依赖额外 rootfs 安装步骤。
    • 修复 test-tgsigqueueinfo 的 pthread 链接方式,使其适配现有交叉编译环境。

关键修复说明

Linux AIO 兼容层

项目 修改内容 作用
新增文件 新增 os/StarryOS/kernel/src/syscall/fs/aio.rs 将 AIO 相关系统调用集中到独立模块
io_setup 创建兼容用 AIO context,并写回 context id 支持 MariaDB/InnoDB 初始化 AIO 环境
io_destroy 释放已创建的 AIO context 支持应用正常清理 AIO 资源
io_submit 接收 iocb,并同步完成兼容的读写请求 支持应用提交 AIO 请求
io_getevents 返回已完成事件 支持应用获取 AIO 完成结果
io_pgetevents 兼容 io_getevents,接受额外 signal mask 参数 适配应用探测路径
io_cancel 提供兼容返回 避免清理或探测阶段因缺失 syscall 失败

文件读写与 mmap

问题 修改内容 修复效果
read_at 短读 修复指定 offset 读取路径 避免 InnoDB 出现短读错误
write_at 写入失败 修复指定 offset 写入路径 避免 InnoDB 写入时报 I/O error
文件 offset 语义 区分 pread64/pwrite64 和普通读写 避免带 offset I/O 改变当前文件位置
mmap 兼容 修复 MariaDB 触发的 mmap 参数与映射路径 支持 MariaDB 初始化和 SQL 工作负载

Syscall 回归测试

测例 覆盖 syscall 测试内容
test-pread64 pread64 验证指定 offset 读取、返回长度、读取内容,以及不改变当前文件 offset
test-pwrite64 pwrite64 验证指定 offset 写入、返回长度、写入内容,以及不改变当前文件 offset
test-io-setup io_setup 验证 AIO context 创建、参数检查和 context id 写回
test-io-destroy io_destroy 验证 AIO context 销毁、重复销毁和非法 context 处理
test-io-submit io_submit 验证提交 AIO 请求、同步完成兼容读写请求,并生成完成事件
test-io-getevents io_getevents 验证获取完成事件、事件数量、结果值和 timeout 路径
test-io-pgetevents io_pgetevents 验证带 signal mask 参数的事件获取兼容路径
test-io-cancel io_cancel 验证取消请求的兼容返回和非法参数处理

MariaDB 覆盖场景

本 PR 中的 MariaDB app 用例覆盖以下真实数据库运行路径:

类别 覆盖内容
基础连接 SELECT 1、Unix socket 连接
DDL 建库、建表、索引、视图
DML INSERT / UPDATE / DELETE
查询 WHERE / ORDER BY / LIMIT / JOIN / GROUP BY
事务 COMMIT / ROLLBACK
临时对象 TEMPORARY TABLE
元数据 SHOW TABLES / DESCRIBE
持久化 重启后数据与视图验证
文件系统路径 direct I/O、pread64/pwrite64
内存映射 mmap 动态库与 InnoDB 映射路径
Linux AIO io_setup/io_submit/io_getevents 等兼容路径

MariaDB 16 组 SQL 测试

序号 测试主题 覆盖内容
1 基础查询 执行 SELECT 1,确认客户端可通过 Unix socket 连接服务端
2 建库建表 创建 starry_test 数据库和 InnoDB 表
3 多行插入 usersorders 表插入多行数据
4 全表查询 查询 usersorders,验证基础读路径
5 条件过滤与排序 使用 WHEREORDER BYLIMIT 查询用户数据
6 聚合查询 使用 COUNTSUMGROUP BY 统计订单
7 JOIN 查询 联合 usersorders,验证连接查询
8 UPDATE 更新 Alice 的城市字段,并查询确认
9 DELETE 删除 cancel 状态订单,并查询确认
10 COMMIT 事务 插入 Frank 和对应订单后提交,验证事务写入生效
11 ROLLBACK 事务 插入 RollbackUser 后回滚,验证数据不存在
12 二级索引 创建 idx_users_city,并通过 SHOW INDEX 检查
13 临时表 创建 temp_summary 临时表并查询聚合结果
14 视图 创建 paid_orders_view 并查询视图结果
15 元数据检查 执行 SHOW TABLESDESCRIBE usersDESCRIBE orders
16 重启持久化 重启 MariaDB 后验证行数、视图、更新结果、回滚结果和金额统计

验证结果

MariaDB app 测试

架构 测试命令 结果
x86_64 cargo xtask starry app run -t mariadb --arch x86_64
aarch64 cargo xtask starry app run -t mariadb --arch aarch64
riscv64 cargo xtask starry app run -t mariadb --arch riscv64
loongarch64 cargo xtask starry app run -t mariadb --arch loongarch64

备注:loongarch64 的 MariaDB app 测试因硬件适配原因暂未通过。

syscall 回归测试

架构 测试命令 结果
x86_64 cargo xtask starry test qemu --arch x86_64 -c syscall
aarch64 cargo xtask starry test qemu --arch aarch64 -c syscall
riscv64 cargo xtask starry test qemu --arch riscv64 -c syscall
loongarch64 cargo xtask starry test qemu --arch loongarch64 -c syscall

修改测例结构

1.因为 CI 频繁出错,移除了normal 文件夹下 prebuild.sh.将必要内容移动到对应的 main.c
2.将链接多线程库的方式改为直接链接

测试结果

经上述两点修改后,本地测试可正确编译并且通过

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用、mmap flag 兼容、prctl THP disable、riscv64 hwprobe、Direct I/O 短读写修复、loongarch64 内存配置以及 MariaDB app/normal 测试用例。整体实现方向正确,代码质量良好,cargo fmt --check 通过。但存在一个阻塞问题需要修复后才能合并。

阻塞问题:loongarch64 phys-memory-size 全局变更影响已有测试

axplat-loongarch64-qemu-virt/axconfig.tomlphys-memory-size 从 128M 改为 768M。这是一个全局平台配置,影响所有使用该平台 crate 的测试用例。当前 base 分支上存在多个使用 -m 128M(如 rust-hellogreputil-linuxpython-hello)和 -m 512M(如 smokebusyboxcoreutilssqlitesyscallbugfix)的 loongarch64 QEMU 配置。

phys_ram_ranges() 依据 PHYS_MEMORY_SIZE 计算高内存段大小(HIGH_MEMORY_SIZE = PHYS_MEMORY_SIZE - LOW_MEMORY_SIZE),新配置下会声明 [(0x0, 256M), (0x8000_0000, 512M)] 两段 RAM。当 QEMU 只提供 128M 或 512M 时,内核的 frame allocator 会尝试分配不存在的物理内存,导致启动崩溃或内存损坏。

建议修复方向(任选其一):

  1. phys-memory-size 恢复为原值 128M,MariaDB 测试通过 QEMU TOML 或 build config 中的机制单独覆盖
  2. 将所有已有 loongarch64 QEMU TOML 的 -m 参数统一提升到 768M
  3. 修改平台 crate 使 phys_ram_ranges() 从 FDT/ACPI 动态检测可用内存而非使用编译时常量

其他非阻塞观察

  1. sys_io_getevents 忽略 min_nr 阻塞语义:当 ready < min_nr 时,Linux 内核会阻塞直到满足最小事件数或超时。当前实现直接返回 ready。由于 io_submit 是同步完成的,所有事件在调用 io_getevents 时已经就绪,所以 MariaDB 使用场景下不会触发此问题。建议添加注释说明这一简化。

  2. MAP_SYNC 返回值语义:当前代码在检查 type bits 之前先检查 MAP_SYNC 并返回 EOPNOTSUPP。Linux 行为是:MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合 MAP_SHARED_VALIDATE 但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 的回退路径是正确的,但语义略有偏差。

  3. PR 描述中金额不一致:PR 描述中重启持久化检查表写的 paid 订单总金额为 5403.80,但实际脚本检查的值是 4504.80(39.90+199.00+59.00+19.90+3999.00+188.00)。建议更新描述。

  4. apps/starrytest-suit 两套脚本apps/starry/mariadb/mariadb-test.sh(305行)比 test-suit/starryos/normal/qemu-smp1/mariadb/sh/mariadb-test.sh(466行)简单很多,后者有超时/重试保护和 SQL 测试点计数。两者使用相同的 QEMU TOML 配置,功能上是重复的,但 app 端用于手动运行/演示,normal 端用于 CI 自动化,这在项目结构中是合理的。

验证状态

  • cargo fmt --check:通过
  • cargo xtask clippy:未在容器中运行(受限于编译环境),PR 声称已通过
  • QEMU 全架构 MariaDB 测试:PR 声称 x86_64/aarch64/riscv64/loongarch64 均通过,本地无法复现

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SHARED_VALIDATEriscv_hwprobePR_SET_THP_DISABLE 实现
  • 开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
  • 结论:本 PR 是独立的,无重复或冲突风险

Powered by glm-5.1

Comment thread components/axplat_crates/platforms/axplat-loongarch64-qemu-virt/axconfig.toml Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATEMAP_SYNCEOPNOTSUPP)、prctl THP disable、riscv64 riscv_hwprobe、Direct I/O 短读写修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。

前次 review(基于 commit 467343f1d)提出的阻塞问题已修复:loongarch64 全局平台配置不再被修改,改为在 QEMU TOML 中通过 axconfig_overrides 按 case 覆盖内存配置,不影响其他使用同一平台 crate 的测试。

整体实现方向正确,代码质量良好,cargo fmt --check 通过。

验证状态

  • cargo fmt --check:通过
  • QEMU 全架构 MariaDB 测试:PR 声称 x86_64/aarch64/riscv64/loongarch64 均通过,本地无法运行 QEMU 测试
  • axconfig_overrides 框架:新增单元测试 qemu_cases_with_axconfig_overrides_use_separate_build_groupsqemu_group_build_context_applies_case_axconfig_overrides 覆盖

重复/重叠分析

  • 基线分支:不存在 AIO、MAP_SYNC 处理、riscv_hwprobePR_SET_THP_DISABLE 实现
  • 开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
  • 结论:本 PR 是独立的,无重复或冲突风险

非阻塞观察

  1. sys_io_getevents 忽略 min_nr 阻塞语义:当 ready < min_nr 时 Linux 会阻塞,当前实现直接返回 ready。由于 io_submit 是同步完成的,所有事件在 io_getevents 调用时已就绪,MariaDB 场景不会触发此问题。建议添加注释说明这一简化设计决策。

  2. aarch64 syscall 测试内存变更(512M → 1024M)test-suit/starryos/normal/qemu-smp1/syscall/qemu-aarch64.toml 的内存从 512M 增至 1024M,与 MariaDB 无直接关系。若这是为了适配 AIO 上下文内存需求或有其他原因,建议在 commit message 或 PR 描述中说明。

  3. PR 描述中 loongarch64 修复说明需更新:描述中仍写的是修改 axconfig.toml 全局配置,但实际实现已改为通过 axconfig_overrides 按 case 覆盖,建议更新描述使之与代码一致。

Powered by glm-5.1

@mai-team-app
mai-team-app Bot requested review from ZCShou and luodeb May 23, 2026 15:41

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATEMAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现、Direct I/O 短读写修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。

前次 review 提出的 loongarch64 全局平台配置阻塞问题已修复:平台默认 phys-memory-size 保持 128M 不变,改为在 QEMU TOML 中通过 axconfig_overrides 按 case 单独覆盖,不影响其他使用同一平台 crate 的测试。实现方向正确,代码质量良好。

验证状态

  • cargo fmt --check:通过
  • axconfig_overrides 框架:新增单元测试 qemu_cases_with_axconfig_overrides_use_separate_build_groupsqemu_group_build_context_applies_case_axconfig_overrides 覆盖
  • QEMU 全架构 MariaDB 测试:PR 声称 x86_64/aarch64/riscv64/loongarch64 均通过

重复/重叠分析

  • 基线分支:不存在 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、riscv_hwprobePR_SET_THP_DISABLE 实现
  • 开放 PR:未发现相关重复或重叠 PR
  • 结论:本 PR 是独立的

代码审查要点

AIO 实现(io.rs,+284 行)AioManager + AioContext 结构清晰,采用全局 Mutex<BTreeMap> 管理 context,owner PID 校验防止跨进程访问。io_submit 同步执行 I/O 并入队完成事件,io_getevents 非阻塞简化已有注释说明。错误处理链完备。execute_aio_iocb 正确复用已有 sys_pread64/sys_pwrite64 等函数。

mmap flag(mmap.rsMAP_SYNC 优先检查并返回 EOPNOTSUPP,允许 MariaDB 正常回退到非 DAX 路径。MAP_SHARED_VALIDATE 作为合法 type bit 接受,语义与 MAP_SHARED 等价。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicBool 存储、SeqCst 排序,clone 时继承。简洁且符合 Linux 语义。

riscv_hwprobe(sys.rs:保守实现,对已知 key 返回 0 或 RISCV_HWPROBE_BASE_BEHAVIOR_IMA,未知 key 返回 -1。正确使用 UserPtr/UserConstPtr 验证用户态指针。cfg(target_arch = "riscv64") 门控正确。

Direct I/O 短读写修复(file.rsread_at 循环读取直到 buffer 满或 EOF;write_at 使用 2KB 栈缓冲逐 chunk 写入并处理短写。逻辑正确,无栈溢出风险。

axconfig_overrides 框架(qemu.rs/test.rs/case.rs:grouping key 扩展为 (PathBuf, Vec<String>),确保不同 override 的 case 生成独立 build group。新增 normalize_axconfig_overrides 校验空值。单元测试覆盖充分。

非阻塞观察

  1. MAP_SYNC 返回值语义:当前在检查 type bits 之前先检查 MAP_SYNC 返回 EOPNOTSUPP。Linux 行为是 MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,但语义略有偏差,后续可调整。

  2. sys_io_submit 持锁执行 I/Oio_submit 在持有 AIO_MANAGER Mutex 期间调用 execute_aio_iocb。当前同步实现下可接受,但若未来改为真正异步后端,需释放锁后再执行 I/O。

  3. apps/starry 与 test-suit 两套脚本:前者 305 行用于手动运行/演示,后者 403 行含 SQL 特征标记和 75 点计数用于 CI 自动化。功能定位不同,项目结构中合理。

整体代码质量好,实现方向正确,建议合并。

Powered by glm-5.1

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用、mmap flag 兼容(MAP_SHARED_VALIDATEMAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现、Direct I/O 短读写修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。

实现方向正确,代码质量良好。前三次 review(已 APPROVE)所基于的 commit 均无语法问题,但最新 commit 2e3862f 是一个 merge commit(Merge branch 'dev' into feat/MariaDB),合并时对两个文件的冲突解决不正确,导致代码无法通过语法解析和 cargo fmt --check

阻塞问题:merge 冲突解决不正确导致代码无法编译

1. os/StarryOS/kernel/src/task/mod.rsset_thp_disabled 缺少闭合 }

ProcessData::set_thp_disabled 函数(PR 新增)在 merge 后被放在了 impl ProcessData 块的末尾,紧邻 dev 分支新增的 is_job_stopped 等 job-control 方法。但 merge 时遗漏了 set_thp_disabled 的函数体闭合大括号 },导致函数的 { 从未闭合,后续所有代码(包括 is_job_stoppedset_job_stopped 等)都变成了嵌套在未闭合块内的无效代码。cargo fmt 报错:

unclosed delimiter ... impl ProcessData { ... set_thp_disabled ...

修复:在 self.thp_disabled.store(disabled, Ordering::SeqCst); 之后添加 }

    pub fn set_thp_disabled(&self, disabled: bool) {
        self.thp_disabled.store(disabled, Ordering::SeqCst);
    }

2. os/arceos/modules/axfs-ng/src/highlevel/file.rswrite_at Direct 分支含重复/残留代码

FileBackend::write_atDirect 分支中,同时出现了旧的栈缓冲逐 chunk 写入循环(let mut buf = [0; ax_io::DEFAULT_BUF_SIZE]; while !src.is_empty() { ... while chunk_written < read { ...)和 dev 分支重构后的 IoBuf 流式写入循环(while src.remaining() > 0 { let written = match src.write_to(...))。两个代码块交错在一起,旧的 while chunk_written < read 循环没有正确闭合就直接开始了新的 while src.remaining() > 0 循环,导致语法错误。

修复:只保留 dev 分支的 IoBuf 流式实现(带短写循环的版本),移除旧的栈缓冲代码块。正确版本参考 read_atDirect 分支模式:

Self::Direct(loc) => {
    let mut total = 0;
    while src.remaining() > 0 {
        let chunk = src.remaining().min(ax_io::DEFAULT_BUF_SIZE);
        let written = match src.write_to(&mut ax_io::write_fn(|buf| {
            loc.entry()
                .as_file()?
                .write_at(buf, offset)
                .inspect(|written| {
                    offset += *written as u64;
                })
        })) {
            Ok(written) => written,
            Err(VfsError::WouldBlock) if total > 0 => break,
            Err(err) => return Err(err),
        };
        if written == 0 {
            break;
        }
        total += written;
        if written < chunk {
            break;
        }
    }
    Ok(total)
}

CI 状态

  • Check formatting / run_host失败 — 因为上述两个文件无法解析,cargo fmt --check 报错退出
  • 其他 CI job(sync-lint、container publish 等)被 skip 或 cancel
  • 此次 CI 失败与本 PR 直接相关(merge 冲突解决错误是 PR 自身引入的)

重复/重叠分析

  • 基线分支:不存在 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、riscv_hwprobePR_SET_THP_DISABLE 实现
  • 当前开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
  • 结论:本 PR 是独立的,无重复或冲突风险

其它非阻塞观察

  1. sys_io_getevents 忽略 min_nr 阻塞语义:当 ready < min_nr 时 Linux 会阻塞,当前实现直接返回 ready。由于 io_submit 同步完成,MariaDB 场景下事件已就绪,暂不触发此问题。代码中已有注释说明此简化设计,合理。

  2. sys_io_submit 持锁执行 I/Oio_submit 在持有 AIO_MANAGER Mutex 期间调用 execute_aio_iocb。当前同步实现可接受,但若未来改为异步后端需释放锁后再执行。

  3. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 并返回 EOPNOTSUPP。Linux 行为是:未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,但语义略有偏差,后续可调整。

  4. PR 描述中 loongarch64 修复说明需更新:描述中仍提及修改 axconfig.toml 全局配置,但实际实现已改为通过 axconfig_overrides 按 case 覆盖,建议更新描述使之与代码一致。

  5. apps/starry 与 test-suit 两套脚本:前者 305 行用于手动运行/演示,后者含超时/重试和 75 点 SQL 计数用于 CI。功能定位不同,项目结构中合理。

修复建议

修复上述两个 merge 冲突后,重新运行:

cargo fmt --check
cargo xtask clippy --package starry-kernel

确认通过后 force-push 更新 PR 分支(或重新 merge dev 并正确解决冲突)。由于先前的三次 review 均已 APPROVE,修复 merge 冲突后即可合并。

Powered by deepseek-v4-pro

Comment thread os/StarryOS/kernel/src/task/mod.rs
Comment thread os/arceos/modules/axfs-ng/src/highlevel/file.rs Outdated

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现、Direct I/O 短读写修复、IoBuf slice 消费语义修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。

前次阻塞问题修复确认

前次 review(基于 commit 2e3862f)提出的两个 merge 冲突解决错误已在当前 head b86e537 中修复:

  1. set_thp_disabled 缺少闭合大括号:当前代码中函数已正确闭合,cargo fmt --check 通过。
  2. write_at Direct 分支残留代码:当前代码已移除旧的栈缓冲逐 chunk 循环,只保留了 IoBuf 流式实现,与 read_at 的 Direct 分支模式一致。

4 条历史 review thread 已全部 resolve:loongarch64 phys-memory-size(已通过 axconfig_overrides 按 case 覆盖)、io_getevents 阻塞语义(已添加注释说明)、set_thp_disabled 闭合(已修复)、write_at 冲突残留(已修复)。

验证状态

  • cargo fmt --check:✅ 通过(本地工作树验证)
  • CI 状态:所有 job 为 skipped(fork PR 需审批触发),无可归因于本 PR 的 CI 失败
  • 历史 CI(commit 2e3862f)的 Check formatting 失败已在当前 head 修复
  • PR 作者声明 cargo test -p axbuildcargo test -p ax-io --test iobuf 通过
  • QEMU 全架构 MariaDB 测试:作者声明 x86_64/aarch64/riscv64 均通过

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、riscv_hwprobePR_SET_THP_DISABLE 实现
  • 当前开放 PR(#923#847 等):均与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复无关
  • 结论:本 PR 是独立的,无重复或冲突风险

代码审查要点

AIO 实现(io.rs,+284 行)AioManager + AioContext 结构清晰,采用全局 Mutex<BTreeMap> 管理 context,owner PID 校验防止跨进程访问。io_submit 同步执行 I/O 并入队完成事件,io_getevents 非阻塞简化已有注释说明。execute_aio_iocb 正确复用已有 sys_pread64/sys_pwrite64 等函数。IOCB 结构体使用 bytemuck::AnyBitPattern 确保安全读取用户态数据。

mmap flag(mmap.rsMAP_SYNC 优先检查并返回 EOPNOTSUPP,允许 MariaDB 正常回退。MAP_SHARED_VALIDATE 作为合法 type bit 接受,与 MAP_SHARED 语义等价。type bits 校验逻辑独立于 SYNC 检查,语义清晰。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicBool 存储、SeqCst 排序,clone 时通过 child_proc_data.set_thp_disabled(self.proc_data.thp_disabled()) 继承。简洁且符合 Linux 语义。

riscv_hwprobe(sys.rs:保守实现,对已知 key 返回 0 或 RISCV_HWPROBE_BASE_BEHAVIOR_IMA,未知 key 返回 -1。正确使用 UserPtr/UserConstPtr 验证用户态指针。cfg(target_arch = "riscv64") 门控正确。

Direct I/O 短读写修复(file.rsread_at 循环读取直到 buffer 满或 EOF/0 返回;write_at 使用 IoBuf 流式写入,逐 chunk 处理短写。逻辑正确。

IoBuf 消费语义(ext.rswrite_toself = &self[written..] 推进 slice;read_from*self = rest 推进。新增断言验证 remaining() == 0

axconfig_overrides 框架:grouping key 扩展为 (PathBuf, Vec<String>),确保不同 override 的 case 生成独立 build group。单元测试覆盖充分。

apps/starry 与 test-suit 两套脚本apps/starry/mariadb/ 含 317 行脚本用于手动运行/演示;test-suit/starryos/normal/qemu-smp1/mariadb/sh/ 含超时/重试和 75 点 SQL 计数用于 CI 自动化。功能定位不同,项目结构中合理。

非阻塞观察

  1. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 并返回 EOPNOTSUPP。Linux 行为是:MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整以提高对齐度。

  2. io_submit 持锁执行 I/Oio_submit 在持有 AIO_MANAGER Mutex 期间调用 execute_aio_iocb。当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行 I/O。

  3. PR 描述中 loongarch64 修复说明需更新:描述中表 10 仍提及修改 axconfig.toml 全局配置,但实际实现已改为通过 axconfig_overrides 按 case 覆盖。建议更新描述使之与代码一致。

整体代码质量好,实现方向正确,前次阻塞问题已全部修复,建议合并。

Powered by deepseek-v4-pro

Comment thread os/StarryOS/kernel/src/syscall/sys.rs
Comment thread os/StarryOS/kernel/src/syscall/sys.rs
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/io.rs Outdated
Comment thread scripts/axbuild/src/arceos/test.rs Outdated

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(拆分到独立 aio.rs)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现(恢复 IMA_FD/IMA_C/MISALIGNED_* 常量)、Direct I/O 短读写修复、IoBuf slice 消费语义修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。

最新提交 ebd5d93 改进确认

  1. AIO 代码拆分:AIO 系统调用从 io.rs 抽离到独立 aio.rs 模块(330 行),结构清晰,mod.rs 中正确 pub use self::aio::*
  2. 命名规范化AioIocbIocbAioEventEventAioContextContextAioManagerManagerAIO_MANAGERMANAGER,移除了冗余的 aio_/Aio 前缀
  3. 注释补充:每个公开函数和关键结构体都有说明注释,sys_io_getevents 中已注明同步完成的简化设计
  4. riscv_hwprobe 常量恢复RISCV_HWPROBE_IMA_FDRISCV_HWPROBE_IMA_CRISCV_HWPROBE_KEY_MISALIGNED_* 已恢复,IMA_EXT_0 现在正确返回 FD|CMISALIGNED_* 返回 MISALIGNED_UNKNOWN(0)
  5. axconfig_overrides 重构:从 TestQemuCase 移到 StarryQemuCasePreparedStarryQemuCase,ArceOS 不再继承 Starry 特有的 override 机制
  6. cargo fmt --check 通过

前次阻塞问题全部修复

  • loongarch64 phys-memory-size 全局变更 → 已改为 axconfig_overrides 按 case 覆盖
  • set_thp_disabled 缺少闭合 } → 已修复
  • write_at Direct 分支 merge 冲突残留 → 已修复
  • AIO 代码混在 io.rs 中 → 已拆分
  • aio_/Aio 前缀冗余 → 已规范化

代码审查要点

AIO 实现(aio.rs,330 行)Manager + Context 结构清晰,Mutex<BTreeMap> 管理 context,owner PID 校验防止跨进程访问。io_submit 同步执行 I/O 并入队完成事件,io_getevents 非阻塞简化已有注释。Iocb/Event 结构体布局与 Linux ABI 一致(64/32 字节)。execute_iocb 正确复用已有 sys_pread64/sys_pwrite64 等函数,validate_rwf_flags 共享 RWF 策略。

mmap flag(mmap.rsMAP_SYNC 优先检查返回 EOPNOTSUPPMAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicBool + SeqCst,clone 继承,参数校验严格。简洁且符合 Linux 语义。

riscv_hwprobe(sys.rs:保守实现,对已知 key 返回合理值(IMA_EXT_0FD|CMISALIGNED_* → 0),未知 key 标记为 -1。新增 ZICBOZ_BLOCK_SIZE/HIGHEST_VIRT_ADDRESS/TIME_CSR_FREQ 常量。

Direct I/O 短读写修复(file.rsread_at/write_at 的 Direct 分支循环处理短读写。IoBuf 流式实现正确。

IoBuf 消费语义(ext.rswrite_to/read_from 后正确推进 slice,新增 remaining()==0 断言。

非阻塞观察

  1. commit message 拼写ebd5d93 的 commit message 中 "annodations" 应为 "annotations",不影响功能但建议后续注意

  2. PR 描述中金额不一致:PR 描述重启持久化检查表写的 paid 订单总金额为 5403.80,但实际脚本检查的值是 4504.80(39.90+199.00+59.00+19.90+3999.00+188.00),建议更新描述

  3. io_submit 持锁执行 I/O:当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行

  4. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 返回 EOPNOTSUPP。Linux 行为是 MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整对齐

  5. apps/starry 与 test-suit 两套脚本:前者 317 行用于手动运行,后者 403 行含超时/重试和 SQL 计数用于 CI。定位不同,结构合理

验证状态

  • cargo fmt --check:✅ 通过
  • CI:fork PR 需审批触发,无可归因于本 PR 的失败
  • PR 作者声称 cargo test -p axbuildcargo test -p ax-io --test iobuf、x86_64/aarch64/riscv64 QEMU MariaDB 测试均通过

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATEriscv_hwprobePR_SET_THP_DISABLE 实现
  • 开放 PR:未发现相关重复或重叠 PR
  • 结论:本 PR 是独立的

整体代码质量好,实现方向正确,前次所有阻塞问题已修复,建议合并。

Powered by glm-5.1

Comment thread os/StarryOS/kernel/src/syscall/fs/aio.rs Outdated
Comment thread os/StarryOS/kernel/src/syscall/fs/aio.rs Outdated
@ZCShou
ZCShou removed their request for review May 27, 2026 04:23
Comment thread test-suit/starryos/normal/qemu-smp1/mariadb/sh/mariadb-test.sh Outdated
Comment thread scripts/axbuild/src/test/qemu.rs

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。

实现方向正确,代码质量良好cargo fmt --check 通过。AIO 模块结构清晰(Manager + Context,全局 RwLock<BTreeMap>),进程隔离通过 owner PID 校验。Syscall 测试覆盖全面,使用 test_framework.h 标准宏。

但当前 head 存在阻塞问题,需要修复后才能合并。

阻塞问题:与 origin/dev 存在合并冲突

当前 PR head bda2e743forigin/dev 合并时有 4 个文件冲突:

  1. Cargo.lock:两侧依赖版本变更,可自动重新生成
  2. apps/starry/README.md:PR 添加 ## MariaDB 段,base 添加 ## GDB Smoke 段,需保留两侧
  3. os/StarryOS/kernel/src/syscall/mod.rs:PR 添加 AIO syscall 分发(io_setup/io_destroy/io_submit/io_getevents/io_pgetevents/io_cancel),base 添加 process_vm_readv/process_vm_writev,需保留两侧
  4. os/StarryOS/kernel/src/syscall/task/ctl.rs:PR 添加 PR_THP_DISABLE_EXCEPT_ADVISED 常量,base 添加 PERSONALITY_GET 常量,需保留两侧

所有冲突都是纯新增代码冲突,语义上互不干扰。建议合并/rebase 最新 origin/dev 并正确解决冲突。

阻塞问题:ZR233 的 CHANGES_REQUESTED 未解决

ZR233(项目成员)于 2026-05-27 提交了 CHANGES_REQUESTED review(commit ebd5d93),但未留下具体评论。该 review 仍然有效,需要作者与 ZR233 沟通确认阻塞原因并解决。

Direct I/O 修复验证

read_at Direct 分支:移除了 WouldBlock 短路和 read < chunk 短读退出条件,改为循环读取直到 buffer 满或 EOF。write_at Direct 分支:从 IoBuf 流式实现改为栈缓冲逐 chunk 写入并处理短写。两者语义上是正确的 Direct I/O 修复,保证 InnoDB 的完整读写需求。

验证状态

  • cargo fmt --check:✅ 通过(本地工作树验证)
  • CI:fork PR 需审批触发,当前无可归因 CI 失败
  • 作者声称的 QEMU 验证:x86_64/aarch64/riscv64 MariaDB 测试通过,4 架构 syscall 测试通过
  • 本地无法运行 QEMU 验证(容器环境限制),无法独立确认 MariaDB app 测试结果

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATEPR_SET_THP_DISABLE 实现
  • 开放 PR:PR #1006(llama.cpp,无关)、PR #1007(page reclaim,修改 file.rs 不同函数,无冲突)、PR #1009(lockdep,无关)
  • 结论:本 PR 独立,无重复或冲突风险

非阻塞观察

  1. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 返回 EOPNOTSUPP。Linux 行为是未配合 MAP_SHARED_VALIDATE 时返回 EINVAL。当前实现对 MariaDB 回退路径正确,后续可调整。
  2. io_submit 持锁执行 I/O:在持有 AIO_CONTEXTS 读锁期间调用 execute_iocb。当前同步实现下可接受,未来改为异步需重构。
  3. AIO sys_io_getevents 简化:当前非阻塞返回已完成事件,不满足 min_nr 阻塞语义。注释已说明设计决策。

修复建议

  1. 合并/rebase 最新 origin/dev,正确解决 4 个文件的冲突
  2. 与 ZR233 沟通确认 CHANGES_REQUESTED 的具体原因
  3. 解决冲突后重新运行 cargo fmt --check 和 QEMU 测试

Powered by glm-5.1

Powered by mimo-v2.5-pro

Comment thread os/StarryOS/kernel/src/syscall/task/ctl.rs
Comment thread os/StarryOS/kernel/src/syscall/mod.rs

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、8 个 syscall 回归测试以及 MariaDB app 用例。

cargo fmt --check 通过,代码逻辑实现方向正确。但当前 head bda2e743f 存在阻塞问题,需修复后才能合并。

阻塞问题 1:与 origin/dev 存在 4 个文件合并冲突

当前 PR head 与 origin/dev 合并时有 4 个文件冲突:

  1. Cargo.lock:两侧依赖版本变更,可通过 cargo update 重新生成
  2. apps/starry/README.md:PR 添加 ## MariaDB 段,base 添加 ## GDB Smoke 段,需保留两侧
  3. os/StarryOS/kernel/src/syscall/mod.rs:PR 添加 AIO syscall 分发,base 添加 process_vm_readv/process_vm_writev,需保留两侧
  4. os/StarryOS/kernel/src/syscall/task/ctl.rs:PR 添加 PR_THP_DISABLE_EXCEPT_ADVISED 常量,base 添加 PERSONALITY_GET 常量,需保留两侧

所有冲突都是纯新增代码冲突,语义上互不干扰。请 merge/rebase 最新 origin/dev 并正确解决冲突后 force-push。

阻塞问题 2:ZR233 的 CHANGES_REQUESTED 未解决

项目成员 ZR233 于 2026-05-27 提交了 CHANGES_REQUESTED review(commit ebd5d93),但未留下具体评论或行内批注。该 review 仍然有效,请与 ZR233 沟通确认阻塞原因并解决。

代码审查要点

AIO 实现(aio.rsManager + Context 结构清晰,RwLock<BTreeMap> 管理 context,owner PID 校验防止跨进程访问。io_submit 同步执行 I/O 并入队完成事件,io_getevents 非阻塞简化已有注释说明。Iocb/Event 结构体布局与 Linux ABI 一致。execute_iocb 正确复用 sys_pread64/sys_pwrite64 等函数。

mmap flag(mmap.rsMAP_SYNC 优先检查返回 EOPNOTSUPP,允许 MariaDB 回退。MAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicU32 + SeqCst,clone 继承,参数校验严格。

Direct I/O(file.rsread_at/write_at Direct 分支循环处理短读写,逻辑正确。

Syscall 回归测试:8 个新测试(test-io-setup/destroy/submit/getevents/pgetevents/canceltest-pread64test-pwrite64),结构正确(CMakeLists.txt 安装到 usr/bin/starry-test-suit),可被 qemu-x86_64.toml 的 test_commands 自动发现和运行。

验证状态

  • cargo fmt --check:✅ 通过(本容器工作树验证)
  • CI:fork PR 需审批触发,无可归因于本 PR 的 CI 失败
  • QEMU 全架构 MariaDB 测试:作者声明 x86_64/aarch64/riscv64 均通过(本地无法运行 QEMU 测试验证)

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATEPR_SET_THP_DISABLE 实现
  • 开放 PR:#1009(lockdep 修复)、#1007(page reclaim)均与本 PR 无关
  • 结论:本 PR 独立,无重复或冲突风险

非阻塞观察

  1. MAP_SYNC 返回值语义:Linux 中 MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL,配合但不支持 DAX 时返回 EOPNOTSUPP。当前实现在 type bits 检查前直接返回 EOPNOTSUPP,对 MariaDB 回退路径正确但语义略有偏差。
  2. io_submit 持锁执行 I/O:当前同步实现下可接受,若未来改为异步后端需释放锁后再执行。
  3. apps/starry/mariadbtest-suit/.../syscall 测试放置:app 用例在 apps/starry,syscall 回归在 test-suit/starryos/normal/qemu-smp1/syscall,符合项目规范。

Powered by deepseek-v4-pro

Powered by mimo-v2.5-pro

@mai-team-app
mai-team-app Bot requested review from luodeb and yfblock May 28, 2026 09:42
@Alayfolk64
Alayfolk64 requested a review from ZR233 May 28, 2026 10:12

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。

实现方向正确,代码质量良好。

本地 QEMU 验证结果

测试项 架构 结果
cargo xtask starry app run -t mariadb x86_64 PASSED(16/16 stage 全部通过,含建表、插入、查询、JOIN、聚合、事务、回滚、索引、临时表、视图、重启持久化)
cargo xtask starry test qemu -c syscall x86_64 PASSED(含新增的 pread64、pwrite64、io-setup、io-destroy、io-submit、io-getevents、io-pgetevents、io-cancel 测例)
cargo fmt --check - ✅ 通过
与 origin/dev 合并 - ✅ 无冲突(Already up to date

MariaDB app 测试 QEMU 输出关键确认:

  • 所有 16 个 SQL 测试阶段(schema → insert → select-all → filter-order-limit → aggregate → join → update → delete → commit → rollback → index → temporary-table → view → show-schema → final-statistics → restart-persistence)全部 MARIADB_STAGE_PASSED
  • InnoDB 日志无 I/O 错误(check_innodb_log 通过)
  • 重启后数据持久化验证通过
  • 最终匹配成功模式 MARIADB_TEST_PASSED 并退出码 0

前次 Review 问题修复确认

前 7 轮 review 的所有阻塞问题已在当前 head b709325d 中修复:

  1. ✅ loongarch64 phys-memory-size 全局变更 → 已改为 axconfig_overrides 按 case 覆盖
  2. set_thp_disabled 缺少闭合 } → 已修复(当前使用 AtomicU32 + thp_disable 命名)
  3. write_at Direct 分支 merge 冲突残留 → 已修复为栈缓冲逐 chunk 写入
  4. ✅ AIO 代码混在 io.rs → 已拆分到独立 aio.rs
  5. aio_/Aio 前缀冗余 → 已规范化
  6. ✅ luodeb 建议的注释补充 → 已添加
  7. ✅ 与 origin/dev 的 merge 冲突 → 已通过 merge commit 解决

代码审查要点

AIO 实现(aio.rsRwLock<BTreeMap> 管理 context,PID 隔离。io_submit 同步执行 I/O 并入队完成事件。Iocb/IoEvent 结构体布局与 Linux ABI 一致(64/32 字节)。execute_iocb 正确复用 sys_pread64/sys_pwrite64 等。

mmap(mmap.rsMAP_SYNC 优先返回 EOPNOTSUPP,允许 MariaDB 回退。MAP_SHARED_VALIDATE(0x03) 作为合法 type bit 接受。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicU32 存储、SeqCst 排序、clone 继承。

Direct I/O(file.rsread_at/write_at 循环处理短读写,逻辑正确。

非阻塞观察

  1. sys_io_getevents 忽略 min_nr 阻塞语义:由于 io_submit 同步完成,事件已就绪,MariaDB 场景不会触发。代码中已有注释说明,合理。
  2. MAP_SYNC 返回值语义:Linux 中未配合 MAP_SHARED_VALIDATE 时应返回 EINVAL,当前统一返回 EOPNOTSUPP,对 MariaDB 回退路径正确。
  3. PR 描述中金额不一致:重启持久化检查表 paid 订单总金额写为 5403.80,实际脚本检查 4504.80,建议更新。

ZR233 的 CHANGES_REQUESTED

ZR233 于 2026-05-27 提交了 CHANGES_REQUESTED(commit ebd5d93),review body 为空且无 inline 评论。当前 head b709325d 已通过 merge commit 解决了与 dev 的冲突,代码已修复所有历史问题,本地验证全部通过。建议作者与 ZR233 确认是否有未覆盖的顾虑。

整体代码质量好,实现方向正确,本地 QEMU 验证 MariaDB app 和 syscall 测试全部通过,建议合并。

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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。

实现方向正确,代码质量良好。 cargo fmt --checkcargo xtask clippy --package starry-kernel(13 个 feature 组合)均通过。与 origin/dev 无合并冲突。

验证状态

验证项 结果
cargo fmt --check ✅ 通过
cargo xtask clippy --package starry-kernel (13 features) ✅ 全部通过
cargo test -p ax-io --test iobuf ✅ 12/12 通过
cargo test -p axbuild ✅ 410/410 通过
cargo xtask starry test qemu --arch x86_64 -c syscall ✅ 通过(含 6 个 AIO 测试 + pread64/pwrite64)
cargo xtask starry test qemu --arch x86_64 -c bugfix ⚠️ 已有的 bug-tty-cursor-report 超时(360s),与本 PR 无关
MariaDB app QEMU 测试 作者声明 x86_64/aarch64/riscv64 通过,loongarch64 因硬件原因未通过

:MariaDB app 测试需要 apk add mariadb 安装包和网络访问(timeout 1800s),本地容器环境无法运行该测试。作者在 PR 描述中声明的验证结果可作为参考。

代码审查要点

AIO 实现(aio.rs,366 行)

  • 使用 RwLock<BTreeMap> 管理 context,io_submit 执行 I/O 时不持锁,仅在 enqueue_event 时短暂获取写锁,避免了并发瓶颈
  • 进程隔离通过 owner PID 校验,防止跨进程访问 AIO context
  • execute_iocb 正确复用 sys_pread64/sys_pwrite64/sys_fsync/sys_fdatasync/sys_preadv2/sys_pwritev2
  • io_getevents 非阻塞实现,代码中已注释说明同步完成的简化设计
  • IOCB_FLAG_RESFD 支持 eventfd 通知,使用 best-effort 模式

mmap flag(mmap.rs

  • MAP_SYNC 优先检查返回 EOPNOTSUPP,允许 MariaDB 正常回退到非 DAX 路径
  • MAP_SHARED_VALIDATE(type bits 0x03)作为合法 type bit 接受,走 MAP_SHARED 路径

prctl THP(ctl.rs/clone.rs/mod.rs

  • AtomicU32 存储 thp_disable 状态,SeqCst 排序
  • clone 时通过 proc_data.set_thp_disable(old_proc_data.thp_disable()) 正确继承
  • PR_SET_THP_DISABLE 参数校验严格,PR_THP_DISABLE_EXCEPT_ADVISED 常量支持正确

Direct I/O 短读写修复(file.rs

  • read_at Direct 分支:循环直到 dst.is_full()read == 0,确保完整读取
  • write_at Direct 分支:使用 2KB 栈缓冲区逐 chunk 写入,内层循环处理短写,逻辑正确

syscall 回归测试(6 个 AIO 测试 + 2 个 bugfix 测试)

  • test-io-setup/test-io-destroy/test-io-submit/test-io-getevents/test-io-pgetevents/test-io-cancel 覆盖 AIO 主要路径
  • bug-pread64-read-at/bug-pwrite64-write-at 验证 Direct I/O 修复
  • 使用 test_framework.h 标准宏,测试结构一致

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、PR_SET_THP_DISABLE 实现。riscv_hwprobe 已通过 PR #843 合并到 dev,本 PR 不再包含该功能。
  • 开放 PR:#1014(nginx CI)、#1015(cgroup2 hierarchy)等均与本 PR 无关
  • 结论:本 PR 是独立的,无重复或冲突风险

关于 ZR233 的 CHANGES_REQUESTED

ZR233 于 2026-05-27 对 commit ebd5d93 提交了 CHANGES_REQUESTED,但未留下具体评论或 inline comment。当前 head 6a03362 已更新(新增 commit 移动 pread64/pwrite64 测试到 bugfix 目录)。建议作者与 ZR233 沟通确认阻塞原因。如果 ZR233 的 concern 已在后续 commit 中解决,请 ZR233 更新 review 状态。

非阻塞观察

  1. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 返回 EOPNOTSUPP。Linux 行为是未配合 MAP_SHARED_VALIDATE 时返回 EINVAL。当前实现对 MariaDB 回退路径正确,后续可调整对齐。

  2. io_submit 逐个 enqueue_event 每次获取写锁:当前同步实现下可接受,若未来改为真正异步后端可优化为批量写入。

  3. apps/starry 与 test-suit 两套 MariaDB 脚本:前者用于手动运行/演示,后者含超时/重试和 SQL 计数用于 CI。功能定位不同,结构合理。

  4. bugfix QEMU 测试超时bug-tty-cursor-report 在本地容器中 360s 超时,这是已有测试的问题,与本 PR 无关。

整体代码质量好,实现方向正确,前次所有阻塞问题已修复,建议合并(需 ZR233 更新 review 状态)。

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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。

实现方向正确,代码质量良好cargo fmt --check 通过。AIO 模块结构清晰(AioManager + AioContext,全局 RwLock<BTreeMap>),进程隔离通过 owner PID 校验。Syscall 测试覆盖全面,使用 test_framework.h 标准宏。AIO 测试通过 syscall TOML 的 /usr/bin/starry-test-suit/* 自动发现机制正确接入,pread64/pwrite64 bugfix 测试已在 bugfix TOML 的 test_commands 中显式列出。

但当前 head 存在阻塞问题,需要修复后才能合并。

阻塞问题:与 origin/dev 存在合并冲突

当前 PR head 5ec3b8a2borigin/dev 合并时有 1 个文件冲突:

  1. test-suit/starryos/normal/qemu-smp1/syscall/test-raw-msg-peek/c/prebuild.sh:PR 删除了此文件(清理不必要的 prebuild.sh),base 对其进行了修改。这是 modify/delete 冲突。由于 PR 的意图是移除不必要的 prebuild.sh,正确解决方向是保留删除(即接受 PR 的变更)。

建议作者 merge/rebase 最新 origin/dev 并正确解决此冲突。由于 maintainer_can_modify=true,维护者也可以协助推送修复。

ZR233 的 CHANGES_REQUESTED 未明确说明

ZR233(项目成员)于 2026-05-27 提交了 CHANGES_REQUESTED review(commit ebd5d93),但未留下具体评论。该 review 仍然有效,需要作者与 ZR233 沟通确认阻塞原因并解决。

代码审查要点

AIO 实现(aio.rs,366 行)AioContext + 全局 RwLock<BTreeMap> 管理,owner PID 校验防止跨进程访问。io_submit 同步执行 I/O 并入队完成事件,io_getevents 非阻塞简化已有注释说明。execute_iocb 正确复用 sys_pread64/sys_pwrite64 等函数。IOCB/Event 结构体 layout 与 Linux ABI 一致(64/32 字节)。

mmap flag(mmap.rsMAP_SYNC 优先检查返回 EOPNOTSUPPMAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicU32 存储、SeqCst 排序,clone 时通过 set_thp_disable(old.thp_disable()) 继承。简洁且符合 Linux 语义。

Direct I/O 短读写修复(file.rsread_at/write_at 的 Direct 分支循环处理短读写,IoBuf 流式实现正确。

非阻塞观察

  1. sys_io_getevents 忽略 min_nr 阻塞语义:当 ready < min_nr 时 Linux 会阻塞,当前实现直接返回 ready。由于 io_submit 同步完成,MariaDB 场景下事件已就绪,暂不触发此问题。代码中已有注释说明此简化设计,合理。

  2. io_submit 持锁执行 I/O:当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行。

  3. MAP_SYNC 返回值语义:当前在检查 type bits 前先检查 MAP_SYNC 返回 EOPNOTSUPP。Linux 行为是 MAP_SYNC 未配合 MAP_SHARED_VALIDATE 时返回 EINVAL;配合但文件系统不支持 DAX 时返回 EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整对齐。

  4. PR 描述中金额不一致:描述中 paid 订单总金额写的是 5403.80,但实际脚本检查的值是 4504.80(39.90+199.00+59.00+19.90+3999.00+188.00),建议更新描述。

验证状态

  • cargo fmt --check:✅ 通过
  • CI 状态:fork PR 需审批触发,无可归因于本 PR 的 CI 失败
  • QEMU MariaDB 测试:作者声明 x86_64/aarch64/riscv64 均通过(loongarch64 因硬件适配暂未通过),本地容器无法运行 QEMU 测试
  • Syscall 回归测试:作者声明全架构通过,测试通过自动发现机制正确接入

重复/重叠分析

  • 基线分支:无已存在的 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、PR_SET_THP_DISABLE 实现
  • 当前开放 PR:未发现与 AIO、mmap flag、prctl THP、MariaDB 或 Direct I/O 修复相关的重复或重叠 PR
  • 结论:本 PR 是独立的,无重复或冲突风险

修复建议

修复 merge 冲突后,重新验证:

cargo fmt --check

确认通过后推送更新 PR 分支。由于前次多次 review 已 APPROVE,修复冲突后即可合并。

Powered by mimo-v2.5-pro

@Alayfolk64

Copy link
Copy Markdown
Contributor Author

All has fixed and changed.

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。

实现方向正确,代码质量良好。

当前 head 2d179ea3 确认

当前 head 与 origin/dev 无合并冲突。cargo fmt --check 通过。

厍史 review 回顾

  • 前 7 次 review(4 次 APPROVE、3 次 CHANGES_REQUESTED)提出的阻塞问题已全部修复:
    • loongarch64 phys-memory-size 全局变更 → 已改为按 case 覆盖
    • set_thp_disabled 闭合大括号缺失 → 已修复(现为 set_thp_disable,类型为 AtomicU32
    • write_at Direct 分支 merge 冲突残留 → 已修复
    • AIO 代码混在 io.rs 中 → 已拆分到独立 aio.rs
    • aio_/Aio 前缀冗余 → 已规范化
  • ZR233 于 2026-05-27 提交的 CHANGES_REQUESTED review(commit ebd5d93)未留下评论。作者已推送新 commit(head 2d179ea3)并声明问题已修复。
  • luodeb 的 inline 评论(aio 模块拆分、命名规范化、注释补充)已在当前代码中全部落实。

QEMU 实际运行验证结果

在本审查环境中实际运行了 x86_64 MariaDB app 测试:

cargo xtask starry app run -t mariadb --arch x86_64

全部 16 个 SQL 测试阶段均通过

阶段 内容 结果
1/16 schema(建库建表)
2/16 insert(多行插入)
3/16 select-all(全表查询)
4/16 filter-order-limit(条件过滤排序)
5/16 aggregate(聚合查询)
6/16 join-query(连接查询)
7/16 update(更新)
8/16 delete(删除)
9/16 commit(事务提交)
10/16 rollback(事务回滚)
11/16 index(二级索引)
12/16 temporary-table(临时表)
13/16 view(视图)
14/16 show-schema(元数据检查)
15/16 final-statistics(最终统计)
16/16 restart-persistence(重启持久化)

MariaDB 在 QEMU 中成功安装、初始化、运行全部 SQL 工作负载并验证重启后数据持久化。

代码审查要点

AIO 实现(aio.rs,366 行):使用 RwLock<BTreeMap> 管理 context,进程隔离通过 owner PID 校验。io_submit 同步执行 I/O 并入队完成事件。IOCB_FLAG_RESFD 支持 eventfd 通知。Iocb/IoEvent 结构体布局与 Linux ABI 一致。execute_iocb 正确复用已有 sys_pread64/sys_pwrite64 等函数。

prctl THP(ctl.rs/mod.rs/clone.rsAtomicU32 存储,SeqCst 排序。PR_SET_THP_DISABLE 支持 PR_THP_DISABLE_EXCEPT_ADVISED 标志位。clone 时通过 set_thp_disable(old_proc_data.thp_disable()) 继承。符合 Linux 语义。

Direct I/O 修复(file.rswrite_at Direct 分支使用栈缓冲逐 chunk 写入并处理短写。read_at 使用 IoBuf 流式读取。两者逻辑正确。

mmap flag(mmap.rsMAP_SYNC 优先检查返回 EOPNOTSUPP,允许 MariaDB 正常回退。

重复/重叠分析

  • 开放 PR:PR #895(sqlite3 CLI 测试)与本 PR 无重叠
  • 结论:本 PR 是独立的

非阻塞观察

  1. io_submit 持锁执行 I/O:当前同步实现下可接受,若未来改为异步后端需释放锁后再执行
  2. loongarch64 MariaDB 测试未通过:PR 描述中已说明因硬件适配原因暂未通过,不阻塞合并

整体代码质量好,实现方向正确,前次所有阻塞问题已修复,QEMU x86_64 实际运行验证通过,建议合并。

Powered by mimo-v2.5-pro

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

这种链接多线程库的方式,容易使编译不过。遂改为直接链接

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

normal 文件夹下的测例不需要 prebuild.sh。容易导致 CI 不过,遂移除

@ZR233
ZR233 merged commit 0a870ff into rcore-os:dev May 29, 2026
47 checks passed

@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.

Review 总结

本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(独立 aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNCEOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试(io_setup/io_destroy/io_submit/io_getevents/io_pgetevents/io_cancel/pread64/pwrite64)。

实现方向正确,代码质量良好cargo fmt --check 通过,与 origin/dev 无合并冲突。

本地 QEMU 验证结果(x86_64)

  • cargo fmt --check:通过

  • ✅ syscall 测试套件:全部通过(164.23s),包含全部 6 个新 AIO 测试

  • ✅ bugfix 测试套件:全部通过(51.47s),包含 pread64/pwrite64 Direct I/O 修复

  • MariaDB app 测试:全部 16 个阶段通过

    1. schema(建库建表)✅
    2. insert(多行插入)✅
    3. select-all(全表查询)✅
    4. filter-order-limit(条件过滤排序)✅
    5. aggregate(聚合查询)✅
    6. join-query(连接查询)✅
    7. update(更新 Alice 城市)✅
    8. delete(删除 cancel 订单)✅
    9. commit(事务提交)✅
    10. rollback(事务回滚)✅
    11. index(二级索引)✅
    12. temporary-table(临时表)✅
    13. view(视图)✅
    14. show-schema(元数据检查)✅
    15. final-statistics(最终统计,paid 总额 4504.80)✅
    16. restart-persistence(重启持久化验证)✅

    InnoDB 日志中未出现 bytes should have been readInnoDB: IO Error,Direct I/O 修复有效。

代码审查要点

AIO 实现(aio.rs,366 行)RwLock<BTreeMap> 管理 context,PID 隔离,同步执行模型。execute_iocb 复用已有 sys_pread64/sys_pwrite64/sys_fsync 等函数。IOCB/IOEvent 结构体与 Linux ABI 一致(64/32 字节)。IOCB_FLAG_RESFD 支持 eventfd 通知。注释充分。

mmap flag(mmap.rsMAP_SYNC 优先检查返回 EOPNOTSUPPMAP_SHARED_VALIDATE(type bits 0x03)作为 MAP_SHARED 接受。语义对 MariaDB 回退路径正确。

prctl THP(ctl.rs/clone.rs/mod.rsAtomicU32 存储,SeqCst 排序,fork 时继承。参数校验严格(arg4/arg5 必须为 0,PR_THP_DISABLE_EXCEPT_ADVISED 正确处理)。简洁且符合 Linux 语义。

Direct I/O 短读写修复(file.rsread_at 移除了 read < chunk 的提前退出条件,改为循环到 dst.is_full()write_at 使用栈缓冲区 + 内层短写循环,正确处理 WouldBlock。逻辑正确。

MariaDB app 测试:379 行 shell 脚本覆盖 16 个阶段,含重启持久化、InnoDB I/O 错误日志检查、超时/重试保护。prebuild.sh 从干净 Alpine 归档刷新 rootfs,保证每次运行独立。apps/starry(手动/演示)和 test-suit(CI 自动化)两套脚本定位不同,项目结构合理。

syscall 回归测试:8 个新测试均使用 test_framework.h 标准宏,覆盖正常路径和错误路径(非法 context、零参数、负数参数等)。测试质量高。

ZR233 CHANGES_REQUESTED 状态

ZR233 于 2026-05-27 提交了 CHANGES_REQUESTED(commit ebd5d93),未留具体评论。当前 HEAD c85e9cb4e 包含后续修复。AIO 代码已拆分到独立 aio.rs,命名已规范化(移除 aio_/Aio 前缀),注释已补充。建议作者与 ZR233 确认是否还有未解决的问题。

非阻塞观察

  1. sys_io_getevents 非阻塞min_nr 已校验但未用于阻塞等待。由于 io_submit 同步完成,所有事件在调用 io_getevents 时已就绪,MariaDB 场景不会触发 ready < min_nr。代码中已有注释说明此简化设计。

  2. io_submit 持写锁执行 I/O:当前同步实现下可接受。若未来改为异步后端,需释放锁后再执行。

  3. MAP_SYNC 返回值语义:当前在检查 type bits 前先返回 EOPNOTSUPP。Linux 行为是未配合 MAP_SHARED_VALIDATE 时返回 EINVAL。对 MariaDB 回退路径正确,后续可调整。

  4. loongarch64 MariaDB app 测试:PR 描述标注 loongarch64 未通过(硬件适配原因),但本轮验证仅在 x86_64 上进行。

重复/重叠分析

  • 基线分支:不存在 AIO、MAP_SYNC/MAP_SHARED_VALIDATE 处理、PR_SET_THP_DISABLE 实现
  • 当前开放 PR:未发现相关重复或重叠 PR
  • 结论:本 PR 是独立的,无重复或冲突风险

整体代码质量好,实现方向正确,QEMU 实测验证 MariaDB 全部 16 阶段通过,建议合并。

Powered by Mai Reviewer

Powered by mimo-v2.5-pro

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