当我编写一个运行 10 分钟的简单应用程序时,它启动 10 个线程(pthreads)一次,每个线程在一个循环中休眠 1 毫秒(不做任何其他事情),CPU 被使用。44%(top
报告)。它是一个 450 MHz 的 ARM9 CPU,使用 Linux 2.6.37 作为操作系统。没有其他程序在运行,它尝试了不同的内核配置(动态滴答、软/硬 IRQ、高分辨率计时器、...、...、...),不同的优先级(最多 99),但数字保持不变相同。/usr/bin/time -v
显示约。5'200'000 次自愿上下文切换,大约 在内核空间中花费了 3 分钟。在每个线程中休眠约。5 毫秒,CPU 利用率下降到 ca。IMO 仍然疯狂的 9%(40'500'000 次循环以保护一些寄存器)。clock_nanosleep 用于睡眠(CLOCK_REALTIME/CLOCK_MONOTONIC 没有改变任何东西)。
我知道 ARM9 上的完整上下文切换很昂贵,因为必须清除缓存。但是一个简单的线程切换,或者切换到操作系统不应该是那么昂贵的恕我直言(地址空间保持不变,不需要缓存/TLB 刷新)。这是常见的还是我应该尝试找到内核中的瓶颈?