計算資源共有利用のための 計算資源プールの実現

計算資源共有利用のための
資源プールの実現
慶応義塾大学 環境情報学部 4年
藤村 浩士
背景・問題意識

高速なネットワークに常時接続される高性
能計算機が急増

しかし、これらの計算機は休祭日中はユー
ザに利用されずアイドル状態
(例: SFCの特別教室)
計算資源が有効利用されていないのでは?
背景・問題意識2

計算機の多様化
PC・ワークステーション→高速化
PDA・Wearableコンピュータ→小型化
JavaRing
6K byte RAM
8-16bit Processor
小型コンピュータが高性能コンピュータの
処理能力を利用する方法はないのか?
研究目的

負荷分散による組織内での計算資源の
最適利用

小型携帯端末の計算処理支援

並列計算による処理の高速化
Mebius Space:
システムの概要1
z
z
z
supply
consume
z Supporter
z
z
Client
Pool
Mebius Space:
システムの概要2
Worker
Client
サブシステムの構成1

M-Pool: サポートホストから提供された計算資
源を集約し、M-Client(後述)に分配する計算資
源プールのデーモン

M-Supporter: サポートホスト上でデーモンとし
て動作し、自らの計算資源の提供を行う

M-Client: Mebius Spaceを利用するアプリ
ケーションによってインスタンス化され、M-Pool
に対して計算資源を要求する
サブシステムの構成2

M-Worker: Mebius Spaceを利用するアプリ
ケーションプログラマによって拡張され、分散処
理させたい内容が実装される

M-SupporterInfo: サポートホストの状態情報
(ホスト名、OSタイプ、メモリ容量、ベンチマーク
値など)が格納される
システムの動作手順1
ーサポートホストの登録と計算資源要求のフェーズー
M-Supporter
1
2
M-Supporter
M-Client
M-Pool
M-Supporter
3
M-SupporterInfo
Object
システムの動作手順2
ー計算資源共有利用のフェーズー
User Application
1 Make an instance
6 Notify by
Man event
Worker
M-Supporter
M-Client
2 Registration
4 Execution
Finish
MWorker
Queue
Remote
Method
Invocation
5 Return Home
3 Migration
システムの特徴1

簡便性
– 遠隔ホストからアプレットによる動的な設定変更が可能
– 複数のM-Supporterを信頼できるM-Poolのアップレットによっ
て一括管理することが可能

安全性
– ローカルホスト上の資源(ローカルファイルやシステムプロパティ)
へのアクセスを制限することが可能

柔軟性
– M-Supporterは複数の計算資源提供ポリシを選択可能
– 「/tmp以下はアクセスを許可する」、」あるドメイン内のホストには
接続を許可する」など、柔軟にセキュリティレベルを設定すること
が可能
ポリシーファイルの記述例
grant signedBy "fuji",
codeBase "http://k2.ht.sfc.keio.ac.jp/~fuji/MebiusSpace/" {
permission java.io.FilePermission "/tmp/-",
"read, write, delete, execute";
permission java.util.PropertyPermission "user.name", "read";
permission java.util.PropertyPermission "user.hom", "read";
};
grant {
permission java.net.SocketPermission "*.ht.sfc.keio.ac.jp:1024-",
"accept, connect, listen, resolve";
};
grant signedBy "root" {
permission java.security.AllPermission;
};
システムの特徴2

大規模性
– 複数のM-Poolをツリートポロジで接続し,M-Supporterを分散
協調管理することが可能

位置透過性
– アプリケーションプログラマがM-Workerがリモートで実行される
ことを意識する必要なくプログラムすることが可能
未解決の問題

M-Workerのバックアップ、強制退去機能の実現
– 実現するためにはスレッドマイグレーションが
できなければならない

セキュリティマネジャでも抑制できないものがある
(Windowの表示など)

M-Workerが消費するCPUリソースを管理する方法
がない
コード記述例

サンプルコード
– 0から1億までに存在する素数を見つけるプログラム
– エラストテネスのふるいのアルゴリズムを使用
– M-Workerインスタンスを10個つくり、0~1000万-1、
1000万~2000万-1というように、それぞれに1000万
単位で素数探索を割り振る
– M-Workerはサポートホストに移動し探索を実行する
コード記述例1
―リモートメソッドをMworkerインターフェースの
サブクラスにに定義―
import jp.ad.wide.sfc.MebiusSpace.*;
import java.rmi.*;
public interface PrimeNumber extends MWorker{
public String start()throws RemoteException;
}
コード記述例2
-Mworker_Implサブクラスの実装/**
import jp.ad.wide.sfc.MebiusSpace.*;
import java.util.Vector;
*指定された範囲の素数の探索を開始する.
import java.rmi.*;
*PrimeNumberインターフェースに定義してあるので
*リモートメソッドとしてCallすることができる.
/**
*
*minNumからmaxNumまでの間に存在する
*@return 結果が格納されたベクタ
*素数を探すクラス.
*/
*/
public Vector start()throws RemoteException{
imp
public class PrimeNumber_Impl
//minNumからmaxNumまでの間に存在する素数を探し
extends MWorker_Impl implements PrimeNumber{
//結果をVectorに格納する.
・・・省略・・・
public PrimeNumber_Impl
return result;
(String name, int minNum, int maxNum)
throws RemoteException {
super(name);
this.minNum = minNum;
this.maxNum = maxNux;
}
}
}
コード記述例3
import jp.ad.wide.sfc.MebiusSpace.*;
public class Sample implements MWorkerListener{
public void start(){
try{
//MClientのインスタンス化、第1引数にMClientの名前,
//第2引数にMClientの設定ファイルのパスを指定する
MClient_Impl mci = new MClient_Impl
("MClient", "/home/fuji/MebiusSpace/MClient.conf");
mci.addMWorkerListener(this); //イベントリスナを指定する
//MClientのQueueの中にMWorkerを追加
for(int i=0; i<10; i++)
mci.addMWorker(new PrimeNumber_Impl
("PrimeNumber_"+i, 10000000*i, (10000000-1)*(i+1)));
}catch(java.rmi.RemoteException e){
e.printStackTrace();
System.exit(0);
}
}
コード記述例3 続き
/**
*MWorkerがリモートホスト上にマイグレーションできたら
*MWorkerのリモートハンドラがイベントとして返される.
*
*/
public void mworkerAvailable(MWorker mworker){
try{
Vector result = ((PrimeNumber)mworker).start(); //リモートメソッドをコール
}catch(java.rmi.RemoteException e){
e.printStackTrace();
}
System.out.println //結果を表示
("Done!\n"+
"
Name : "+mworker.getName()+"\n"+
"
Supporter's HostName : "+mworker.getMSupporterHostName()+"\n"+
"
I have "+result.size()+" prime numbers");
}
public static void main(String argv[]){
Sample sample = new Sample();
sample.start();
}
}
実行結果
Done!
Name: PrimeNumber_0
Supporter’s HostName: k2.ht.sfc.keio.ac.jp
I have 1245233 prime numbers
Done!
Name: PrimeNumber_3
Supporter’s HostName: wanwan.sfc.wide.ad.jp
I have 3495321 prime numbers
Done!
Name: PrimeNumber_13
Supporter’s HostName: dali.ht.sfc.keio.ac.jp
I have 632323 prime numbers
Done!
Name: PrimeNumber_1
Supporter’s HostName: localhost
.
.
.
.
まとめ

Mebius Spaceの紹介
– システム構成
– 動作手順
– 特徴

未解決の問題点

コード記述例