为什么尼斯级别被忽略?(在不同的登录会话之间-如果从相同的会话开始,则很荣幸。)

戈拉尔·兰布拉(Golar Ramblar)

当我启动两个具有不同nice-level的CPU吃程序时,例如

流程1:

nice -19 sh -c 'while true; do :; done'

流程2:

sh -c 'while :; do true; done'

(I改变的顺序:true仅仅在输出分辨的过程pstop),

尼斯级别似乎被忽略,并且两者都使用相同数量的CPU。

的输出top就像

  PID USER      PR  NI    VIRT    RES %CPU %MEM     TIME+ S COMMAND
 8187 <user>    39  19   21.9m   3.6m 45.8  0.0   0:20.62 R sh -c while true; do :; done
 8188 <user>    20   0   21.9m   3.5m 45.6  0.0   0:20.23 R sh -c while :; do true; done
 [...]

(当然,%CPU每个样本的-值略有不同,但平均而言,它们似乎相等)。

top 显示两个进程都以不同的好值运行,但它们似乎仍获得相同的CPU时间。

这两个命令都是由同一用户从不同的终端(都是登录shell)运行的。

如果它们是从同一终端运行的,则它们的行为将与预期的一样:更好的过程为不太理想的过程让路。

是什么原因?如何使整个机器在全球范围内都能正常工作?

之前一段时间在那台机器上的情况有所不同,在那儿,不错的价值似乎得到了兑现。

它是单处理器/单核计算机。

有关信息:

  • 内核:版本4.4.5(Arch Linux股票内核);uname -r4.4.5-1-ARCH
  • /proc/cpuinfo 是:

    processor       : 0
    vendor_id       : GenuineIntel
    cpu family      : 6
    model           : 23
    model name      : Intel(R) Core(TM)2 Solo CPU    U3500  @ 1.40GHz
    stepping        : 10
    microcode       : 0xa0c
    cpu MHz         : 1400.000
    cache size      : 3072 KB
    physical id     : 0
    siblings        : 1
    core id         : 0
    cpu cores       : 1
    apicid          : 0
    initial apicid  : 0
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 13
    wp              : yes
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm tpr_shadow vnmi flexpriority
    bugs            :
    bogomips        : 2794.46
    clflush size    : 64
    cache_alignment : 64
    address sizes   : 36 bits physical, 48 bits virtual
    power management:
    
Sourcejedi

啊,不是每个用户都获得它自己的cgroup的systemd-logind功能。我认为这是负责任的变更较旧;他们只是令人困惑的相似。(我搜索了“进程组公平调度”,认为它可能是基于unix的“进程组”,但我从未真正理解过)。维基百科:

Linux内核于2010年11月收到2.6.38内核的CFS补丁程序,使调度程序更适合在台式机和工作站上使用。

当任务调用__proc_set_tty()时,将删除对默认组的整个进程范围的引用,创建一个新的任务组,并将该进程移到新的任务组中。之后,孩子将继承此任务组,并增加其引用计数。在退出时,当删除对每个信号结构的最后一个引用时,对当前任务组的引用也将被删除。当释放引用该任务的最后一个信号结构时,该任务组将被销毁。在运行队列选择时,IFF任务没有cgroup分配,将使用其当前的自动组。

如果选择了CONFIG_SCHED_AUTOGROUP,则默认情况下从引导启用此功能,但是可以通过引导选项noautogroup禁用该功能,也可以即时打开/关闭该功能[通过/proc/sys/kernel/sched_autogroup_enabled0在此处写入将其禁用以用于新创建的任务,在写入时将其1启用。]

对于多核以及多CPU(SMP)系统,在解决这些问题时,主要的问题是交互式响应时间增加,同时执行在这些任务中使用许多线程的其他任务。一个简单的解释是,在编译Linux内核或类似的过程(例如对视频进行编码)时,人们仍然可以观看视频,阅读电子邮件并执行其他典型的桌面活动,而不会出现毛刺或断断续续的情况。但是,对此声明有异议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章