技術入門

KVM vs Docker ― ベンチマーク結果から見る仮想化の違い

NIC ネットワーク制御ソフトウェアプロジェクト

田仲 百音(たなか もね)

#仮想化#KVM#Docker

2026/4/23

はじめに

私の所属するネットワーク制御ソフトウェアプロジェクトでは、Linux kernelの仕組みやネットワークがつながる仕組み等について、深いレベルで習得することを目的とした、新入社員向けの技術トレーニングが行われています。座学だけでなく、手を動かしながら技術を理解することを重視しており、本稿ではその取り組みの一例として、仮想化技術であるKVMとDockerの性能評価結果を紹介します。
私たちが日常的に利用しているクラウドサービスや動画配信、オンライン会議の多くは、「仮想化」という技術によって支えられています。
仮想化とは、CPUやメモリ、ストレージといった物理的なハードウェア資源を抽象化し、複数の独立した実行環境として利用可能にする技術です。簡単に言えば、サーバの仮想化では、1台のサーバを分割して、あたかも複数台のサーバがあるかのように動作させることができます。
この仕組みにより、限られたハードウェア資源を効率よく活用できるだけでなく、システムの構築や変更を柔軟に行うことが可能になります。
以降では、代表的なサーバ仮想化技術として、KVMとDockerを取り上げ、それぞれの特徴や違いを紹介します。

ハイパーバイザ型とコンテナ型

サーバの仮想化は、大きく分けてホスト型、ハイパーバイザ型、コンテナ型の3種類があります。本稿では、特にハイパーバイザ型とコンテナ型に着目して紹介したいと思います。
ハイパーバイザ型は、物理マシン上で直接動作する仮想化ソフトウェアです。ハイパーバイザはCPUやメモリなどの物理リソースを管理し、その上で複数の仮想マシン(VM: Virtual Machine)を動作させます。各VMは「ゲストOS」と呼ばれる独立したOSを持ち、1台の物理コンピュータのように振る舞います。代表的なハイパーバイザ型の仮想化ソフトウェアとして、KVMがあります。
一方、コンテナ型は、ホストOS上にコンテナと呼ばれる実行環境を作成する方式です。各コンテナはVMのように完全に独立したOSを持つのではなく、ホストOSのカーネルを共有しながら、アプリケーション単位で環境を分離します。ここでいうカーネルとは、OSの中でも重要な役割を果たす部分で、ハードウェアとソフトウェアの間を仲介する役割を担っています。
コンテナ型の仮想化技術では、このカーネルを複数のコンテナで共有することで、OSを重複して起動する必要がなくなり、ハイパーバイザ型に比べて軽量かつ高速に動作します。コンテナ型仮想化ソフトウェアの代表例として、Dockerがあります。

01.jpg
図:ハイパーバイザ型仮想化とコンテナ型仮想化のイメージ

性能評価

KVMとDockerの性能を比較するため、本記事では UnixBench というベンチマークテストを実行しました。
UnixBenchは、Unix系OS上で動作するシステムの基本的な性能を評価するためのベンチマークツールです。CPUの計算性能やプロセス生成、システムコールの処理速度などを測定し、OSや実行環境の違いが性能に与える影響を数値として確認できます。測定結果は Index Score としてまとめられ、値が大きいほど高い性能を示します。
今回の実験では、KVMとDockerの両方について、CPU 8コア・メモリ 2GB という同一条件でテストを行いました。結果の一部を抜粋したものを、以下の表に示します。

02.jpg
表:Unixbenchの結果(lps: loop per second の意味。1秒間に一連の処理を何回実行できたかを示す。高い数値ほど性能が高いことを意味する。)

まず、総合的な性能を示す Index Score を見ると、1コア実行・8コア並列実行のいずれの条件においても、DockerはKVMより高いスコアを示しました。特に、8コアでCPUを並列に利用した場合には、スコアの差がより大きくなっています。
Pipe-based Context Switching(プロセス切り替え性能)、Process Creation(プロセス生成性能)でも同様に、DockerがKVMより高い性能を示しました。これは、KVMが仮想マシンごとにOSを起動して環境を分離するのに対し、DockerはホストOSのカーネルを共有することで、プロセス生成時のオーバーヘッドを小さく抑えられるためだと考えられます。
このように、Dockerは軽量さによる性能面でのメリットがあることがわかりました。

まとめ

本記事では、サーバ仮想化の代表的な方式であるハイパーバイザ型とコンテナ型について紹介し、その具体例としてKVMとDockerを取り上げました。また、UnixBenchを用いた性能比較を通じて、両者の特性の違いを確認しました。
ベンチマークの結果から、DockerはホストOSのカーネルを共有する軽量な構造を持つため、CPU性能やプロセス生成といった項目において高いスコアを示しました。一方で、KVMはOSごとに環境を分離する方式であり、性能面では不利になる場合があるものの、高い隔離性と安全性を備えています。このように、仮想化方式にはそれぞれ得意・不得意があり、単純な性能比較だけで優劣を決めることはできません。状況に応じて、適切な仮想化技術を選択することが重要です。
なお、本記事で紹介した検証は、新入社員向け技術トレーニングの一環として実施したものです。我々のプロジェクトでは、こうした取り組みを通して、技術を深く理解できる研究者の育成をめざしています。本記事がKVMとDockerの理解の一助となれば幸いです。

    

参考文献

    

[1] https://github.com/kdlucas/byte-unixbench

[2] https://github.com/kthksgy/docker-unixbench

    

関連するプロジェクト

プロジェクト一覧へ

採用情報

採用情報