Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~

Slides:



Advertisements
Similar presentations
LZ圧縮回路の設計とハード・ソフト 最適分割の検討 電子情報デザイン学科 高性能計算研究室 4回生 中山 和也 2009/2/27.
Advertisements

プログラミング基礎I(再) 山元進.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
Java2セキュリティ, クラスローダー,ベリファイア
プログラミングIII演習 第1回目.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
変更文の移動を可能にした 静的単一代入形式上の部分冗長性除去
進捗 Javaバイトコード変換による 細粒度CPU資源管理
型付きアセンブリ言語を用いた安全なカーネル拡張
実行時のメモリ構造(2) Javaスタック内動作他
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
独習Java ・ 8.1  例外処理 ・ 8.2  catch ブロックの検索  12月 5日    小笠原 一恵.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アスペクト指向言語による 例外処理の記述方法の改善
Portable Resource Control in Java The J-SEAL2 Approach
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
Integer Java Virtual Machine
Java Bytecode Modification and Applet Security
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
動的データ依存関係解析を用いた Javaプログラムスライス手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
バイトコードを単位とするJavaスライスシステムの試作
アルゴリズムとデータ構造 2010年7月26日
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
7.一次元ダクトの消音制御系における低コスト化
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
new Calc(7,3).divInt()実行前
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
JAVAバイトコードにおける データ依存解析手法の提案と実装
マイグレーションを支援する分散集合オブジェクト
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
静的情報と動的情報を用いた Javaプログラムスライス計算法
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
同期処理のモジュール化を 可能にする アスペクト指向言語
アルゴリズムとデータ構造1 2008年7月24日
アルゴリズムとデータ構造 2013年7月1日
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
アルゴリズムとデータ構造1 2009年6月15日
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
アルゴリズムとデータ構造 2010年6月17日
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
ねらい 数値積分を例題に、擬似コードのアルゴリズムをプログラムにする。
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~ hayami

背景 Javaの普及・用途の多様化 信頼できないコードも安全に実行したい アプレット Security Manager, Verifier… CPU、メモリといった資源の管理が不充分 悪意のあるプログラムが資源 を独占する可能性がある

本研究の目的 ユーザレベルでCPU資源を管理 Management = Accounting + Restriction* 資源を独占しているプログラムに対処 * ” + Reservation” も考えられる

発表の概要 アプローチ 問題の定式化 アルゴリズムの提案 実装・実験 関連研究 卒論からの進展・TODO 今後の予定

アプローチ JVMを改変 OSの機能を利用 バイトコード変換 命令を実行しながら直接資源を管理 直接的 OSの機能を利用 native codeを使用してOSの資源管理機能を利用 特定のOSに限定される。ポータビリティが悪い バイトコード変換 資源管理を適用する対象プログラムを変換 既存のどのJVMでも動作 JIT(Just in Time Compiler)の恩恵にあずかれる 柔軟性が高い ただし、実行時のオーバーヘッドは比較的大きい

