(LINUXの)お仕事メリハリ術♪
  -プロセススケジューラ編-
        1
自己紹介
          2

 山田 賢
 北田 章
 牧野 恵
はじめに
               3

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

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

 スケジューラの概要と目的
 スケジューリングに影響する項目
 スケジューラで遊ぼうお仕事メリハリ術
 デベロッパーの方へ
スケジューラの概要
                5

1. 各CPUにプロセスを割り振り
2. プロセスの優先順位とタイムスライスを決定



    プロセス        割り振り
             スケジューラ
                       CPU0

                              プロセス
                割り振り



プロセス投入                 CPU1
スケジューラの概要
                       6

1. 各CPUにプロセスを割り振り
2. プロセスの優先順位とタイムスライスを決定



            20ms実行




       3番        1番          2番   4番

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

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




            割り振り
                   CPU0




                   CPU1
 プロセス投入     割り振り
スケジューラが×で何が困る?
             8

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




            割り振り
                    CPU0




                    CPU1
 プロセス投入     割り振り

           いいPC買ったのに
          活用してくれない・・・
スケジューラが×で何が困る?
                 9

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

       選択




        CPU使用率        CPU使用率
           50%           50%




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

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

       選択




        CPU使用率         CPU使用率
           50%            50%




             CPU0

        同時実行プロセスのせいで
        動画がカクカクする・・・
スケジューラが×で何が困る?
                  11

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




         CPU使用率        CPU使用率
            90%           10%




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

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




         CPU使用率          CPU使用率
            90%             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のみ




             両方
     1のみ     OK
                       割り振り   CPU0

                                     両方
                                     OK
                       割り振り


プロセス投入
                              CPU1
スケジューリングポリシー
                            20

優先順位
           ポリシー名             リアルタイム    特徴
 高い                          /通常/その他
           FIFO              リアルタイム    自発的に離さない限り、
  OTHER                                CPUを使用し続ける
           RR(RoundRobin)    リアルタイム    同じ優先度のプロセス
                                       がある場合、ラウンド
                                       ロビン
           OTHER             通常        デフォルトポリシー
           BATCH             通常        バッチプロセス用
   BATCH
           IDLE              その他       nice値+19より優先度が
                                       低い




 低い
静的優先度
                      21


  リアルタイムプロセスの優先順位を決定
  値が小さいほど優先順位は高い
  絶対的な優先度
  1から99までの値をとる

                   ※便宜上、一般的にはノンリアルタイムで実行
リアルタイムプロセスの
                   されるプロセスのマスコットを使用しております
優先順位は静的に決定
              11           15          50    75


              1番           2番          3番   4番

                                CPU0
nice値とCPU使用時間
                           22

  通常プロセスの優先度とタイムスライスを決定
  優先度はCPU使用時間とnice値を掛け合わせて決定
  タイムスライスはプロセス間のnice値の割合で決定
  nice値は-20から19(デフォルトは0)


  通常プロセスの                           nice:10         nice:0
                 nice:0         CPU使用時間:10 ms
優先順位は動的に決定                                      CPU使用時間:30 s
             CPU使用時間:5 s




                1番                    2番              3番

                                   CPU0
