IaaS 環境におけるマルチプロセスアプリケーションを考慮した仮想化基盤の動的構成管理に関する研究
M2015SE012 田尻翔太
指導教員：野呂昌満

1

はじめに物理マシンの物理的な並列度を超える並列度で動作しているような場合，別の物理マシンへコンテナや VM を移動さインターネット経由でさまざまなサービスを利用者に提せ並列度を向上できる．具体的には，アプリケーションの供するクラウドコンピューティング（クラウド）が普及しパフォーマンスを向上させるためにアプリケーションの特ている．例えば IaaS クラウドでは，仮想化技術を用いて性を考慮しコンテナまたは軽量 OS を用いた VM でアプリ計算基盤そのものをサービスとして提供している．利用者ケーションを動作させるように動的に再構成する．本稿では仮想マシン (VM) 上にオペレーティングシステム (OS)は，試作したコンテナと VM の動作状況の取得機能についなどのシステムソフトウェアを含めて計算機環境を構築て述べ，いくつかのアプリケーションを用いた実験によりし自由にアプリケーションを動作させることができる．例

コンテナや VM の構成を変更することによってパフォー

えば，Web サーバのようなアプリケーションを動作させマンスが向上することを示す．

れば，利用者自身がクラウドを用いてサービスを提供することができる．また，複数の VM を利用して Hadoop やSpark といった分散並列計算環境を IaaS クラウドを使って実現することもできる．

IaaS クラウドで用いられる仮想化技術

2IaaS クラウドを構築しサービスを提供するための仮想化環境が提案されている．本節では，ハイパーバイザ型仮IaaS クラウドで VM を利用する際の問題点の一つは， 想化，コンテナ型仮想化，軽量 OS を用いた VM についてパフォーマンスである．VM を利用する際には，一般に各 説明する．
物理マシン上のハイパーバイザを利用して VM を動作さ 2.1 ハイパーバイザ型仮想化せる．各 VM 上では，OS が動作しており，プロセスのス
ハイパーバイザ型仮想化では，複数の VM がハイパーバケジューリングを行っている．そこで，ハイパーバイザのイザによって仮想化され，その上で OS とアプリケーショ
VM のスケジューリングと OS のスケジューリングが二重ンを動作させる（図 1）．各 VM 上では異なる OS を動作さに行われパフォーマンスを低下させてしまう．
せることができる．ハイパーバイザが VM をスケジュー
VM のパフォーマンスを改善するためのさまざまな研究リングし，VM 上で OS がプロセスをスケジューリングすが行われている．コンテナ型仮想化 [1, 2] は，ハイパーバる二重のスケジューリングが起こっている．
イザを用いない通常の OS 上でアプリケーションの実行環境を隔離して動作させる技術である．ゲスト OS を必要とVM
VMしないので二重のスケジューリングが解消されパフォーマンスが向上する．一方 Unikernel[3] では，VM 上のゲスト

アプリ
ケーション

OS によるスケジューリングのオーバヘッドを削減するた
めに Library OS[4] などの軽量 OS を用いて単一のアプリケーションを単一の VM として動作させる．VM 上のゲ
スト OS によるアプリケーションのスケジューリングを削・・・・・・

OS減できるので，パフォーマンスが向上する．

アプリ
ケーションOSハイパーバイザ

既存の IaaS クラウド基盤ソフトウェアは，コンテナやVM に割り当てるメモリや CPU などの計算資源の情報かハードウェアら必要な計算資源を提供できる物理マシンを選択し，そのマシン上にコンテナや VM を動作させる．この際，コンテ

図 1 ハイパーバイザ型仮想化の構成

ナや VM 上で動作させるアプリケーションの特性を考慮しないので，並列計算を行うアプリケーションのような高い並列度で動作させるべきコンテナや VM が同一の物理マシンで動作する場合，物理的な並列度が低下してしまうという問題がある．

2.2

コンテナ型仮想化

通常の OS 上でアプリケーションを隔離した環境で動作させる（図 2）．ハイパーバイザが動作していないのでハイ