CPURes.incrementAndCheck(3) バイトコード変換例 ソース class NullLoop {   public static void main(String[] args) { for (int i=0; i<100; i++)       ; } CPURes.incrementAndCheck(3) バイト コード Method void main(java.lang.String[]) iconst_0 istore_0 goto 36 iinc 0 1 iload_0 ldc #31 <Integer 100> if_icmplt 9 return iconst_3 invokestatic #34 <Method incrementAndCheck(int)>

変換を行う際の方針 プログラム中に適切なコードを挿入、実行命令数を動的にカウント オーバーヘッドは小さく 管理のきめ細かさを保証 1命令ずつカウントしていては話にならない 管理のきめ細かさを保証 カウンタの値と実際のカウントがあまりに乖離するのは不都合 カウントは正確に

対象プログラムのモデル化 ~コード挿入コストの定義~ Control Flow Graph(CFG)でモデル化 Basic Block → Node 制御の移動 → Edge Blockの実行頻度 → 重み iconst_0 istore_0 goto 8 iinc 0 1 iload_0 ldc #1 <Integer 100> if_icmplt 5 return 1 100 101 コード挿入コスト Ctotal = (コードを挿入したNodeの 重みの総和 重複を許す)

「きめ」に関する制約条件 ~Lmax制約~ e.g. Lmax制約はループ中に最低1つはコードを挿入することを要請    : インクリメントfreeの間隔    :「きめ」に関する定数

問題の定式化(1) 入力: CFG 重み 出力: Lmax制約を満たし、かつ実行命令数を正確にカウントするようなコード挿入のうち、コストCtotalを最小にするようなもの

問題の定式化(2) 新たに2|V|個の変数を導入 cv: vin,voutから一意に定まる部分コスト 1 4 2 3 1in 1out … 新たに2|V|個の変数を導入 vin: vの先頭における真のカウントとのズレ vout: vの末尾における真のカウントとのズレ cv: vin,voutから一意に定まる部分コスト

問題の定式化(3) 「Edgeにはコードを挿入しない」条件(VFreq(G,vpl)) のもと、全体のコスト を最小化せよ

変換アルゴリズム(案) 全探索で厳密解を求める wvの大きいところから決めていく いくつかの制約を緩和して近似 EachBlock ∀vin,vout = 0とする

例題 v(lv,wv) 問題: Lmax=10, 1in=0 制約: 1in=0 2in=1out=3out 3in=2out=4in 1(5,1) 4(5,1) 2(5,101) 3(1,100) 制約:  1in=0 2in=1out=3out 3in=2out=4in 0≦1in,1out,…,4in,4out<Lmax の下、 Ctotalを最小にするような整数 1in,1out,…,4in,4outを計算せよ ※解が求まれば最適なコードの 挿入位置は簡単に決定できる

EachBlock 各ブロックの末尾に挿入 v(lv,wv) Ctotal = 1+101+100+1 問題: Lmax=10, 1in=0 1in=1out=,…,=4in=4out=0 は制約を満たすが最適解ではない Ctotal = 1+101+100+1 = 203 1(5,1) 2(5,101) 4(5,1) 3(1,100)

wvの大きいところから決めていく 重み最大のノードから決定 Ctotal = 1+100+1 最適解と一致 v(lv,wv) 問題:   Lmax=10, 1in=0 v(lv,wv) 重み最大のノードから決定 2in=0 (→1out=3out=0) 2out=5(→4in=3in=5) Ctotal = 1+100+1 = 102 最適解と一致 1(5,1) 2(5,101) 4(5,1) 3(1,100)

実装 JOIE(バイトコード変換ツール)を利用 使い方 Pure Java クラスローダの機能を利用しロード時に変換 e.g. > Java Main –a プログラム名 arg1 arg2 … > Java Main –a Hello

実験 クラスロード時間と総実行時間を計測 アルゴリズム 環境 -classic と -hotspot の2通り Each Block(他のアルゴリズムは未実装) 環境 K6-2 450MHz, mem 128M, Win98, Java2 SDK1.3 Fib: Naïveな再帰でfib(35)を計算 Linpack: floatのベンチマーク Caffeine: sieve, loop, logic, string, float, method… Raytrace: レイトレ(Frame版) JLex: A Lexical Analyzer Generator for Java

実験結果(classic) #class 挿入前 (msec) 挿入後 Load Total Fib 1 440 16,800 550 51,410 Linpack 530 1,040 750 1,790 Caffeine 11 570 24,180 1,710 26,240 RayTrace 17 660 275,230 2,140 383,600 JLex 24 680 2,660 4,480 7,700

実験結果(HotSpot) #class 挿入前 (msec) 挿入後 Load Total Fib 1 480 1,650 550 2,860 Linpack 470 660 770 970 Caffeine 11 510 19,220 1,720 21,500 RayTrace 17 890 55,400 2,400 71,500 JLex 24 650 1,580 3,300 4,580

関連研究 資源管理 コード挿入アルゴリズム バイトコード変換ツール Jres[Czajkowski,Eicken 98] Punctual Polling[田中 01] バイトコード変換ツール JOIE[Cohen,Chase 98]

卒論後の進展 使い勝手の向上 コード挿入アルゴリズムの改良 より詳しい性能評価 クラスローダを利用して実行時に変換 ノードの重みを考慮 実行命令数の正確なカウント より詳しい性能評価 さまざまなベンチマークで実験・評価

TODO コストの最小化がNP完全であることの証明 アルゴリズム 実装 名前がほしい 流量保存則を満たすグラフに限定してもNP完全か? 拡張 Intraprocedural → Interprocedural ループ展開 実装 現在“java”で始まるパッケージには変換を不適用(クラスローダに関する制約) 簡単な最適化(メソッド呼出でincrementは酷い) 名前がほしい

今後の日程 6/13(水) 本日 7/3 (火) 論文提出締め切り 7/25(水) ~ 27(金) SWoPP@おきなわ

To be continued...