563 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 ご清聴ありがとうございました