我有一些高度浮点密集型进程执行很少的 I/O。一个叫做“xspec”,它计算一个数值模型并每秒将一个浮点结果返回给主进程(通过标准输出)。它在 19 级很好。我有另一个简单的过程“cpufloattest”,它只是在一个紧密的循环中进行数值计算。这不是很好。
我有一个禁用超线程的 4 核 i7 系统。我已经开始了每种类型的流程中的 4 个。为什么 Linux 调度程序 (Linux 3.4.2) 没有正确限制 niced 进程占用的 CPU 时间?
中央处理器:56.2%us、1.0%sy、41.8%ni、0.0%id、0.0%wa、0.9%hi、0.1%si、0.0%st 内存:总计 12297620k,已使用 12147472k,空闲 150148k,缓冲区 831564k 交换:总共 2104508k,已使用 71172k,免费 2033336k,缓存 4753956k PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 32399 jss 20 0 44728 32m 772 R 62.7 0.3 4:17.93 cpufloattest 32400 jss 20 0 44728 32m 744 R 53.1 0.3 4:14.17 cpufloattest 32402 jss 20 0 44728 32m 744 R 51.1 0.3 4:14.09 cpufloattest 32398 jss 20 0 44728 32m 744 R 48.8 0.3 4:15.44 cpufloattest 3989 jss 39 19 1725m 690m 7744 R 44.1 5.8 1459:59 xspec 3981 jss 39 19 1725m 689m 7744 R 42.1 5.7 1459:34 xspec 3985 jss 39 19 1725m 689m 7744 R 42.1 5.7 1460:51 xspec 3993 jss 39 19 1725m 691m 7744 R 38.8 5.8 1458:24 xspec
如果我启动 8 个 cpufloattest 进程,调度程序会按照我的预期进行,其中 4 个很好(即 4 个占用大部分 CPU,4 个占用很少)