FC2ブログ

プロフィール

大山恵弘

  • Author:大山恵弘
  • 公式なサイトはこちら

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

ブログ内検索

RSSフィード

リンク

FC2カウンター

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【リカバリ】 Building a Reactive Immune System for Software Services 【エミュレータ】

In USENIX Annual 2005.
http://www.usenix.org/events/usenix05/tech/general/sidiroglou.html

プログラム(主にサーバ)の障害を自動的に修復するためのシステム。

セグメンテーション違反やゼロ除算などの例外が発生したら、引き続く実行では、例外を発生させた命令を取り囲むコード部分をエミュレータ上で実行する。

エミュレータ実行に移る前に、プログラムの状態のスナップショットを取る。エミュレータ実行から戻る際に、エミュレータ上で動いているプログラムを生で実機上で動くように復元する。

エミュレータ上では、障害を起こす可能性のある命令の実行を検査しながら実行する(たとえばゼロ除算が発生したなら、div命令を監視しながら実行する)。エミュレータ上実行で、次に実行される命令で例外が発生することが判明したら次の処理を行う。(1) 例外が発生した関数内で行われたメモリの更新を全部ロールバック、(2) その関数をリターンさせる。返り値は、エラーコードっぽいものにする。たとえばint型の関数なら-1を返すとか。

エラーを返させてもやはり障害が発生する場合には、エミュレータ実行の範囲を広げる。その関数を取り囲む関数もエミュレータ実行するとか。

想定外のエラーを想定内のエラーに変換して、プログラム内にあるハンドラにあくまで例外処理をさせるという手法。彼らいわく、Error Virtualization。

x86エミュレータSTEMを実装して実験した。エミュレータはCライブラリの形をしており、守りたいプログラムにリンクして使う。エミュレータ実行開始、エミュレータ実行終了みたいなAPIが準備されている。

Apache, sshd, Bindで実験。leaf関数を人為的に書き換えて適当にアボートさせても、どのサーバもかなりの確率(9割くらい)で、稼動し続けることを確認した。また、実際の攻撃コードを用いて攻撃したところ、いずれのサーバも稼動し続けることを確認した。他に、性能への影響も計測しています。

あやしげなところもあるが、おもしろいアイデアがちりばめられていて、いい感じの論文。

部分的にエミュレータ実行するという点につい注意をひかれてしまうが、エミュレータ実行は一手段であって、それに目を奪われすぎると、本質を見失う。

エミュレータ実行してロールバックみたいな話は多くの人が考えているはずだし、実際論文もたくさん出てる。この論文の貢献は、むしろ、例外を発生させる(た)関数を、強制的に適当な値でリターンさせるというアイデアの提案ではないかという気がします。Failure Oblivious Computingの大掛かり版みたいな。

横山くんのチェックポイントシステムの研究あたりが、まさにこのあたりの応用にドンピシャリで効いてきそうな気がしています。
スポンサーサイト

<< 【耐故障】 Handling Cascading Failures: The Case for Topology-Aware Fault Tolerance 【分散システム】 | ホーム | 【仮想化】 Self-migration of Operating Systems 【マイグレーション】 >>


コメント

コメントの投稿


管理者にだけ表示を許可する

 BLOG TOP 


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。