很好的水平不适用于Linux

前端之家收集整理的这篇文章主要介绍了很好的水平不适用于Linux前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些高度浮点密集型进程,只做很少的I / O.一个称为“xspec”,它计算数值模型并每秒将浮点结果返回给主进程(通过stdout).它被剔在19层.我有另一个简单的过程“cpufloattest”,它只是在紧密循环中进行数值计算.它没有被剔除.

我有一个禁用超线程的4核i7系统.我已经开始了每种类型的流程中的4个.为什么Linux调度程序(Linux 3.4.2)没有正确限制niced进程占用的cpu时间?

cpu(s): 56.2%us,1.0%sy,41.8%ni,0.0%id,0.0%wa,0.9%hi,0.1%si,0.0%st
Mem:  12297620k total,12147472k used,150148k free,831564k buffers
Swap:  2104508k total,71172k used,2033336k free,4753956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %cpu %MEM    TIME+  COMMAND                                         
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个用很少)

解决方法

我发现了导致这个问题的原因.这是由于CFS调度程序的“自动组”功能.如果我做
echo 0 > /proc/sys/kernel/sched_autogroup_enabled 

然后一切都像你期望的那样.当好的0进程正在运行时,漂亮的19个进程将降至接近零的cpu使用率.

我将尝试确切地找到自动组合正在做什么来打破我的使用案例并更新这个答案.

编辑…我和IRC上的一些内核人员聊了聊,他们只是说我应该禁用它,如果它对我的工作负载不起作用,那只是一个Linus喜欢的疯狂补丁.我不确定为什么自动分组不喜欢我的工作量,但这个答案适用于遇到类似问题的人.

猜你在找的Linux相关文章