同样的程序在 x86 下个版本没问题, x86 下 2.6.38版本也没问题(使用fedora14的config编译)
在其他的 arm9 下没问题
6410下的 2.6.28 2.6.36 下 也没问题,
就在 mini6410+2.6.38 下有问题.
问题的产生: 程序使用 setitimer 设置 alarm,alarm的执行只是简单计数,然后在循环执行 memset(...) system(...),
alarm 间隔在 10ms 内, memset 的size 超过6M 时, 程序执行几秒就 block了,占100% cpu, console, telnet 还正常。
附件是 测试程序源码, 直接编译即可执行, 三个参数,
第一个参数是 memset 内存的size,单位是MB,
第二个参数是 alarm 时间间隔,单位是毫秒,
第三个参数是是否执行system函数(0 不执行, 非0 执行)。
例如: arm-linux-gcc -o test test.c
test 传到6410, 执行
./test 6 10 1
减少 memset size , 扩大alarm 间隔 就不会block, 据说2.6.38更新了任务调度算法,不知是否与此有关。