修論タイトル:「継続の共有化による継続ベースWebサーバのメモリ使用量削減」 (2008年度 修士論文)

氏名:新宮 澄夫

概要:

従来の古典的なCGIによるWebアプリケーションでは,ユーザとの対話のたびにプログラムの実行を終了する.中断したプログラムを再開するためには,セッションオブジェクトなどに状態を保存,復元する処理が必要である.状態を管理する処理は,開発者が明示的に記述しなければならず,大きなアプリケーションではその管理が煩雑である.また本来行いたい処理以外のコードが埋め込まれるためプログラムの可読性が悪くなるという欠点がある.継続ベースWebサーバでは第一級継続を利用することで状態の保存と復元を言語処理系にまかせることができ,開発者の負担が軽減される.また継続ベースWebサーバによるWebアプリケーション開発では,あたかもコンソールアプリケーションを記述するかのように,本来行いたい処理の流れを記述すればよい.しかし可読性が良くなるという利点がある一方,保存する継続オブジェクトのサイズが大きいために,ユーザとの対話が多くなるとメモリ使用量が大きくなるという欠点がある. Webアプリケーションでは多くの対話が発生するとそれだけ多くの状態を保存しなければならない.しかし継続ベースWebサーバが保存する継続は,CGIによるWebアプリケーションで明示的に保存している状態と比べサイズが大きい.継続は生成時の制御スタックに積まれている制御情報と局所変数の値を含む.しかしプログラムの字面上同じ場所で生成される継続の内容は同じである可能性が高い.本研究では,同じ制御情報を持つ継続を共有化することで,継続ベースWebサーバのメモリ使用量を削減する手法を提案する.  字面上同じ場所で生成される継続でも内容が異なる場合もある.継続生成時における制御スタックのフレームの並びが異なる場合は共有化が困難であるため,フレームの並びが常に同じである継続生成についてのみ共有化することにした.継続生成時のフレームの並びは1CFAという抽象解釈による制御フロー解析によって調べることができる.また生成のたびに局所変数の値が異なる可能性もあるので,そのような局所変数については共有化せずに保存することにする.そのため共有化できない局所変数を調べるための解析が必要となる.  本研究ではScheme言語処理系に継続の共有化機能を実装した.さらに時間的オーバーヘッドや継続ベースWebサーバにおけるメモリ使用量について,従来法と提案法を比較検討した.その結果,提案法である継続の共有化が継続ベースWebサーバのメモリ使用量削減に効果があることが確認できた.また実験と検討を通してどんなプログラムでは共有化が困難か,共有化する場面を増やすためにはプログラムにどんな工夫を行えばよいかなどの知見を得た.


[修論pdf][研究室内部向け情報]