Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

プロセスの優先度@CetnOS 5.5

      2017/07/28

Linuxのプロセス優先度には、大きく分けて2つあります。

静的優先度 (リアルタイムプロセス)と動的優先度です。

Linuxカーネルの内部では、優先度は1~139で表現され、1~99が静的優先度、100~139が動的優先度になり、値が低い方が優先度が高くなり、動的優先度はカーネルにより動的に変更されます。

静的優先度は、スケジューラにFIFOとRR(ラウンドロビン)の2種類選択することができ、FIFOは一度CPUをつかむとCPUを離すまでずっと使い続けることができ、RRは同じ優先度のプロセスがあると、ラウンドロビンでCPUが割り当てられます。しかし、どちらのスケジューラを選択しても、優先度の低いプロセスにはCPUが割り当てられないので、設定するには注意が必要で、最悪PCがフリーズしたような状態になります。

優先度を表示するコマンドにより、この優先度の表現が異なるため注意が必要です。

まず chrt コマンドでは、動的優先度は、優先度”0″ と表示されます。

# chrt -p 4507
pid 4507's current scheduling policy: SCHED_OTHER
pid 4507's current scheduling priority: 0

静的優先度は以下のように表示されますが、chrtコマンドの場合、数字が大きい方が優先度が高く、1~99 で表示され、99 が最高優先度、つまり カーネル内部では優先度1となります。

# chrt -p 2
pid 2's current scheduling policy: SCHED_FIFO
pid 2's current scheduling priority: 99

topコマンドでは、PR,という列で表示されます。PR では、-100 ~ -2 が動的優先度、0~39 が静的優先度で、数字が小さい方が優先度が高く、-100 が カーネル内部では優先度1となり、-100の場合だけ、実際には”RT”と表示されます。動的優先度は、0がカーネル内部では100となり、39がカーネル内部では139となります。

# top
top - 14:39:35 up  5:07,  3 users,  load average: 0.01, 0.05, 0.03
Tasks: 120 total,   1 running, 118 sleeping,   0 stopped,   1 zombie
Cpu(s):  1.1%us,  1.7%sy,  0.9%ni, 94.1%id,  2.0%wa,  0.1%hi,  0.1%si,  0.0%st
Mem:    799240k total,   750912k used,    48328k free,    23076k buffers
Swap:  2096472k total,      116k used,  2096356k free,   424340k cached PID USER
               PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
~ 省略 ~
   2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
4507 root      16   0 70524 1712 1260 S  0.0  0.2   0:00.30 bash
~ 省略 ~

ちなみに、カーネル内部120が、プロセスのデフォルトの優先度で、nice コマンドでは動的優先度を現在の優先度から相対的に-20 ~ +19 の範囲で設定できます。
※動的プロセスをniceコマンドで相対的に-20に設定しても、カーネル内部で99以下(リアルプロセス)になることはありません。

ps コマンドでは、-o  rtprio と pri と priority と3つもの表現があり、かなり分かりづらいです。rtprio では静的優先度しか表示できず、1~99 で表現され、数字が大きいほうが優先度が高く、pri では0~39 が動的優先度、41~139 が静的優先度となり、数字が大きい方が優先度が高くなります。最後のpriority では、 0~39 が動的優先度、-100~-2 が静的優先度となり、数字が小さい方が優先度が高くなります。さらにpri と priorityは列の表示名が同じで区別つかないです。ややこしすぎる!!

# ps -eo pid,comm,rtprio,pri,priority
 PID COMMAND         RTPRIO PRI PRI
   2 migration/0         99 139 -100
4507 bash                 -  23  16

まとめると、以下のようになります。

カーネル内部 chrt top (PRI) ps (rtprio) ps (pri) ps (priority) niceコマンドでの設定
1 99 RT 99 139 -100
2 98 -99 98 138 -99






99 1 -2 1 41 -2
100 0 0 39 0 -20

0


120 0 20 19 20 一般プロセスのデフォルト

0


139 0 39 0 39 +19

 - IT技術 , ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
systemdやsystemctlコマンドを少し調べてみた

systemd が使いにくいので避けていたのですが、やっとFedora 15 を …

no image
KVM on KVM @ Fedora 17

最近のLinuxカーネルは、KVMのネスト (KVMのゲストOS上でKVMを動か …

no image
pptpサーバの構築@CentOS 5.8

pptpサーバ構築時のメモ書き。 # yum install ppp pptp …

no image
ciscoコマンド覚え書き

普段あまりcisco製品触ることないので単なる覚え書き いろいろな情報を一気に取 …

no image
iptables のルールの移行

移行元のルールを保存し、 # iptables-save > filena …

Windows 10 の Ubuntu (WSL) でGUI (X Window)を使う

Windows 10 の WSL 上の Ubuntu 上のアプリでGUI(X)が …

no image
lsの色を変更する@Cygwin

lsコマンドは、ディレクトリやファイルの種類によって、表示に色をつけることができ …

no image
ATOK 2009@Windows 7

Windows7 に ATOK 2009を入れてみた。何事もなく普通に使えました …

Xprivacyを導入する@Galaxy SIII (SC-06d) 4.1.2

Glaxy-SIIIのrootをとったので、個人情報を守るためにも、Xpriva …

uvtoolで簡単にクラウドイメージ取得・起動@Ubuntu 14.04 LTS

Ubuntuのサイトにいろいろとクラウド用のイメージがありますが、uvtoolと …