GNU/Linux >> Linux の 問題 >  >> Linux

ニースレベルが無視されるのはなぜですか? (異なるログインセッション間—同じセッションから開始した場合は尊重されます。)?

ニースレベルの異なる2つのCPUを消費するプロセスを開始すると、たとえば

プロセス1:

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

プロセス2:

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

:の順序を変更しました およびtrue psの出力でプロセスを区別するためだけに またはtop )、

nice-levelは無視されているようで、どちらも同じ量の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時間を取得しているようです。

両方のコマンドは、異なる端末から同じユーザーによって実行されました(どちらもログインシェルです)。

それらが同じ端末から実行される場合、それらは期待どおりに動作します。より良いプロセスは、それほど良くないプロセスに道を譲ります。

理由は何ですか?マシン全体でグローバルに優れた作業を行うにはどうすればよいですか?

以前は、そのマシンではそれが異なっていました。そこでは、nice-valuesが尊重されているように見えました。

シングルプロセッサ/シングルコアマシンです。

詳細情報:

  • カーネル:バージョン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:
    

承認された回答:

ああ、それは各ユーザーが独自のcgroupを取得するsystemd-logind機能ではありません。ここで責任がある変更は古いと思います。紛らわしいほど似ています。 (私は「プロセスグループフェアスケジューリング」を検索しました。これは、UNIXの「プロセスグループ」に基づいたものである可能性があると考えていましたが、実際には理解できませんでした)。ウィキペディア:

Linuxカーネルは、2010年11月に2.6.38カーネル用のCFSのパッチを受け取りました。これにより、デスクトップとワークステーションでのスケジューラーの使用がより公平になりました。

タスクが__proc_set_tty()を呼び出すと、デフォルトグループへのプロセス全体の参照が削除され、新しいタスクグループが作成され、プロセスが新しいタスクグループに移動されます。その後、子はこのタスクグループを継承し、そのrefcountを増やします。終了時に、各シグナル構造体への最後の参照が削除されると、現在のタスクグループへの参照が削除されます。タスクグループは、それを参照している最後のシグナル構造体が解放されると破棄されます。ランキューの選択時に、IFFタスクにはcgroupが割り当てられておらず、現在の自動グループが使用されます。

CONFIG_SCHED_AUTOGROUPが選択されている場合、この機能はデフォルトで起動から有効になりますが、起動オプションnoautogroupを使用して無効にすることができ、オンザフライでオン/オフにすることもできます [/proc/sys/kernel/sched_autogroup_enabled経由 :を書く 新しく作成されたタスクでは無効になり、1と記述します。 有効にします。]

これによって解決される主な問題は、マルチコアおよびマルチCPU(SMP)システムで、これらのタスクで多くのスレッドを使用する他のタスクを実行しているときに、対話型応答時間が長くなることです。簡単に説明すると、Linuxカーネルやビデオのエンコードなどの同様のプロセスをコンパイルしている間も、ビデオを見たり、電子メールを読んだり、その他の一般的なデスクトップアクティビティをグリッチや途切れることなく実行できます。ただし、この声明には反対意見があります。


Linux
  1. なぜCdはプログラムではないのですか?

  2. Grep – GrepパターンのブラケットがPs結果からGrepプロセスを削除するのはなぜですか?

  3. ワイルドカード文字*がZipコマンドとRmコマンドで大きく異なるのはなぜですか?

  1. TtyからのXのスクリーンショット?

  2. Puttyを使用する場合、屏風がプロファイルから自動的に開始されると、Alt-left / rightは異なりますか?

  3. setsid() が役立つのはいつですか? Linux でプロセスをグループ化する必要があるのはなぜですか?

  1. /dev/random の dd でファイル サイズが異なるのはなぜですか?

  2. 同じコンピュータ上の 2 つの異なる OS 間でファイルを共有することはできますか?

  3. EPEL から同じマシンに 2 つの異なるバージョンの Java をインストールするにはどうすればよいですか?