微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

很好的水平不适用于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喜欢的疯狂补丁.我不确定为什么自动分组不喜欢我的工作量,但这个答案适用于遇到类似问题的人.

原文地址:https://www.jb51.cc/linux/396618.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