...

平成 24 年度情報処理学会関西支部支部大会に参加して

by user

on
Category: Documents
1

views

Report

Comments

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 ―
Fly UP