質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
KVM

KVM【Kernel-based Cirtual Machine】は、 Linux上で仮想化環境を利用するためのソフトウェアです。 1台のPC上で複数のOSを同時に動作させるために必要な制御を行う 仮想化環境の仕組みを提供します。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

6回答

34049閲覧

仮想マシンのメモリについて

mint.cherry

総合スコア284

KVM

KVM【Kernel-based Cirtual Machine】は、 Linux上で仮想化環境を利用するためのソフトウェアです。 1台のPC上で複数のOSを同時に動作させるために必要な制御を行う 仮想化環境の仕組みを提供します。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2015/11/17 09:51

HDDなどは割り当てた分だけホスト側のHDDの容量がその分仮想に割り当てられるから減りますよね。

メモリも同じなのでしょうか?
例えば、16GBのホストを使用してて、仮想マシンにメモリ8GB割り当てた場合、
仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?
また、仮想マシン[※タグに各VMをつけました。]ごとに異なるのでしょうか?よろしくお願いしますm(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

どのVMも、メモリの取得にはホストOSのメモリ管理を使っているはずなので、ホストの仮想記憶機構に依存すると思いますよ。いまどきのOSの仮想記憶ですと、物理メモリの量よりも、仮想記憶用のスワップ領域の確保量などに依存すると思います。基本的にVMに割り当てるメモリ量は、単なる最大値程度の意味合いで、常にそれだけ確保して消費しているというわけではないはずです。

例えば、16GBのホストを使用してて、仮想マシンにメモリ8GB割り当てた場合、 仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?

一般的には、仮想マシンに8GBを割り当てたからといって、ホストマシンで8GB使っているかといえば、そうではないですし、仮想マシンでアプリが8GBまでしか使えないのか?といえば、それを超えたものも実行可能です。ホスト側はホストOSの仮想記憶機構で動きますし、ゲストOSはゲストOSの仮想記憶機構で動きますので、話がややこしくなりますね。

HDDなどは割り当てた分だけホスト側のHDDの容量がその分仮想に割り当てられるから減りますよね。

この部分も、選択する仮想ディスクイメージの形式に依存します。割り当てた分だけ確保してしまう形式もあれば、指定された割り当て分の範囲内で使っている部分だけしか割り当てない形式もあります。

投稿2015/11/17 11:07

T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mint.cherry

2015/11/17 12:11

回答ありがとうございます。 スワップ領域とは?から始まりググってきましたm(__)m > 仮想マシンでアプリが8GBまでしか使えないのか?といえば、それを超えたものも実行可能です。 スワップ領域を使用しての割り当てたメモリの超えたことによる実行可能といういことなのでしょうか?それとも、8GB割り当てても超えて使用できることから関係ないと言うことなのでしょうか?m(__)m HDDに関してですが可変形式と固定形式というものがあるんですね。 可変:使った分だけ使用できる。上限HDDの容量 固定:HDDの割り当てた分だけが上限 virtualboxで見た気がします。
T.Kanno

2015/11/17 12:42

まず、用語が似ていて混乱しますが、仮想マシンと仮想記憶は別個のものです。 仮想マシンは、PC上に仮想的なPCを作り出す仕組みで、仮想記憶は二次記憶を利用してPCに実装された以上のメモリを供給する仕組みです。 いまどきのPCのOSは、ほぼ仮想記憶が実装されていますので、たとえば物理メモリが16GBしか実装されていなくても、それ以上のメモリ空間、たとえば32GBの仮想メモリ空間を利用できたりします。 VMにもよると思うのですが、仮想マシンで確保するRAMサイズを8GBと設定した時に、一般的な実装では、物理メモリが8GBの仮想マシンを実現する形になる思います。それで、その仮想マシンの物理メモリはホストOSの32GBの仮想メモリ空間内から割り当てられますので、単純に16-8と言う計算にはならないと言うことです。 この場合、仮想マシン上で使用できる(仮想マシンの)物理メモリは8GBに制限されるでしょう。 ただし、物理メモリが8GBの設定の仮想マシン上で動くゲストOSも、たいてい仮想記憶をサポートしていますので8Gを超える容量の仮想メモリが利用可能なはずです。 ん~。。。 答えになっているか、自信が無い。 orz
mint.cherry

2015/11/18 06:39 編集

返信ありがとう御座いますm(__)m つまり上限は割り当てた8GBなんですが、その仮想メモリがあるから8GB以上もいけます。ということなんですか? 8GBをこえると実メモリからはメモリの領域をとらなく、仮想メモリからメモリをとると解釈しました。 仮想メモリを調べて思ったのですが、仮想メモリとスワップ領域は同じ意味ですか? 仮想メモリ:仮想メモリは、コンピューターの RAM とハード ディスク上の一時的な領域を組み合わせたものです。 スワップ:ハードディスクなどの補助記憶装置を利用して使用可能なメモリ容量を増やすOSの機能の一つ
T.Kanno

2015/11/18 07:20

どうも~ 仮想マシンの仮想的な物理メモリの上限は8GBですが、その仮想マシンで動かすゲストOSが仮想記憶機能を持っていれば8GB以上もいけます。と言うことですね。この場合は一般にHDDのスワップ領域を使用して見かけ上の仮想メモリ空間を拡張しています。 スワップ領域は仮想記憶機構を実現するために確保されるHDD領域ですね。 より広い仮想メモリ空間を使用するためには、それに見合ったスワップ領域が必要だと言う意味ではそれほど変わりありませんが、厳密にはちょっと違います。OSによって細かな実装や実現方法も変わってくると思います。
mint.cherry

2015/11/18 09:48 編集

返信ありがとう御座いますm(__)m ubuntuなどインストールの際にスワップ領域どうするかきいてきました。ubuntuは仮想記憶の機能もっているんですね。ほとんどのOSが持っている気がしますが・・・根拠はありません(笑)あっても損はなさそうな機能なので(笑) スワップとは仮想記憶を取るための領域。仮想記憶はスワップで指定したそのもの。 と解釈しますm(__)m
guest

0

>例えば、16GBのホストを使用してて、仮想マシンにメモリ8GB割り当てた場合、
>仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?

(一般向けデスクトップ、ノートPCを想定しています。
仮想サーバー専用機、仮想サーバー用ストレージ&ネットワークは考えていません。)

仮想化ソフトによっては(Hyper-V3では、設定によります)、
仮想マシンの容量以上に(想定以上に)、使用可能な実メモリが減ります。
例えば8GB、仮想へ動的に割り当て、
初期起動時:2G
動的最大:8G
にした場合に、
実環境で想定されるメモリ使用としては、
OS使用分
仮想環境の動的割り当て部分
仮想化ソフトの使用分
仮想環境の~~~を実現するために使われる部分
になるのでは?

ディスクアクセスが重なった時や、スワップが起きる状況が発生した場合に、
仮想マシンのパフォーマンスはすごく低下します。
⇒ディスク速度依存部分を、手軽に回避するのに、
個人向けでは、仮想マシンのイメージ展開場所を、SSDにするのが楽ですが、
SSDの寿命は、短くなります。
企業向けの高価な品と違って、書込み寿命が短いですから、
HDDコスパの良い品×4~8台位でストライプ(ミラーにしない)で、
やった方が実用的かもしれません。定期バックアップを、1日1回夜~早朝やる事で、障害対策。

悩むより、実際使ってみるのが、吉です。
個人的には、Windows 環境下では、VirtualBoxが、
色々な仮想イメージの起動をサポートしていて、楽かなと思っています。

投稿2015/11/17 10:40

daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mint.cherry

2015/11/17 12:34

回答ありがとうございます。 ふとなんとなく疑問におもって質問してました。 スラッシングが起きるに連れてCPUに負荷がかかり処理が遅くなるというのはさっき調べて知りましたm(__)m 早いのはいいのですがSSDはやはり寿命があることからさけたいです。バックアップも手間もかかりますので。。。
guest

0

コンピュータの世界は常に 仮想化 を繰り返すことで進歩してきました。
64bit OSの場合、論理的なアドレス空間は64bitつまり16EB(エクサバイト、約1600万TB)までなので、アプリケーション側からは論理的にそれだけ大きなアドレス空間を利用出来ることになります。もっとも、実際にはそんなに必要ではないので、Windowsであれば仮想アドレスは256TB(48bit)まで、物理アドレス空間は48~52bit程度だそうですけれども。(ご参考

それにしても、256TBものメモリを搭載しているPCなど実在しない訳で、実際には広大なメモリ空間を ページ という単位に区切り、アプリケーションを実行するのに 当面必要な部分 のみを実メモリに マッピング することで実行しています。

つまり、メモリは 必要になったらページを割当て、メモリの空きが少なくなったら当面使いそうにないページを追い出して 次に必要になりそうなページを読み込む ことで、限られたメモリを効率良く利用しています。これをページングと言います。(ご参考

同じようなメモリ管理は、ホストOSだけでなくゲストOSでも実施されています。Windows/Mac/Linuxなど、OSの違いによって具体的な実装方法は異なりますが、仮想メモリという概念によって効率的に管理されている点は同じです。

では、仮想マシン そのものに割り当てられるメモリはどうかというと、メモリの 最大値(割当の上限) として指定したサイズを常に専有するかというとそのようなことはなく、皆様が既にご回答頂いているように 必要に応じて 割り当てられます。ですので、仮想マシンが起動状態でも、その上で稼働しているゲストOSがアイドル状態でリソースをほとんど使用していなければ、仮想マシン自体を動かすのに必要な最低限のメモリしか専有しません。VirtualBoxやVMWare、Hyper-Vなど、仮想マシンの実装の違いによって細かな管理方法は異なるものの、必要以上にリソースを専有したりせず、複数の仮想マシンが稼働している状況では積極的にリソースを融通し合うようになっています。

そのため、たとえば日中にアクセス数の多いWebサーバーと、バッチ処理のために夜間にのみリソースを必要とするサーバーをセットにしてやれば、同一の物理マシンにより多くの仮想マシンを詰め込むことも可能になります。このように、仮想マシンに割り当てるCPUやメモリなどのリソースの合計が物理マシンのリソースを超えるような割当て方オーバーコミットと言いますが、同時に必要とするリソースの合計が物理量を超えなければ良いので、決して珍しいことではありません。

蛇足ながら、同様のことはHDDのにも言えます。固定サイズで割り当てることもできますが、可変サイズのHDDを割り当てた場合、初期状態ではサイズが非常に小さいです。ですから、可変サイズHDDであれば、巨大なサイズのものをたくさん割り当てることもできます。

残念ながら、KVM、VMWare、VirtualBox それそれの詳しい内部仕様を知らないので、具体的にどのように管理されているのかは分かりませんが、効率的な管理の実現に向けて凌ぎを削っているのは確かです。
ただし、タグに列挙されている中で Docker だけは別で、これはコンテナでありVM(仮想マシン)ではないので、オーバーコミットというのはありません。

仮想マシンは、ホスト型ハイパーバイザー型かによってハードウェア部分の仮想化方法が異なりますが、それでもその上では独立したOS(=ゲストOS)が稼働します。一方、Dockerのようなコンテナ型の仮想化システムでは独立したOSが稼働するのではなく、ホストOSのリソースの一部をコンテナという仕組みで隔離しその中で稼働するアプリが互いに干渉しないようにする技術なので、仮想化のオーバーヘッドが少ない代わりリソースの割当ての自由度は少ないです。(CPUやメモリの上限は設定可能ですが、HDDは割当てられません。)(ご参考

投稿2015/11/17 14:24

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これは簡単には説明しにくい状態です。
一般に、メモリが足りない場合には、余り使われていないメモリをディスクに書きだして、そのメモリが必要になったらディスクから読み出しすという仕組みがあります。OSがこれを行う場合は仮想記憶といい、メモリのページ(一定サイズのメモリ区画)ごとにディスクに読み書きするので、この読み書きをページングと言います。

仮想化のゲストOSの場合は、これが二段階または三段階で発生します。

  1. ホストOSの物理メモリとホストOSのページファイルとの間でのページング
  2. VMモニタによっては、ゲストOSに割り当てたメモリの一部を物理メモリでなくディスクに割り当てることも可能

「最低2GBで最大8GBの物理メモリ」を割り当てると、ホストOSのメモリ使用状況によっては最大6GBのゲストOSメモリが、ホストOS上ではディスクに割り当てられていることがあり得ます
(この機能で、ホストの物理メモリが16GBしかなくても、速度を度外視すれば8GBのゲストOSを3つ同時に動かすとかも可能です)
3. ゲストOS自体のページング機能で、ゲストOSがメモリと思っている物と、ゲストOSがディスクだと思っている物との間で読み書きが発生する

という多段階になっています。
この仕組みを理解せず、メモリサイズを下手に割り当てると、「物理ディスクから物理ディスクへの(物理メモリ経由での)ページング」が発生して速度低下が起こる可能性がありますので、注意が必要です。

質問にストレートに答えると、

仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?

8GB以上の使用が可能です。

投稿2015/11/17 12:46

otn

総合スコア84266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Hyper-Vでは、仮想マシン側のメモリも動的に確保する仕組みがあり、ご質問のような状況ですと、ホストからは2GBだけ割り当てられます。したがって、6GB分はホスト側が利用できます。
私はHyper-Vを使用しているのでちょっと確認してみました。設定は4GBにしていますが、確保されているメモリは約900MBとなっていました。

VMwareとVirtualBoxはHyper-Vとは仮想化の仕組みが違うので、動的に確保しているかどうかは判りません(Hyper-Vとは同居できないので試せない……)。

投稿2015/11/17 11:02

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mint.cherry

2015/11/17 12:16

回答ありがとうございますm(__)m Hyper-vのVMがあったこと忘れてました(笑) Hyper-vでは、そうなんですね。。。 スラッシングのことを考えると動的のほうが明らかに良い気がしてきました。 検証ありがとうございます!!
daive

2015/11/17 16:06

>Hyper-Vとは同居できないので試せない 同居できますよ(^^♪ 但し、再起動が必要です。 Hyper-V OFF bcdedit /set hypervisorlaunchtype off Hyper-V ON bcdedit /set hypervisorlaunchtype auto コマンドプロンプトか、 Hyper-V_ON.cmd Hyper-V_OFF.cmd のような、ファイルを作って、Hyper-Vの動作状態を切換可能です。 但し、管理者モードで実行し、 Win 8.1 / Windows Server 2012 / 2012R2を再起動します。 Win 10は試していないので、解りません。 Hyper-V OFF 状態で、 Virtual BOX / VM Ware のインストールと、 動作が可能です。
catsforepaw

2015/11/17 16:19

おお、そんな技があったのですか。知りませんでした。情報ありがとうございます。 でも「切り替える」必要があるから、ちょっと面倒ですね。
guest

0

使用している仮想ホストにもよると思いますが、動的メモリ割り当てが有効であれば、仮想マシンが2GB使用していた場合は、その分しか消費されないと思います。
静的にメモリを割り当てた場合は8GB消費となると思います。
#実際に確認したことないので想定ですが・・・

投稿2015/11/17 10:09

over

総合スコア4309

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問