HDDなどは割り当てた分だけホスト側のHDDの容量がその分仮想に割り当てられるから減りますよね。
メモリも同じなのでしょうか?
例えば、16GBのホストを使用してて、仮想マシンにメモリ8GB割り当てた場合、
仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?
また、仮想マシン[※タグに各VMをつけました。]ごとに異なるのでしょうか?よろしくお願いしますm(__)m
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
どのVMも、メモリの取得にはホストOSのメモリ管理を使っているはずなので、ホストの仮想記憶機構に依存すると思いますよ。いまどきのOSの仮想記憶ですと、物理メモリの量よりも、仮想記憶用のスワップ領域の確保量などに依存すると思います。基本的にVMに割り当てるメモリ量は、単なる最大値程度の意味合いで、常にそれだけ確保して消費しているというわけではないはずです。
例えば、16GBのホストを使用してて、仮想マシンにメモリ8GB割り当てた場合、 仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?
一般的には、仮想マシンに8GBを割り当てたからといって、ホストマシンで8GB使っているかといえば、そうではないですし、仮想マシンでアプリが8GBまでしか使えないのか?といえば、それを超えたものも実行可能です。ホスト側はホストOSの仮想記憶機構で動きますし、ゲストOSはゲストOSの仮想記憶機構で動きますので、話がややこしくなりますね。
HDDなどは割り当てた分だけホスト側のHDDの容量がその分仮想に割り当てられるから減りますよね。
この部分も、選択する仮想ディスクイメージの形式に依存します。割り当てた分だけ確保してしまう形式もあれば、指定された割り当て分の範囲内で使っている部分だけしか割り当てない形式もあります。
投稿2015/11/17 11:07
総合スコア915
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
総合スコア2030
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア5936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
これは簡単には説明しにくい状態です。
一般に、メモリが足りない場合には、余り使われていないメモリをディスクに書きだして、そのメモリが必要になったらディスクから読み出しすという仕組みがあります。OSがこれを行う場合は仮想記憶といい、メモリのページ(一定サイズのメモリ区画)ごとにディスクに読み書きするので、この読み書きをページングと言います。
仮想化のゲストOSの場合は、これが二段階または三段階で発生します。
- ホストOSの物理メモリとホストOSのページファイルとの間でのページング
- VMモニタによっては、ゲストOSに割り当てたメモリの一部を物理メモリでなくディスクに割り当てることも可能
「最低2GBで最大8GBの物理メモリ」を割り当てると、ホストOSのメモリ使用状況によっては最大6GBのゲストOSメモリが、ホストOS上ではディスクに割り当てられていることがあり得ます
(この機能で、ホストの物理メモリが16GBしかなくても、速度を度外視すれば8GBのゲストOSを3つ同時に動かすとかも可能です)
3. ゲストOS自体のページング機能で、ゲストOSがメモリと思っている物と、ゲストOSがディスクだと思っている物との間で読み書きが発生する
という多段階になっています。
この仕組みを理解せず、メモリサイズを下手に割り当てると、「物理ディスクから物理ディスクへの(物理メモリ経由での)ページング」が発生して速度低下が起こる可能性がありますので、注意が必要です。
質問にストレートに答えると、
仮想マシンが2GBしか使っていない場合でもホスト側は8GBしか利用できないのでしょうか?
8GB以上の使用が可能です。
投稿2015/11/17 12:46
総合スコア85625
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Hyper-Vでは、仮想マシン側のメモリも動的に確保する仕組みがあり、ご質問のような状況ですと、ホストからは2GBだけ割り当てられます。したがって、6GB分はホスト側が利用できます。
私はHyper-Vを使用しているのでちょっと確認してみました。設定は4GBにしていますが、確保されているメモリは約900MBとなっていました。
VMwareとVirtualBoxはHyper-Vとは仮想化の仕組みが違うので、動的に確保しているかどうかは判りません(Hyper-Vとは同居できないので試せない……)。
投稿2015/11/17 11:02
総合スコア5942
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/17 12:16
2015/11/17 16:06
2015/11/17 16:19
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/17 12:11
2015/11/17 12:42
2015/11/18 06:39 編集
2015/11/18 07:20
2015/11/18 09:48 編集