1.5K Views
August 03, 11
スライド概要
スケジューラによる効率的なCPU利用を説明します♪
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
(LINUXの)お仕事メリハリ術♪ -プロセススケジューラ編1
自己紹介 2  山田 賢  北田 章  牧野 恵
はじめに 3  今回の内容が直接お仕事に役立つ機会は多くないか も・・・  Linuxを愛用する立場として、Linuxのメリハリ術を 楽しむスタンスで聞いて頂けると幸いです
目次 4  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
スケジューラの概要 5 1. 各CPUにプロセスを割り振り 2. プロセスの優先順位とタイムスライスを決定 プロセス 割り振り スケジューラ CPU0 プロセス 割り振り プロセス投入 CPU1
スケジューラの概要 6 1. 各CPUにプロセスを割り振り 2. プロセスの優先順位とタイムスライスを決定 20ms実行 3番 2番 1番 CPU0 4番
スケジューラが×で何が困る? 7  仕事がたくさんあるのにCPUを使いきってくれない 割り振り CPU0 プロセス投入 割り振り CPU1
スケジューラが×で何が困る? 8  仕事がたくさんあるのにCPUを使いきってくれない 割り振り CPU0 プロセス投入 割り振り CPU1 いいPC買ったのに 活用してくれない・・・
スケジューラが×で何が困る? 9  優先してほしいプロセスを優先しない 選択 CPU使用率 50% CPU0 CPU使用率 50%
スケジューラが×で何が困る? 10  優先してほしいプロセスを優先しない 選択 CPU使用率 50% CPU0 同時実行プロセスのせいで 動画がカクカクする・・・ CPU使用率 50%
スケジューラが×で何が困る? 11  条件が同じプロセスに対して同じ時間CPUを使わせ ない 選択 CPU使用率 90% CPU0 CPU使用率 10%
スケジューラが×で何が困る? 12  条件が同じプロセスに対して同じ時間CPUを使わせ ない 選択 CPU使用率 90% CPU0 私のJavaプログラムの実行 だけいつも遅い・・・ CPU使用率 10%
一般的なスケジューラの目的 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で実行するか指定 1のみ 0のみ 両方 OK 割り振り CPU0 両方 OK 割り振り プロセス投入 CPU1
スケジューリングポリシー 20 優先順位 高い OTHER BATCH 低い ポリシー名 リアルタイム /通常/その他 特徴 FIFO リアルタイム 自発的に離さない限り、 CPUを使用し続ける RR(RoundRobin) リアルタイム 同じ優先度のプロセス がある場合、ラウンド ロビン OTHER 通常 デフォルトポリシー BATCH 通常 バッチプロセス用 IDLE その他 nice値+19より優先度が 低い
静的優先度 21  リアルタイムプロセスの優先順位を決定  値が小さいほど優先順位は高い  絶対的な優先度  1から99までの値をとる リアルタイムプロセスの 優先順位は静的に決定 ※便宜上、一般的にはノンリアルタイムで実行 されるプロセスのマスコットを使用しております 11 15 50 1番 2番 3番 CPU0 75 4番
nice値とCPU使用時間 22  通常プロセスの優先度とタイムスライスを決定  優先度はCPU使用時間とnice値を掛け合わせて決定  タイムスライスはプロセス間のnice値の割合で決定  nice値は-20から19(デフォルトは0) 通常プロセスの 優先順位は動的に決定 nice:0 CPU使用時間:5 s 1番 nice:10 CPU使用時間:10 ms 2番 CPU0 nice:0 CPU使用時間:30 s 3番
スケジューリングに 影響する項目おさらい 23  実行CPU  CPUアフィニティ  実行順序  スケジューリングポリシー  静的優先度  nice値とCPU使用時間  CPU使用時間(タイムスライス)  スケジューリングポリシー  nice値
目次 24  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
スケジューラで遊ぼう お仕事メリハリ術デモ 25  コマンドラインからスケジューリングに影響する 項目を変更してみましょう  紹介するコマンド  taskset  chrt  nice  renice
taskset 26  tasksetで各プロセスが実行するCPUを指定可能  CPUを指定してプロセスを起動 $ taskset -c 0,1,5 ./a.out  実行中のプロセス(ID:5268)のCPUを指定 $ taskset –p -c 1,2 5268  実行中のプロセス(ID:5268)のCPUアフィニティ確認 $ taskset –p 5268
chrt 27  プロセスのポリシーと静的優先度を変更  静的優先度の設定では1から99の範囲で値を指定  99が最大の優先度(静的優先度の1)となる  FIFOかつ静的優先度20でプロセスを起動 $ sudo chrt -f -p 79 ./a.out 99-20で計算  実行中のプロセス(ID:30621)をBATCHに設定 $ chrt -b -p 0 30621  実行中のプロセス(ID:30621)のポリシーと優先度を 確認 $ chrt -p 30621
nice 28  nice値をプログラム起動時に指定  一般ユーザはnice値を下げれない  高い値ほど他のプロセスにCPUを譲るのでniceな値  nice値10を指定してプログラムを起動 $ nice –n 10 ./a.out  nice値にマイナスを指定したい場合はsudoで実行 $ sudo nice –n -10 ./a.out
renice 29  実行中のプロセスのnice値を変更  プロセスID:4559のnice値を+10 $ renice +10 4559  実行ユーザがyahooのプロセスのnice値を20に変更 $ 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  ご清聴ありがとうございました