本研究では，アプリケーションの特性に応じて動的に適パーバイザ型仮想化における VM をスケジューリングす切な仮想化環境を選択することのできる IaaS クラウド基るオーバヘッドが解消される．ハイパーバイザ型仮想化に盤を提案する．コンテナや VM 上のアプリケーションがおいて VM でアプリケーションを動作させる場合よりも高いパフォーマンスが得られる．Linux カーネルの機能をケーションは単一で，さらにトレースツールを動作させる

使ってコンテナの管理を行う Linux Containers[1] やコンことはできないので軽量 OS を使った VM の動作状況はテナの作成だけではなくイメージや複数ホストマシンの管ハイパーバイザの機能を使って取得する．トレースツール

理を行うことができる Docker[2] などが開発されている．

は，通常の OS 上で動作させることができ，通常の OS 上やコンテナで動作するアプリケーションの動作状況を取得

コンテナ

コンテナすることができる．例えば，ハイパーバイザの機能を使うことで，各 VM の CPU の使用率やディスクやネットワー
クの I/O の状況が取得でき，トレースツールではスレッド・・・・・・の多重度やプロセススケジューリングの待ち時間を取得す
アプリ
ケーション

アプリ
ケーションることができる．

3.2

OS

VM 構成の変更

動作しているアプリケーションの特性に応じてパフォーマンスがより高くなる仮想化環境で動作させる．コンテナ

ハードウェアで動作させる方がパフォーマンスが高い場合にはコンテナ

図 2 コンテナ型仮想化の構成で動作させ，軽量 OS を使った VM で動作させた方が高い
場合には VM で動作させる．
また，動作させるアプリケーションによっては複数の2.3

軽量 OS を用いた VM

コンテナ型仮想化とは異なりゲスト OS のスケジューリ

VM やコンテナを使って構成されるので，パフォーマンスが向上する配置になるように移動する．図 4 はコンテナングを削減するために図 3 のように VM 上で軽量 OS をの配置を変更している例である．並列度の高いアプリケー動作させ，その上で単一のアプリケーションを動作させる

ションが 1 つのホストマシンが集中してパフォーマンスというクラウドの構成法が提案されている [3]．VM 上でが低下している場合には複数の物理マシンを使ってアプリのプロセスのスケジューリングオーバヘッドが削減できるケーション構成し並列度を上げる．しかし，コンテナ間でが，軽量 OS 上のアプリケーションは使用する OS によっ通信を行っているようなアプリケーションは，同一ホストて実装言語やライブラリが制限されるのでユーザが自由にマシン上で動作させることでアプリケーションの並列度はアプリケーションを実装することはできない．

低下するが，通信のオーバヘッドが小さくなりパフォーマンスが向上する場合がある．

VM

VM

コンテナ

アプリ
ケーション

・・・・・・

コンテナ

コンテナ

コンテナ

アプリ
ケーション
軽量OS

軽量OS
ハイパーバイザOS

ハードウェアハードウェア

図 3 軽量 OS を用いた VM の構成

仮想化基盤の構成を変更する IaaS クラウド基盤

3コンテナ

コンテナ

コンテナ

コンテナ

本研究では，アプリケーションの動作状況を考慮してVM 構成を動的に変更できる IaaS クラウド基盤を提案する．本節では，その概要について述べる．本 IaaS クラウOS

OS

ハードウェアハードウェアド基盤の特徴は，アプリケーションの監視を行う部分と，コンテナや VM の構成を動的に変化させる部分である．

3.1

アプリケーションの監視

ハイパーバイザの機能やトレースツールを使って動作状況を取得する．軽量 OS を使った VM では動作するアプリ

ネットワーク

図 4 分散させて動作させる

表 1 PC の仕様

プロトタイプシステムの実装

4CPU

提案したシステムの有効性を確認するために，プロトタコア数

イプシステムを実装した．Xen ハイパーバイザ [5] の機能

メモリを使って各 VM の CPU 使用率と I/O の状況を取得するツールを作成した．ハイパーバイザからは VM 上のアプ

