feat(Starry): support MariaDB#906
Conversation
There was a problem hiding this comment.
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.toml 将 phys-memory-size 从 128M 改为 768M。这是一个全局平台配置,影响所有使用该平台 crate 的测试用例。当前 base 分支上存在多个使用 -m 128M(如 rust-hello、grep、util-linux、python-hello)和 -m 512M(如 smoke、busybox、coreutils、sqlite、syscall、bugfix)的 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 会尝试分配不存在的物理内存,导致启动崩溃或内存损坏。
建议修复方向(任选其一):
- 将
phys-memory-size恢复为原值 128M,MariaDB 测试通过 QEMU TOML 或 build config 中的机制单独覆盖 - 将所有已有 loongarch64 QEMU TOML 的
-m参数统一提升到 768M - 修改平台 crate 使
phys_ram_ranges()从 FDT/ACPI 动态检测可用内存而非使用编译时常量
其他非阻塞观察
-
sys_io_getevents忽略min_nr阻塞语义:当ready < min_nr时,Linux 内核会阻塞直到满足最小事件数或超时。当前实现直接返回ready。由于io_submit是同步完成的,所有事件在调用io_getevents时已经就绪,所以 MariaDB 使用场景下不会触发此问题。建议添加注释说明这一简化。 -
MAP_SYNC返回值语义:当前代码在检查 type bits 之前先检查MAP_SYNC并返回EOPNOTSUPP。Linux 行为是:MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL;配合MAP_SHARED_VALIDATE但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 的回退路径是正确的,但语义略有偏差。 -
PR 描述中金额不一致:PR 描述中重启持久化检查表写的
paid订单总金额为5403.80,但实际脚本检查的值是4504.80(39.90+199.00+59.00+19.90+3999.00+188.00)。建议更新描述。 -
apps/starry和test-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_VALIDATE、riscv_hwprobe、PR_SET_THP_DISABLE实现 - 开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
- 结论:本 PR 是独立的,无重复或冲突风险
Powered by glm-5.1
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATE、MAP_SYNC → EOPNOTSUPP)、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_groups和qemu_group_build_context_applies_case_axconfig_overrides覆盖
重复/重叠分析
- 基线分支:不存在 AIO、
MAP_SYNC处理、riscv_hwprobe、PR_SET_THP_DISABLE实现 - 开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
- 结论:本 PR 是独立的,无重复或冲突风险
非阻塞观察
-
sys_io_getevents忽略min_nr阻塞语义:当ready < min_nr时 Linux 会阻塞,当前实现直接返回ready。由于io_submit是同步完成的,所有事件在io_getevents调用时已就绪,MariaDB 场景不会触发此问题。建议添加注释说明这一简化设计决策。 -
aarch64 syscall 测试内存变更(512M → 1024M):
test-suit/starryos/normal/qemu-smp1/syscall/qemu-aarch64.toml的内存从 512M 增至 1024M,与 MariaDB 无直接关系。若这是为了适配 AIO 上下文内存需求或有其他原因,建议在 commit message 或 PR 描述中说明。 -
PR 描述中 loongarch64 修复说明需更新:描述中仍写的是修改
axconfig.toml全局配置,但实际实现已改为通过axconfig_overrides按 case 覆盖,建议更新描述使之与代码一致。
Powered by glm-5.1
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATE、MAP_SYNC → EOPNOTSUPP)、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_groups和qemu_group_build_context_applies_case_axconfig_overrides覆盖- QEMU 全架构 MariaDB 测试:PR 声称 x86_64/aarch64/riscv64/loongarch64 均通过
重复/重叠分析
- 基线分支:不存在 AIO、
MAP_SYNC/MAP_SHARED_VALIDATE处理、riscv_hwprobe、PR_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.rs):MAP_SYNC 优先检查并返回 EOPNOTSUPP,允许 MariaDB 正常回退到非 DAX 路径。MAP_SHARED_VALIDATE 作为合法 type bit 接受,语义与 MAP_SHARED 等价。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicBool 存储、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.rs):read_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 校验空值。单元测试覆盖充分。
非阻塞观察
-
MAP_SYNC返回值语义:当前在检查 type bits 之前先检查MAP_SYNC返回EOPNOTSUPP。Linux 行为是MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL;配合但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,但语义略有偏差,后续可调整。 -
sys_io_submit持锁执行 I/O:io_submit在持有AIO_MANAGERMutex 期间调用execute_aio_iocb。当前同步实现下可接受,但若未来改为真正异步后端,需释放锁后再执行 I/O。 -
apps/starry 与 test-suit 两套脚本:前者 305 行用于手动运行/演示,后者 403 行含 SQL 特征标记和 75 点计数用于 CI 自动化。功能定位不同,项目结构中合理。
整体代码质量好,实现方向正确,建议合并。
Powered by glm-5.1
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用、mmap flag 兼容(MAP_SHARED_VALIDATE、MAP_SYNC → EOPNOTSUPP)、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.rs:set_thp_disabled 缺少闭合 }
ProcessData::set_thp_disabled 函数(PR 新增)在 merge 后被放在了 impl ProcessData 块的末尾,紧邻 dev 分支新增的 is_job_stopped 等 job-control 方法。但 merge 时遗漏了 set_thp_disabled 的函数体闭合大括号 },导致函数的 { 从未闭合,后续所有代码(包括 is_job_stopped、set_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.rs:write_at Direct 分支含重复/残留代码
FileBackend::write_at 的 Direct 分支中,同时出现了旧的栈缓冲逐 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_at 的 Direct 分支模式:
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_hwprobe、PR_SET_THP_DISABLE实现 - 当前开放 PR:未发现与 AIO、mmap flag、prctl THP、riscv_hwprobe、MariaDB 或 Direct I/O 短读写修复相关的重复或重叠 PR
- 结论:本 PR 是独立的,无重复或冲突风险
其它非阻塞观察
-
sys_io_getevents忽略min_nr阻塞语义:当ready < min_nr时 Linux 会阻塞,当前实现直接返回ready。由于io_submit同步完成,MariaDB 场景下事件已就绪,暂不触发此问题。代码中已有注释说明此简化设计,合理。 -
sys_io_submit持锁执行 I/O:io_submit在持有AIO_MANAGERMutex 期间调用execute_aio_iocb。当前同步实现可接受,但若未来改为异步后端需释放锁后再执行。 -
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC并返回EOPNOTSUPP。Linux 行为是:未配合MAP_SHARED_VALIDATE时返回EINVAL;配合但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,但语义略有偏差,后续可调整。 -
PR 描述中 loongarch64 修复说明需更新:描述中仍提及修改
axconfig.toml全局配置,但实际实现已改为通过axconfig_overrides按 case 覆盖,建议更新描述使之与代码一致。 -
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
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(io_setup/io_destroy/io_submit/io_getevents/io_cancel)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现、Direct I/O 短读写修复、IoBuf slice 消费语义修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。
前次阻塞问题修复确认
前次 review(基于 commit 2e3862f)提出的两个 merge 冲突解决错误已在当前 head b86e537 中修复:
set_thp_disabled缺少闭合大括号:当前代码中函数已正确闭合,cargo fmt --check通过。write_atDirect 分支残留代码:当前代码已移除旧的栈缓冲逐 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 axbuild和cargo test -p ax-io --test iobuf通过 - QEMU 全架构 MariaDB 测试:作者声明 x86_64/aarch64/riscv64 均通过
重复/重叠分析
- 基线分支:无已存在的 AIO、
MAP_SYNC/MAP_SHARED_VALIDATE处理、riscv_hwprobe、PR_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.rs):MAP_SYNC 优先检查并返回 EOPNOTSUPP,允许 MariaDB 正常回退。MAP_SHARED_VALIDATE 作为合法 type bit 接受,与 MAP_SHARED 语义等价。type bits 校验逻辑独立于 SYNC 检查,语义清晰。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicBool 存储、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.rs):read_at 循环读取直到 buffer 满或 EOF/0 返回;write_at 使用 IoBuf 流式写入,逐 chunk 处理短写。逻辑正确。
IoBuf 消费语义(ext.rs):write_to 后 self = &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 自动化。功能定位不同,项目结构中合理。
非阻塞观察
-
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC并返回EOPNOTSUPP。Linux 行为是:MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL;配合但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整以提高对齐度。 -
io_submit持锁执行 I/O:io_submit在持有AIO_MANAGERMutex 期间调用execute_aio_iocb。当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行 I/O。 -
PR 描述中 loongarch64 修复说明需更新:描述中表 10 仍提及修改
axconfig.toml全局配置,但实际实现已改为通过axconfig_overrides按 case 覆盖。建议更新描述使之与代码一致。
整体代码质量好,实现方向正确,前次阻塞问题已全部修复,建议合并。
Powered by deepseek-v4-pro
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用(拆分到独立 aio.rs)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、prctl THP disable(含 clone 继承)、riscv64 riscv_hwprobe 保守实现(恢复 IMA_FD/IMA_C/MISALIGNED_* 常量)、Direct I/O 短读写修复、IoBuf slice 消费语义修复、axconfig_overrides 测试框架增强以及 MariaDB app/normal 测试用例。
最新提交 ebd5d93 改进确认
- ✅ AIO 代码拆分:AIO 系统调用从
io.rs抽离到独立aio.rs模块(330 行),结构清晰,mod.rs中正确pub use self::aio::* - ✅ 命名规范化:
AioIocb→Iocb,AioEvent→Event,AioContext→Context,AioManager→Manager,AIO_MANAGER→MANAGER,移除了冗余的aio_/Aio前缀 - ✅ 注释补充:每个公开函数和关键结构体都有说明注释,
sys_io_getevents中已注明同步完成的简化设计 - ✅ riscv_hwprobe 常量恢复:
RISCV_HWPROBE_IMA_FD、RISCV_HWPROBE_IMA_C、RISCV_HWPROBE_KEY_MISALIGNED_*已恢复,IMA_EXT_0现在正确返回FD|C,MISALIGNED_*返回MISALIGNED_UNKNOWN(0) - ✅
axconfig_overrides重构:从TestQemuCase移到StarryQemuCase和PreparedStarryQemuCase,ArceOS 不再继承 Starry 特有的 override 机制 - ✅
cargo fmt --check通过
前次阻塞问题全部修复
- loongarch64
phys-memory-size全局变更 → 已改为axconfig_overrides按 case 覆盖 set_thp_disabled缺少闭合}→ 已修复write_atDirect 分支 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.rs):MAP_SYNC 优先检查返回 EOPNOTSUPP,MAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicBool + SeqCst,clone 继承,参数校验严格。简洁且符合 Linux 语义。
riscv_hwprobe(sys.rs):保守实现,对已知 key 返回合理值(IMA_EXT_0 → FD|C,MISALIGNED_* → 0),未知 key 标记为 -1。新增 ZICBOZ_BLOCK_SIZE/HIGHEST_VIRT_ADDRESS/TIME_CSR_FREQ 常量。
Direct I/O 短读写修复(file.rs):read_at/write_at 的 Direct 分支循环处理短读写。IoBuf 流式实现正确。
IoBuf 消费语义(ext.rs):write_to/read_from 后正确推进 slice,新增 remaining()==0 断言。
非阻塞观察
-
commit message 拼写:
ebd5d93的 commit message 中 "annodations" 应为 "annotations",不影响功能但建议后续注意 -
PR 描述中金额不一致:PR 描述重启持久化检查表写的
paid订单总金额为5403.80,但实际脚本检查的值是4504.80(39.90+199.00+59.00+19.90+3999.00+188.00),建议更新描述 -
io_submit持锁执行 I/O:当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行 -
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC返回EOPNOTSUPP。Linux 行为是MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL;配合但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整对齐 -
apps/starry 与 test-suit 两套脚本:前者 317 行用于手动运行,后者 403 行含超时/重试和 SQL 计数用于 CI。定位不同,结构合理
验证状态
cargo fmt --check:✅ 通过- CI:fork PR 需审批触发,无可归因于本 PR 的失败
- PR 作者声称
cargo test -p axbuild、cargo test -p ax-io --test iobuf、x86_64/aarch64/riscv64 QEMU MariaDB 测试均通过
重复/重叠分析
- 基线分支:无已存在的 AIO、
MAP_SYNC/MAP_SHARED_VALIDATE、riscv_hwprobe、PR_SET_THP_DISABLE实现 - 开放 PR:未发现相关重复或重叠 PR
- 结论:本 PR 是独立的
整体代码质量好,实现方向正确,前次所有阻塞问题已修复,建议合并。
Powered by glm-5.1
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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 bda2e743f 与 origin/dev 合并时有 4 个文件冲突:
Cargo.lock:两侧依赖版本变更,可自动重新生成apps/starry/README.md:PR 添加## MariaDB段,base 添加## GDB Smoke段,需保留两侧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,需保留两侧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_VALIDATE、PR_SET_THP_DISABLE实现 - 开放 PR:PR #1006(llama.cpp,无关)、PR #1007(page reclaim,修改
file.rs不同函数,无冲突)、PR #1009(lockdep,无关) - 结论:本 PR 独立,无重复或冲突风险
非阻塞观察
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC返回EOPNOTSUPP。Linux 行为是未配合MAP_SHARED_VALIDATE时返回EINVAL。当前实现对 MariaDB 回退路径正确,后续可调整。io_submit持锁执行 I/O:在持有AIO_CONTEXTS读锁期间调用execute_iocb。当前同步实现下可接受,未来改为异步需重构。- AIO
sys_io_getevents简化:当前非阻塞返回已完成事件,不满足min_nr阻塞语义。注释已说明设计决策。
修复建议
- 合并/rebase 最新
origin/dev,正确解决 4 个文件的冲突 - 与 ZR233 沟通确认 CHANGES_REQUESTED 的具体原因
- 解决冲突后重新运行
cargo fmt --check和 QEMU 测试
Powered by glm-5.1
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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 个文件冲突:
Cargo.lock:两侧依赖版本变更,可通过cargo update重新生成apps/starry/README.md:PR 添加## MariaDB段,base 添加## GDB Smoke段,需保留两侧os/StarryOS/kernel/src/syscall/mod.rs:PR 添加 AIO syscall 分发,base 添加process_vm_readv/process_vm_writev,需保留两侧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.rs):Manager + 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.rs):MAP_SYNC 优先检查返回 EOPNOTSUPP,允许 MariaDB 回退。MAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicU32 + SeqCst,clone 继承,参数校验严格。
Direct I/O(file.rs):read_at/write_at Direct 分支循环处理短读写,逻辑正确。
Syscall 回归测试:8 个新测试(test-io-setup/destroy/submit/getevents/pgetevents/cancel、test-pread64、test-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_VALIDATE、PR_SET_THP_DISABLE实现 - 开放 PR:#1009(lockdep 修复)、#1007(page reclaim)均与本 PR 无关
- 结论:本 PR 独立,无重复或冲突风险
非阻塞观察
MAP_SYNC返回值语义:Linux 中MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL,配合但不支持 DAX 时返回EOPNOTSUPP。当前实现在 type bits 检查前直接返回EOPNOTSUPP,对 MariaDB 回退路径正确但语义略有偏差。io_submit持锁执行 I/O:当前同步实现下可接受,若未来改为异步后端需释放锁后再执行。apps/starry/mariadb与test-suit/.../syscall测试放置:app 用例在apps/starry,syscall 回归在test-suit/starryos/normal/qemu-smp1/syscall,符合项目规范。
Powered by deepseek-v4-pro
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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 中修复:
- ✅ loongarch64
phys-memory-size全局变更 → 已改为axconfig_overrides按 case 覆盖 - ✅
set_thp_disabled缺少闭合}→ 已修复(当前使用AtomicU32+thp_disable命名) - ✅
write_atDirect 分支 merge 冲突残留 → 已修复为栈缓冲逐 chunk 写入 - ✅ AIO 代码混在
io.rs→ 已拆分到独立aio.rs - ✅
aio_/Aio前缀冗余 → 已规范化 - ✅ luodeb 建议的注释补充 → 已添加
- ✅ 与 origin/dev 的 merge 冲突 → 已通过 merge commit 解决
代码审查要点
AIO 实现(aio.rs):RwLock<BTreeMap> 管理 context,PID 隔离。io_submit 同步执行 I/O 并入队完成事件。Iocb/IoEvent 结构体布局与 Linux ABI 一致(64/32 字节)。execute_iocb 正确复用 sys_pread64/sys_pwrite64 等。
mmap(mmap.rs):MAP_SYNC 优先返回 EOPNOTSUPP,允许 MariaDB 回退。MAP_SHARED_VALIDATE(0x03) 作为合法 type bit 接受。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicU32 存储、SeqCst 排序、clone 继承。
Direct I/O(file.rs):read_at/write_at 循环处理短读写,逻辑正确。
非阻塞观察
sys_io_getevents忽略min_nr阻塞语义:由于io_submit同步完成,事件已就绪,MariaDB 场景不会触发。代码中已有注释说明,合理。MAP_SYNC返回值语义:Linux 中未配合MAP_SHARED_VALIDATE时应返回EINVAL,当前统一返回EOPNOTSUPP,对 MariaDB 回退路径正确。- 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
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、prctl THP disable(含 clone 继承)、Direct I/O 短读写修复、以及 MariaDB app 测试和 8 个 syscall 回归测试。
实现方向正确,代码质量良好。 cargo fmt --check 和 cargo 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_pwritev2io_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_atDirect 分支:循环直到dst.is_full()或read == 0,确保完整读取write_atDirect 分支:使用 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 状态。
非阻塞观察
-
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC返回EOPNOTSUPP。Linux 行为是未配合MAP_SHARED_VALIDATE时返回EINVAL。当前实现对 MariaDB 回退路径正确,后续可调整对齐。 -
io_submit逐个enqueue_event每次获取写锁:当前同步实现下可接受,若未来改为真正异步后端可优化为批量写入。 -
apps/starry 与 test-suit 两套 MariaDB 脚本:前者用于手动运行/演示,后者含超时/重试和 SQL 计数用于 CI。功能定位不同,结构合理。
-
bugfix QEMU 测试超时:
bug-tty-cursor-report在本地容器中 360s 超时,这是已有测试的问题,与本 PR 无关。
整体代码质量好,实现方向正确,前次所有阻塞问题已修复,建议合并(需 ZR233 更新 review 状态)。
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 系统调用兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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 5ec3b8a2b 与 origin/dev 合并时有 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.rs):MAP_SYNC 优先检查返回 EOPNOTSUPP,MAP_SHARED_VALIDATE 作为合法 type bit 接受。语义对 MariaDB 回退路径正确。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicU32 存储、SeqCst 排序,clone 时通过 set_thp_disable(old.thp_disable()) 继承。简洁且符合 Linux 语义。
Direct I/O 短读写修复(file.rs):read_at/write_at 的 Direct 分支循环处理短读写,IoBuf 流式实现正确。
非阻塞观察
-
sys_io_getevents忽略min_nr阻塞语义:当ready < min_nr时 Linux 会阻塞,当前实现直接返回ready。由于io_submit同步完成,MariaDB 场景下事件已就绪,暂不触发此问题。代码中已有注释说明此简化设计,合理。 -
io_submit持锁执行 I/O:当前同步实现下可接受,若未来改为真正异步后端需释放锁后再执行。 -
MAP_SYNC返回值语义:当前在检查 type bits 前先检查MAP_SYNC返回EOPNOTSUPP。Linux 行为是MAP_SYNC未配合MAP_SHARED_VALIDATE时返回EINVAL;配合但文件系统不支持 DAX 时返回EOPNOTSUPP。当前实现对 MariaDB 回退路径正确,后续可调整对齐。 -
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
|
All has fixed and changed. |
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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_atDirect 分支 merge 冲突残留 → 已修复- AIO 代码混在
io.rs中 → 已拆分到独立aio.rs aio_/Aio前缀冗余 → 已规范化
- loongarch64
- ZR233 于 2026-05-27 提交的 CHANGES_REQUESTED review(commit
ebd5d93)未留下评论。作者已推送新 commit(head2d179ea3)并声明问题已修复。 - 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.rs):AtomicU32 存储,SeqCst 排序。PR_SET_THP_DISABLE 支持 PR_THP_DISABLE_EXCEPT_ADVISED 标志位。clone 时通过 set_thp_disable(old_proc_data.thp_disable()) 继承。符合 Linux 语义。
Direct I/O 修复(file.rs):write_at Direct 分支使用栈缓冲逐 chunk 写入并处理短写。read_at 使用 IoBuf 流式读取。两者逻辑正确。
mmap flag(mmap.rs):MAP_SYNC 优先检查返回 EOPNOTSUPP,允许 MariaDB 正常回退。
重复/重叠分析
- 开放 PR:PR #895(sqlite3 CLI 测试)与本 PR 无重叠
- 结论:本 PR 是独立的
非阻塞观察
io_submit持锁执行 I/O:当前同步实现下可接受,若未来改为异步后端需释放锁后再执行- loongarch64 MariaDB 测试未通过:PR 描述中已说明因硬件适配原因暂未通过,不阻塞合并
整体代码质量好,实现方向正确,前次所有阻塞问题已修复,QEMU x86_64 实际运行验证通过,建议合并。
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
这种链接多线程库的方式,容易使编译不过。遂改为直接链接
There was a problem hiding this comment.
normal 文件夹下的测例不需要 prebuild.sh。容易导致 CI 不过,遂移除
There was a problem hiding this comment.
Review 总结
本 PR 为 StarryOS 接入 MariaDB 测试,涵盖 Linux AIO 兼容层(独立 aio.rs,366 行)、mmap flag 兼容(MAP_SHARED_VALIDATE→接受、MAP_SYNC→EOPNOTSUPP)、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 个阶段通过:
- schema(建库建表)✅
- insert(多行插入)✅
- select-all(全表查询)✅
- filter-order-limit(条件过滤排序)✅
- aggregate(聚合查询)✅
- join-query(连接查询)✅
- update(更新 Alice 城市)✅
- delete(删除 cancel 订单)✅
- commit(事务提交)✅
- rollback(事务回滚)✅
- index(二级索引)✅
- temporary-table(临时表)✅
- view(视图)✅
- show-schema(元数据检查)✅
- final-statistics(最终统计,paid 总额 4504.80)✅
- restart-persistence(重启持久化验证)✅
InnoDB 日志中未出现
bytes should have been read或InnoDB: 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.rs):MAP_SYNC 优先检查返回 EOPNOTSUPP;MAP_SHARED_VALIDATE(type bits 0x03)作为 MAP_SHARED 接受。语义对 MariaDB 回退路径正确。
prctl THP(ctl.rs/clone.rs/mod.rs):AtomicU32 存储,SeqCst 排序,fork 时继承。参数校验严格(arg4/arg5 必须为 0,PR_THP_DISABLE_EXCEPT_ADVISED 正确处理)。简洁且符合 Linux 语义。
Direct I/O 短读写修复(file.rs):read_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 确认是否还有未解决的问题。
非阻塞观察
-
sys_io_getevents非阻塞:min_nr已校验但未用于阻塞等待。由于io_submit同步完成,所有事件在调用io_getevents时已就绪,MariaDB 场景不会触发ready < min_nr。代码中已有注释说明此简化设计。 -
io_submit持写锁执行 I/O:当前同步实现下可接受。若未来改为异步后端,需释放锁后再执行。 -
MAP_SYNC返回值语义:当前在检查 type bits 前先返回EOPNOTSUPP。Linux 行为是未配合MAP_SHARED_VALIDATE时返回EINVAL。对 MariaDB 回退路径正确,后续可调整。 -
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
支持 Aipine 环境下的MariaDB
问题背景
MariaDB 在 StarryOS 上运行时会触发一组真实应用场景下的系统调用兼容性问题,包括 direct I/O 读写、mmap 行为以及 Linux AIO 相关系统调用缺失。为了证明 MariaDB 已经可以作为 Starry 应用运行,也需要补充对应的 app 用例和 syscall 回归测试。
修改内容
新增
apps/starry/mariadb应用适配用例。补齐 Linux AIO 兼容层。
os/StarryOS/kernel/src/syscall/fs/aio.rs。io_setup、io_destroy、io_submit、io_getevents、io_pgetevents、io_cancel等兼容实现。修复文件读写与 mmap 相关问题。
read_at/write_at行为,避免 InnoDB direct I/O 场景下出现短读、写入失败等问题。pread64/pwrite64影响文件当前 offset。补充 syscall 回归测试。
pread64、pwrite64测例。prebuild.sh,避免 syscall 测例依赖额外 rootfs 安装步骤。test-tgsigqueueinfo的 pthread 链接方式,使其适配现有交叉编译环境。关键修复说明
Linux AIO 兼容层
os/StarryOS/kernel/src/syscall/fs/aio.rsio_setupio_destroyio_submitio_geteventsio_pgeteventsio_getevents,接受额外 signal mask 参数io_cancel文件读写与 mmap
read_at短读write_at写入失败pread64/pwrite64和普通读写Syscall 回归测试
test-pread64pread64test-pwrite64pwrite64test-io-setupio_setuptest-io-destroyio_destroytest-io-submitio_submittest-io-geteventsio_geteventstest-io-pgeteventsio_pgeteventstest-io-cancelio_cancelMariaDB 覆盖场景
本 PR 中的 MariaDB app 用例覆盖以下真实数据库运行路径:
SELECT 1、Unix socket 连接MariaDB 16 组 SQL 测试
SELECT 1,确认客户端可通过 Unix socket 连接服务端starry_test数据库和 InnoDB 表users、orders表插入多行数据users、orders,验证基础读路径WHERE、ORDER BY、LIMIT查询用户数据COUNT、SUM、GROUP BY统计订单users和orders,验证连接查询cancel状态订单,并查询确认idx_users_city,并通过SHOW INDEX检查temp_summary临时表并查询聚合结果paid_orders_view并查询视图结果SHOW TABLES、DESCRIBE users、DESCRIBE orders验证结果
MariaDB app 测试
x86_64cargo xtask starry app run -t mariadb --arch x86_64aarch64cargo xtask starry app run -t mariadb --arch aarch64riscv64cargo xtask starry app run -t mariadb --arch riscv64loongarch64cargo xtask starry app run -t mariadb --arch loongarch64备注:
loongarch64的 MariaDB app 测试因硬件适配原因暂未通过。syscall 回归测试
x86_64cargo xtask starry test qemu --arch x86_64 -c syscallaarch64cargo xtask starry test qemu --arch aarch64 -c syscallriscv64cargo xtask starry test qemu --arch riscv64 -c syscallloongarch64cargo xtask starry test qemu --arch loongarch64 -c syscall修改测例结构
1.因为 CI 频繁出错,移除了normal 文件夹下 prebuild.sh.将必要内容移动到对应的 main.c
2.将链接多线程库的方式改为直接链接
测试结果
经上述两点修改后,本地测试可正确编译并且通过