仮想化環境ではNIC(network interface card)などを含めたハードウエアの機能をソフトウエアで実現するため,可用性を高めやすくなるなどのメリットがある。その一方で,ソフトウエア処理そのものは増え,膨大なトラフィックをさばくサーバーでは,そのオーバーヘッドを無視できなくなる。

宮下 徹/奈良 昌紀
ネットワンシステムズ応用技術本部 第5応用技術部
DCエンジニアリングチーム

 仮想化技術を使ったシステムの処理性能を考えるとき,大抵は1台のサーバー・ハードウエアで何台分の仮想マシンを動かすか,あるいは各仮想マシンにどの程度のメモリー容量を割り当てるかといった点を気にするだろう。

 ただ,それだけでは十分とは言えない。仮想化環境では,ネットワーク関連の処理の一部もサーバー上でソフトウエア的に実現されるため,従来のサーバーに比べて,オーバーヘッドとなる処理が多くなる。

 そこで,ネットワーク性能を高めるための,仮想化環境特有の工夫が求められるようになる。今回は,仮想化環境でネットワークの応答性能を高めるためのアプローチを紹介しよう。

アプローチは大別して3通り

 仮想化環境でネットワークの性能を高めるためのアプローチは,オーバーヘッドの発生場所により3通り考えられる。(1)アプリケーション処理,(2)ハイパーバイザでのTCP/IP処理,(3)仮想化レイヤーの処理である(図1)。

図1●仮想サーバーで発生する処理のオーバーヘッド
アプリケーション処理のほか,仮想OSのTCP/IP処理,通信の仮想化処理(仮想スイッチ部分)のオーバーヘッドがある。
[画像のクリックで拡大表示]

 (1)は複数サーバーへの負荷分散やSSL(secure sockets layer)の暗号化/復号処理オフロードなど,物理環境と同じアプローチである。ロードバランサなどのネットワーク・アプライアンス(最近はアプリケーション・デリバリ・コントローラと呼ばれることが増えている)を使うことで,仮想化環境のサーバー負荷を軽減し,ネットワークの応答性能を高める方法だ(図2)。仮想マシン自体の処理を物理ホストの外にオフロードすれば,ホストの負荷を下げられる。物理環境でも仮想化環境でも適用できる点もメリットである。

図2●アプリケーション処理とTCP/IP処理のオーバーヘッドはロードバランサなどを使うことで抑えられる
[画像のクリックで拡大表示]

 サーバーの負荷を抑える例の一つは,TCPコネクションの集約である。外部からサーバーへの接続をアプリケーション・デリバリ・コントローラで受け付け,いったんTCPコネクションを終端,コントローラからサーバーに別のコネクションを確立する仕組みだ。こうすると,サーバー側のコネクションを複数のユーザーで兼用でき,サーバーで維持するコネクション数を抑えられる。

 例えばApacheなどのWebサーバーは,設定によってはユーザーからのリクエストごとにTCPのコネクションを確立してしまう。こうなると,コネクション確立のやり取りにCPU負荷がかかるほか,コネクションの状態を管理するためにメモリー領域を多く消費する。一つひとつのコネクション確立の負荷は決して大きくはないが,数万ユーザーが同時にアクセスしてくるWebサイトなどでは,トータルの負荷は無視できないほど大きくなる。

 このような場合にアプリケーション・デリバリ・コントローラのTCPコネクション集約機能とApacheのKeepAliveを有効にすると,サーバー側で保持するTCPコネクションを最小限に抑え,複数のクライアントからの要求をさばけるようになる。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら