linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
TRANSCRIPT
一般的なスケジューラの目的13
CPU使用率の公平性を保証 ユーザ間
プロセスグループ間
プロセス間
CPU間
etc.,
性能の向上 次に実行するプロセスを高速に決定
ハードウェア特性を活用するCPU間振り分け、実行順序、タイムスライスの決定
etc.,
スケジューラのインパクト事例
14
gihyo.jp, “2010年11月18日 "ミラクルパッチ"にLinusも大喜び!Linuxカーネルを高速化させた233行のコード”, http://gihyo.jp/admin/clip/01/linux_dt/201011/18
以前は対等に扱っていたプロセスを・・・
= =
スケジューラのインパクト事例
15
gihyo.jp, “2010年11月18日 "ミラクルパッチ"にLinusも大喜び!Linuxカーネルを高速化させた233行のコード”, http://gihyo.jp/admin/clip/01/linux_dt/201011/18
用途に合わせて自動的にグループ化
スケジューラのことを知って嬉しいこと
16
急いで実行すべき仕事の優先順位を上げられる 動画再生アプリケーションなど
急いでいない仕事の優先順位を下げられる 周囲からの好感度向上(?)
Linux自体に詳しく慣れる
スケジューリングポリシー20
優先順位
高い
低い
OTHER
BATCH
ポリシー名 リアルタイム/通常/その他
特徴
FIFO リアルタイム 自発的に離さない限り、CPUを使用し続ける
RR(RoundRobin) リアルタイム 同じ優先度のプロセスがある場合、ラウンドロビン
OTHER 通常 デフォルトポリシー
BATCH 通常 バッチプロセス用
IDLE その他 nice値+19より優先度が低い
静的優先度21
リアルタイムプロセスの優先順位を決定
値が小さいほど優先順位は高い
絶対的な優先度
1から99までの値をとる
75
1番 2番 3番 4番
CPU0
501511
※便宜上、一般的にはノンリアルタイムで実行されるプロセスのマスコットを使用しております
リアルタイムプロセスの優先順位は静的に決定
nice値とCPU使用時間22
通常プロセスの優先度とタイムスライスを決定
優先度はCPU使用時間とnice値を掛け合わせて決定
タイムスライスはプロセス間のnice値の割合で決定
nice値は-20から19(デフォルトは0)
1番 2番 3番
CPU0
nice:0CPU使用時間:5 s
nice:10CPU使用時間:10 ms
nice:0CPU使用時間:30 s
通常プロセスの優先順位は動的に決定
スケジューリングに影響する項目おさらい
23
実行CPU CPUアフィニティ
実行順序 スケジューリングポリシー
静的優先度
nice値とCPU使用時間
CPU使用時間(タイムスライス) スケジューリングポリシー
nice値
taskset26
tasksetで各プロセスが実行するCPUを指定可能
CPUを指定してプロセスを起動
実行中のプロセス(ID:5268)のCPUを指定
実行中のプロセス(ID:5268)のCPUアフィニティ確認
$ taskset –p -c 1,2 5268
$ taskset -c 0,1,5 ./a.out
$ taskset –p 5268
chrt27
プロセスのポリシーと静的優先度を変更
静的優先度の設定では1から99の範囲で値を指定 99が最大の優先度(静的優先度の1)となる
FIFOかつ静的優先度20でプロセスを起動
実行中のプロセス(ID:30621)をBATCHに設定
実行中のプロセス(ID:30621)のポリシーと優先度を確認
$ sudo chrt -f -p 79 ./a.out
$ chrt -b -p 0 30621
$ chrt -p 30621
99-20で計算
nice28
nice値をプログラム起動時に指定
一般ユーザはnice値を下げれない
高い値ほど他のプロセスにCPUを譲るのでniceな値
nice値10を指定してプログラムを起動
nice値にマイナスを指定したい場合はsudoで実行
$ nice –n 10 ./a.out
$ sudo nice –n -10 ./a.out
renice29
実行中のプロセスのnice値を変更
プロセスID:4559のnice値を+10
実行ユーザがyahooのプロセスのnice値を20に変更
$ renice +10 4559
$ renice 20 -u yahoo
まとめ30
プロセスはプロセスに設定された様々な項目に基づいてスケジューリングされる
上記の項目はコマンドラインから変更可能 Linuxで遊べる作業効率化
静的優先度の表示や設定基準値などは、コマンドにより異なるので注意
但し、極端な設定は他のプロセスやユーザの迷惑になりうるので程々に…
デベロッパーの方へ32
YJDN (Yahoo! JAPAN Developer Network)
Yahoo! JAPANのサービスを利用するAPIを提供しています
http://developer.yahoo.co.jp/
Tech Blog
Yahoo! JAPANの動向や最新情報を発信しています
http://techblog.yahoo.co.jp/