Comments
Description
Transcript
平成 24 年度情報処理学会関西支部支部大会に参加して
特集 学生の研究活動報告−国内学会大会・国際会議参加記 17 平成 24 年度情報処理学会関西支部支部大会に参加して 篠 本 一 昌 Kazumasa SHINOMOTO 情報メディア学専攻修士課程 1年 2. 1.Linux 上で動作する Java 仮想マシンのスレ 1.はじめに ッド管理 私は,2012 年 9 月 21 日に大阪大学中之島センタ Linux では,各々のスレッドに静的優先度と nice ーで行われた平成 24 年度情報処理学会関西支部支 値の二つの優先度を設定することができる.静的優 部大会に参加した.私はこの大会のものづくり基盤 先度は,通常 0 に設定されており,schedsetscheduler コンピューティングのセッションで「Java スレッ システムコールを用いて 0 から 99 の範囲の値に変 ドへの Linux スケジューリングを活用するための 更することができる.スケジューリングにおいて 機能の提供」という題目で発表した. は,静的優先度の高いスレッドから優先して実行権 を与えられる.また,スケジューリングはプリエン 2.研究内容 ティブに行われ,より高い優先度を持つスレッドが 最も広く利用されている仮想マシンのひとつに Java がある.Java 仮想マシンもスレッドをサポー 実行可能になると,実行中のスレッドは実行権を取 り上げられる. トしているが,3 D 映像の描画処理などのような nice 値は,setpriority システムコールを用いて−20 CPU 負荷の思い処理を行いながらユーザ操作の応 から 19 の範囲の値に変更することができる.スケ 答性を確保する場合などにはスレッドの動作を制御 ジューリングにおいては,タイムクォンタムの計算 することが必要になる.スレッドの動作を制御する にのみこの値は使用され,次に実行権を与えるスレ とき,組み込み用途など厳密に時間制約を満たす必 ッドの選択には直接的には使用されない. 要がある場合には,RTSJ などの拡張された Java を Linux 上で動作する HotSpot では,OS が提供す 用いることが多い.しかし RTSJ はリアルタイムス るネイティブスレッドを作成し,これに Java スレ レッドのクラスを新たに追加するものであり,標準 ッドの処理を割り当てている.Java スレッドの優 のクラスライブラリを使用しているプログラムはそ 先度が変更された場合,setpriority システムコール の恩恵を受けることができない.これらのプログラ を用いて,ネイティブスレッドの nice 値を対応す ムを利用する場合には,標準クラスライブラリのス る Java スレッドの優先度に合わせて設定する.こ レッドを制御できることが望ましい. のため,HotSpot 上で,より高い優先度を持つスレ このような背景のもと,本稿では,まず,最も利 用されている Java 仮想マシンの実装の一つである ッドが実行可能状態にあっても,低い優先度を持つ スレッドに実行権が与えられる場合がある. HotSpot において,Java 仮想マシンが Linux の持つ 可視化ツールなどで,compute-bound な処理をし スケジューリング機能を有効に活用していない事に ている場合でもユーザ操作に対する応答性を確保し ついて指摘する.また,この問題を解決するために たいときなど,高い優先度の Java スレッドを必ず Java 仮想マシンに行った拡張について述べる. 優先して動作させたい場合がある.これを行うため ― 79 ― 表1 実験環境 プロセッサ Intel Pentium 4(3.20 GHz) 物理メモリ 1 GB カーネル Linux 2.6.32 Java 仮想マシン OpenJDK 1.7 に,Java スレッドの優先度に応じてネイティブス レッドに静的優先度を設定するよう HotSpot のスレ ッド管理部を拡張した.このとき,静的優先度の値 には Java スレッドの優先度と同じ値を設定するよ 図1 通常の仮想マシンで実験を行った場合の Java スレッドのカウンタの値の変化 図2 拡張した仮想マシンで実験を行った場合 の Java スレッドのカウンタの値の変化 うにし,スケジューリングポリシにはラウンドロビ ンを用いている. 2. 2.性能評価 Java スレッドがどのように動作しているのかを 調べるために,以下の処理を行うスレッドを同時に 複数動作させ評価を行った.本実験では,HyperThreading を有効にしたプロセッサを使用している ため一度に 2 つのスレッドが動作可能である.今回 使用した環境を表 1 に示す. (1)初期値が 0 であるカウンタを 1 ずつ増加させ る. (2)カウンタが 7000 万を越えると処理を終了する. カウンタは,整数型の変数であり,それぞれの 通常の仮想マシンで実験を行った場合と異なり,優 Java スレッドに固有のものである.本実験では,4 先度の高いスレッド T 3, T 4 が動作している間,優 個の Java スレッド T 1, T 2, T 3, T 4 を動作させた. 先度が低いスレッド T 1, T 2 のカウンタの値は変化 このとき,各スレッドの優先度はそれぞれ 1, 3, 7, 9 せず 0 のままである.これは,各 Java スレッドに である. 対応するネイティブスレッドの静的優先度を適切に 通常の仮想マシンで実験を行った場合の各 Java 設定することによって,OS よる静的優先度に基づ スレッドのカウンタの値の変化を図 1 に示す.グラ くスケジューリングが行われるようになったためで フの横軸は経過時間,縦軸はカウンタの値を示して ある. いる.優先度の高いスレッド T 3, T 4 の処理が終了 する以前から,より優先度の低いスレッド T 1, T 2 3.おわりに が動作している.このことから,優先度の高いスレ 今回の発表で多くの方々に意見をいただき大変参 ッドを完全に優先して実行することはできていない 考になりました.ご指摘いただいた点を再度熟考 ことが分かる. し,今後の研究に活かしていきたいと思います.最 拡張 し た 仮 想 マ シ ン で 実 験 を 行 っ た 場 合 の 各 Java スレッドのカウンタの値の変化を図 2 に示す. 後に今回の発表にあたりご指導いただいた芝研究室 の方々に深くお礼申し上げます. ― 80 ―