HDD 容量OSリケーションの動作状況を取得することができないが，単ネットワーク一のアプリケーションを動作させる軽量 OS を使った VM

表 2 VM の仕様の動作状況を取得した場合には，CPU を多く使うアプリ

CPU コア数

ケーションや I/O を多く行うアプリケーションが動作しメモリている VM であることが推測できる．

HDD 容量また，proc ファイルシステムからアプリケーションの動OS作状況を取得するトレースツールを作成した．proc ファ
イルシステムからはスレッドの多重度，I/O の待ち時間，スケジューリングの待ち時間といったアプリケーションのTM
RIntel⃝Core
i7-4770 3.4GHz
4 コア 8 スレッド
16GB
1TB
Ubuntu Server 14.04.5 64bit
1000BASE–T

ハイパーバイザ

2 コア
2GB
32GB
Ubuntu Server 16.04.1 64bit
OSv 0.24
Xen 4.7.1

表 3 コンテナの仕様動作状況を取得することができる．通常の OS 上やコンテナで動作しているアプリケーションの動作状況を取得する

CPU コア数ことで，多重度の上がっているアプリケーションや待ち時メモリ間の長いアプリケーションを判断できる．

コンテナ

2 コア
2GB
Docker 1.6.2

今回は，コンテナや VM の構成を動的に変化させる機構は実装していない．Unikernel には，1 つのアプリケー
ションコードから通常の OS 上やコンテナで動作する実行ファイルと軽量 OS を用いた VM のイメージファイルを作成するコンパイラが実装されているものがある．このコンパイラを利用して，動的に構成を変化させる機能を実装できると考えている．

実験

55.2.1

実験内容

Java のバージョン 1.8.0 111 と Apache Spark のバー
ジョン 2.0.1 を用いてモンテカルロ法で円周率の近似値を求める並列計算を行うアプリケーションを動作させた．各計算ノードは互いに通信しながら計算を行う．通常の OSが動作する VM を用いる場合とコンテナを用いる場合と軽量 OS を用いた VM を用いる場合とで計算時間を比較

アプリケーションの特性毎にどちらの仮想化環境で動作した．Spark は計算処理をオンメモリで行うが，今回動作させることでパフォーマンスが高くなるかを明らかにするさせるアプリケーションに必要なメモリは約 730MB で，必要がある．また，コンテナや VM をどのような配置で動どの仮想化環境で動作させた場合でもメモリは不足してい作させることでパフォーマンスが高くなるかを明らかにすない．

る必要がある．そこで，アプリケーションのパフォーマン
スがより向上する仮想化環境と配置を知るために実験を行なった．

5.1

実験環境

表 1 に示される PC4 台を実験に使用した．仮想化ソフ
トウェアに Xen と Docker を使用し，動作させる通常の

5.2.2

実験結果

1 ホストマシンあたりの VM またはコンテナ数を変化させ計算時間を測定した．それぞれ 10 回ずつ計測を行い計算時間の平均値を求めた．その実験結果を図 5 に示す．
1 ホストマシンあたりのサーバ数に関係なく軽量 OS を使った VM でアプリケーションを構成し処理を行う場合の計算時間が他の 2 つの場合より短くなっている．しかし，サーバ数が 4 台以上では，物理的な並列度が上がらな

OS に Ubuntu，軽量 OS に OSv[6] を使用した．Xen を用いる場合の VM はすべて表 2 に示す同じ仕様とした． いので処理時間が短くならない．
Docker を用いたコンテナはすべて表 3 に示す同じ仕様と5.3 Web サーバを用いた実験した．

ネットワーク I/O を行うアプリケーションの動作を確

5.2

Spark を用いた並列計算認するために Tomcat を用いた実験を行った．
実験内容

CPU を多く使うアプリケーションの動作を確認するた
めに Spark を用いた並列計算を行うアプリケーションを動

5.3.1

作させた．

バを動作させる．Web サーバのベンチマークソフトである