スケジューリングに
           影響する項目おさらい
                    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でプロセスを起動
                                  99-20で計算
   $ sudo chrt -f -p 79 ./a.out
 実行中のプロセス(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

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

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

  • 1.
  • 2.
    自己紹介 2  山田 賢  北田 章  牧野 恵
  • 3.
    はじめに 3  今回の内容が直接お仕事に役立つ機会は多くないか も・・・  Linuxを愛用する立場として、Linuxのメリハリ術を 楽しむスタンスで聞いて頂けると幸いです
  • 4.
    目次 4  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
  • 5.
    スケジューラの概要 5 1. 各CPUにプロセスを割り振り 2. プロセスの優先順位とタイムスライスを決定 プロセス 割り振り スケジューラ CPU0 プロセス 割り振り プロセス投入 CPU1
  • 6.
    スケジューラの概要 6 1. 各CPUにプロセスを割り振り 2. プロセスの優先順位とタイムスライスを決定 20ms実行 3番 1番 2番 4番 CPU0
  • 7.
    スケジューラが×で何が困る? 7  仕事がたくさんあるのにCPUを使いきってくれない 割り振り CPU0 CPU1 プロセス投入 割り振り
  • 8.
    スケジューラが×で何が困る? 8  仕事がたくさんあるのにCPUを使いきってくれない 割り振り CPU0 CPU1 プロセス投入 割り振り いいPC買ったのに 活用してくれない・・・
  • 9.
    スケジューラが×で何が困る? 9  優先してほしいプロセスを優先しない 選択 CPU使用率 CPU使用率 50% 50% CPU0
  • 10.
    スケジューラが×で何が困る? 10  優先してほしいプロセスを優先しない 選択 CPU使用率 CPU使用率 50% 50% CPU0 同時実行プロセスのせいで 動画がカクカクする・・・
  • 11.
    スケジューラが×で何が困る? 11  条件が同じプロセスに対して同じ時間CPUを使わせ ない 選択 CPU使用率 CPU使用率 90% 10% CPU0
  • 12.
    スケジューラが×で何が困る? 12  条件が同じプロセスに対して同じ時間CPUを使わせ ない 選択 CPU使用率 CPU使用率 90% 10% CPU0 私のJavaプログラムの実行 だけいつも遅い・・・
  • 13.
    一般的なスケジューラの目的 13  CPU使用率の公平性を保証  ユーザ間  プロセスグループ間  プロセス間  CPU間  etc.,  性能の向上  次に実行するプロセスを高速に決定  ハードウェア特性を活用するCPU間振り分け、実行順序、タイムスラ イスの決定  etc.,
  • 14.
    スケジューラの インパクト事例 14  gihyo.jp, “2010年11月18日 "ミラクルパッチ"に Linusも大喜び!Linuxカーネルを高速化させた233 行のコード”,  http://gihyo.jp/admin/clip/01/linux_dt/201011/18 = = 以前は対等に扱っていたプロセスを・・・
  • 15.
    スケジューラの インパクト事例 15  gihyo.jp, “2010年11月18日 "ミラクルパッチ"に Linusも大喜び!Linuxカーネルを高速化させた233 行のコード”,  http://gihyo.jp/admin/clip/01/linux_dt/201011/18 用途に合わせて自動的に グループ化
  • 16.
    スケジューラのことを 知って嬉しいこと 16  急いで実行すべき仕事の優先順位を上げられる  動画再生アプリケーションなど  急いでいない仕事の優先順位を下げられる  周囲からの好感度向上(?)  Linux自体に詳しく慣れる
  • 17.
    目次 17  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
  • 18.
    スケジューリングに 影響する項目 18  CPUアフィニティ  スケジューリングポリシー  静的優先度  nice値とCPU使用時間  etc.,
  • 19.
    CPUアフィニティ 19  プロセスをどのCPUで実行するか指定 0のみ 両方 1のみ OK 割り振り CPU0 両方 OK 割り振り プロセス投入 CPU1
  • 20.
    スケジューリングポリシー 20 優先順位 ポリシー名 リアルタイム 特徴 高い /通常/その他 FIFO リアルタイム 自発的に離さない限り、 OTHER CPUを使用し続ける RR(RoundRobin) リアルタイム 同じ優先度のプロセス がある場合、ラウンド ロビン OTHER 通常 デフォルトポリシー BATCH 通常 バッチプロセス用 BATCH IDLE その他 nice値+19より優先度が 低い 低い
  • 21.
    静的優先度 21  リアルタイムプロセスの優先順位を決定  値が小さいほど優先順位は高い  絶対的な優先度  1から99までの値をとる ※便宜上、一般的にはノンリアルタイムで実行 リアルタイムプロセスの されるプロセスのマスコットを使用しております 優先順位は静的に決定 11 15 50 75 1番 2番 3番 4番 CPU0
  • 22.
    nice値とCPU使用時間 22  通常プロセスの優先度とタイムスライスを決定  優先度はCPU使用時間とnice値を掛け合わせて決定  タイムスライスはプロセス間のnice値の割合で決定  nice値は-20から19(デフォルトは0) 通常プロセスの nice:10 nice:0 nice:0 CPU使用時間:10 ms 優先順位は動的に決定 CPU使用時間:30 s CPU使用時間:5 s 1番 2番 3番 CPU0
  • 23.
    スケジューリングに 影響する項目おさらい 23  実行CPU  CPUアフィニティ  実行順序  スケジューリングポリシー  静的優先度  nice値とCPU使用時間  CPU使用時間(タイムスライス)  スケジューリングポリシー  nice値
  • 24.
    目次 24  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
  • 25.
    スケジューラで遊ぼう お仕事メリハリ術デモ 25  コマンドラインからスケジューリングに影響する 項目を変更してみましょう  紹介するコマンド  taskset  chrt  nice  renice
  • 26.
    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
  • 27.
    chrt 27  プロセスのポリシーと静的優先度を変更  静的優先度の設定では1から99の範囲で値を指定  99が最大の優先度(静的優先度の1)となる  FIFOかつ静的優先度20でプロセスを起動 99-20で計算 $ sudo chrt -f -p 79 ./a.out  実行中のプロセス(ID:30621)をBATCHに設定 $ chrt -b -p 0 30621  実行中のプロセス(ID:30621)のポリシーと優先度を 確認 $ chrt -p 30621
  • 28.
    nice 28  nice値をプログラム起動時に指定  一般ユーザはnice値を下げれない  高い値ほど他のプロセスにCPUを譲るのでniceな値  nice値10を指定してプログラムを起動 $ nice –n 10 ./a.out  nice値にマイナスを指定したい場合はsudoで実行 $ sudo nice –n -10 ./a.out
  • 29.
    renice 29  実行中のプロセスのnice値を変更  プロセスID:4559のnice値を+10 $ renice +10 4559  実行ユーザがyahooのプロセスのnice値を20に変更 $ renice 20 -u yahoo
  • 30.
    まとめ 30  プロセスはプロセスに設定された様々な項目に基づ いてスケジューリングされる  上記の項目はコマンドラインから変更可能  Linuxで遊べる作業効率化  静的優先度の表示や設定基準値などは、コマンドにより異な るので注意  但し、極端な設定は他のプロセスやユーザの迷惑になりうる ので程々に…
  • 31.
    目次 31  スケジューラの概要と目的  スケジューリングに影響する項目  スケジューラで遊ぼうお仕事メリハリ術  デベロッパーの方へ
  • 32.
    デベロッパーの方へ 32  YJDN (Yahoo! JAPAN Developer Network)  Yahoo! JAPANのサービスを利用するAPIを提供しています  http://developer.yahoo.co.jp/  Tech Blog  Yahoo! JAPANの動向や最新情報を発信しています  http://techblog.yahoo.co.jp/
  • 33.