33
1 (LINUX)お仕事メリハリ術♪ -プロセススケジューラ編-

Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)

  • Upload
    yahoo

  • View
    5.004

  • Download
    1

Embed Size (px)

Citation preview

1

(LINUXの)お仕事メリハリ術♪-プロセススケジューラ編-

自己紹介2

山田 賢

北田 章

牧野 恵

はじめに3

今回の内容が直接お仕事に役立つ機会は多くないかも・・・

Linuxを愛用する立場として、Linuxのメリハリ術を楽しむスタンスで聞いて頂けると幸いです

目次4

スケジューラの概要と目的

スケジューリングに影響する項目

スケジューラで遊ぼうお仕事メリハリ術

デベロッパーの方へ

スケジューラの概要5

1. 各CPUにプロセスを割り振り

2. プロセスの優先順位とタイムスライスを決定

CPU0

CPU1プロセス投入

割り振り

割り振り

プロセス

スケジューラ

プロセス

スケジューラの概要6

1. 各CPUにプロセスを割り振り

2. プロセスの優先順位とタイムスライスを決定

20ms実行

CPU0

1番 2番 4番3番

スケジューラが×で何が困る?7

仕事がたくさんあるのにCPUを使いきってくれない

CPU0

CPU1プロセス投入

割り振り

割り振り

スケジューラが×で何が困る?8

仕事がたくさんあるのにCPUを使いきってくれない

CPU0

CPU1プロセス投入

割り振り

割り振り

いいPC買ったのに活用してくれない・・・

スケジューラが×で何が困る?9

優先してほしいプロセスを優先しない

CPU使用率50%

CPU使用率50%

選択

CPU0

スケジューラが×で何が困る?10

優先してほしいプロセスを優先しない

CPU使用率50%

CPU使用率50%

選択

CPU0

同時実行プロセスのせいで動画がカクカクする・・・

スケジューラが×で何が困る?11

条件が同じプロセスに対して同じ時間CPUを使わせない

CPU使用率90%

CPU使用率10%

選択

CPU0

スケジューラが×で何が困る?12

条件が同じプロセスに対して同じ時間CPUを使わせない

CPU使用率90%

CPU使用率10%

選択

CPU0

私のJavaプログラムの実行だけいつも遅い・・・

一般的なスケジューラの目的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自体に詳しく慣れる

目次17

スケジューラの概要と目的

スケジューリングに影響する項目

スケジューラで遊ぼうお仕事メリハリ術

デベロッパーの方へ

スケジューリングに影響する項目

18

CPUアフィニティ

スケジューリングポリシー

静的優先度

nice値とCPU使用時間

etc.,

CPUアフィニティ19

プロセスをどのCPUで実行するか指定 0のみ

両方OK

両方OK1のみ

割り振り

割り振り

CPU0

CPU1プロセス投入

スケジューリングポリシー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値

目次24

スケジューラの概要と目的

スケジューリングに影響する項目

スケジューラで遊ぼうお仕事メリハリ術

デベロッパーの方へ

スケジューラで遊ぼうお仕事メリハリ術デモ

25

コマンドラインからスケジューリングに影響する項目を変更してみましょう

紹介するコマンド taskset

chrt

nice

renice

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で遊べる作業効率化

静的優先度の表示や設定基準値などは、コマンドにより異なるので注意

但し、極端な設定は他のプロセスやユーザの迷惑になりうるので程々に…

目次31

スケジューラの概要と目的

スケジューリングに影響する項目

スケジューラで遊ぼうお仕事メリハリ術

デベロッパーの方へ

デベロッパーの方へ32

YJDN (Yahoo! JAPAN Developer Network)

Yahoo! JAPANのサービスを利用するAPIを提供しています

http://developer.yahoo.co.jp/

Tech Blog

Yahoo! JAPANの動向や最新情報を発信しています

http://techblog.yahoo.co.jp/

33

ご清聴ありがとうございました