仮想化環境では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コネクションを最小限に抑え,複数のクライアントからの要求をさばけるようになる。

この先は日経クロステック Active会員の登録が必要です

日経クロステック Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。