Apache Tomcat のバージョン 8.0.32 を用いて Web サー

Ubuntu

140OSvDocker

成を変更する際には，ホストマシンの物理的な並列度を超えるような並列度でアプリケーションを動作させないよう120に配置しなければならない．

計算時間(s)

100

680

まとめ
動作しているアプリケーションの特性に応じて適切な60仮想化環境を動的に選択することができる IaaS クラウド

40

基盤を提案した．本 IaaS クラウド基盤によって，アプリ20ケーションの動作基盤をコンテナまたは軽量 OS を使った

0345

VM に動的に変更することで，アプリケーションの動作パフォーマンスを向上することができる．実験により，CPUを多く使うアプリケーションを軽量 OS を用いた VM で

6

1ホストマシンあたりのサーバ数

図 5 並列計算アプリケーションの実験結果構成した場合にアプリケーションの動作パフォーマンスをhttperf[7] を使って負荷を掛け処理能力を計測する．Web
サーバは，リクエストに対して静的で軽量な Web ページを返している．通常の OS が動作する VM を用いる場合とコンテナを用いる場合と軽量 OS を用いた VM を用いる場合とで結果を比較した．

Web サーバでは，1 ホストマシンあたりの VM またはコンテナ数を変化させ 1 秒間あたりのレスポンス数を測定した．その実験結果を図 6 に示す．
Ubuntu

60000

OSvDocker

response/s

40000
30000
20000
10000
1234

56

1ホストマシンあたりのサーバ数

N/A

N/A78

図 6 Web アプリケーションの実験結果
コンテナを用いて構成した場合のパフォーマンスが 3 つのうち最も高くなっている．しかし，サーバ数が 6 台以上
では物理的な並列度が上がらないので，パフォーマンスが向上しなくなる．一方，VM を用いる場合，メモリの制限でサーバ数は 6 台までしか動作させられないが，サーバ数が増えるとパフォーマンスが向上しなくなる傾向が見られる．

5.4

マンスを改善できることが分かった．
今後は，アプリケーションを動的に別の仮想化環境で動作させる機構について検討する．

[1] “Linux Containers,” https://linuxcontainers.org/,
2017/2/6 accessed.
[2] “Docker - Build, Ship, and Run Any App, Anywhere,” https://www.docker.com/, 2017/2/6 accessed.
[3] Anil Madhavapeddy, et al., “Unikernels: Library
Operating Systems for the Cloud,” in Proceedingsof the Eighteenth International Conference on Architectural Support for Programming Languages andOperating Systems, ser. ASPLOS ’13. New York,NY, USA: ACM, 2013, pp. 461–472.

50000

0

ンテナで構成する場合にアプリケーションの動作パフォー

参考文献

実験結果

5.3.2

改善でき，ネットワーク I/O の多いアプリケーションをコ考察

CPU を多く使うアプリケーションでは軽量 OS を用いた VM で構成することでパフォーマンスが向上し，ネットワーク I/O の多いアプリケーションは，コンテナを用いてアプリケーションを構成することでパフォーマンスが向上することがわかる．また，動的にコンテナまたは VM の構[4] D. R. Engler, et al., “Exokernel: An Operating
System Architecture for Application-level Resource
Management,” in Proceedings of the Fifteenth ACM
Symposium on Operating Systems Principles, ser.
SOSP ’95. New York, NY, USA: ACM, 1995, pp.
251–266.
[5] Paul Barham, et al., “Xen and the Art of Virtualization,” SIGOPS Oper. Syst. Rev., vol. 37, no. 5, pp.
164–177, oct 2003.
[6] Avi Kivity, et al., “OSv: Optimizing the Operating System for Virtual Machines,” in Proceedings ofthe 2014 USENIX Conference on USENIX Annual
Technical Conference, ser. USENIX ATC’14. Berkeley, CA, USA: USENIX Association, 2014, pp. 61–72.
[7] “GitHub - httperf/httperf: The httperf HTTP loadgenerator,”
https://github.com/httperf/httperf,
2017/2/6 accessed.