Closed apengaaa closed 7 months ago
这个系统调用在 riscv 那边给了,忘记放到 x86_64 这边。最迟本周内可以修复。
这应该不影响 CI 测试,就直接先输出“cyclictest 执行错误”之类的信息就好了,没过就是没过
@apengaaa 添加 FEATURES=schedule
运行可以跑完整个测试。具体来说,将测例改为 busybox sh ./cyclictest_testcode.sh
之后,在 x86_64
下运行类似命令:
./build_img
make run FEATURES=schedule
可以得到这样的输出:
====== cyclictest NO_STRESS_P1 begin ======
unable to get scheduler parameters
Hangup
====== cyclictest NO_STRESS_P1 end: fail ======
====== cyclictest NO_STRESS_P8 begin ======
unable to get scheduler parameters
Hangup
====== cyclictest NO_STRESS_P8 end: fail ======
====== start hackbench ======
Running in process mode with 10 groups using 40 file descriptors each (== 400 tasks)
Each sender will pass 100000000 messages of 100 bytes
Creating fdpair (error: Address family not supported by protocol)
====== cyclictest STRESS_P1 begin ======
unable to get scheduler parameters
Hangup
====== cyclictest STRESS_P1 end: fail ======
====== cyclictest STRESS_P8 begin ======
unable to get scheduler parameters
Hangup
====== cyclictest STRESS_P8 end: fail ======
====== kill hackbench: success ======
你可能会注意到大部分测例都有 unable to get scheduler parameters
报错。我们已经定位到,作为二进制文件的测例本身存在问题,目前大致分为以下三种情况:
riscv+musl:测例编译正常,Starry也能通过
x86+musl:编译后的可执行文件 cyclictest
不对,在 x86 本机和 Starry 内部都无法获取正确输出
x86+gnu:测例编译正常,在 x86 本机可以通过测试。在 Starry 内部由于对 glibc 的支持不足,会出现 glibc 库中的报错,还待进一步修复
我们正在研究如何编出正确的 musl 版本测例,或是在 Starry 中改进 glibc 支持。不过即使之后可能替换掉测例仓库的 cyclictest 这个文件,但测试接口不变,所以这应该不影响 CI 那边的工作。
当使用基于musl libc的编译器去编译cyclictest
时,生成的程序在Linux及Starry上运行时,都会报错 unable to get scheduler parameters
.
跟踪该问题发现在musl libc
库中,sched_setscheduler
的实现直接返回-ENOSYS
错误码,并未实现函数体及系统调用应有的功能,如下代码段。
类似sched功能的函数, 未实现直接返回错误码的函数还包括:sched_getparam
, sched_getscheduler
, sched_setparam
, sched_setscheduler
;
int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param)
{
return __syscall_ret(-ENOSYS);
}
找到问题原因后,补齐修复这些函数即可。。。
修改的代码请见:https://github.com/oscomp/testsuits-for-oskernel/commit/ff6e2c51c5b9c365d1813e8ed37b6b8b8c3977fa
修复后生成的多个架构测试用例请见:https://github.com/rcore-os/testsuits-for-oskernel/releases/tag/pre-20240309
cyclictest:
进行了一个无效的系统调用ID,是用来检索CPU亲和性的