エンジョイAsobi

スマホとWindowsとLinuxを遊ぶ。

Ubuntu Windows

Hyper-Vの動的メモリは本当に動的だった!?

投稿日:2014年3月21日 更新日:

前回、無用なトラブルを避けるつもりで無難な選択をした結果、却ってロクでもない目に遭ったようだという話を書きました。

Hyper-V + Ubuntuなんてメジャーな組み合わせでは、そんなこと気にせずとも最新の環境でちゃんとうまくいくように作られているのですね…。そりゃそうだ。
で当然気になるのがもう一つの無難な(つもりの)選択、動的メモリです。

動的メモリもあえて使わない設定にしていたのですが、これもいらない配慮なんだよねと。
そんなわけで動的メモリも設定してみました。

動的メモリを試すにあたっては、ホストWindows8.1のタスクマネージャーでメモリ割り当てを確認しながら進めました。Hyper-Vマネージャーの表示でも確認できますけどね。

まず仮想マシンを起動していないときのメモリ割り当てはこんな感じ。

1mem_novm
メモリ速度のリーズナブルなところがバレてますが気にしない。

ここで固定メモリ2048Mbytesの設定で仮想マシンを起動します。するときれいに2Gbytes増えます。

2mem_before

一旦仮想マシンを落として動的メモリを設定します。スタートアップRAMは、グッと減らして512Mbytesにしてみました。

3settings

設定値を簡単に説明すると、メモリの割り当ては最小RAMと最大RAMの値の範囲で必要に応じて変動する、ただしメモリバッファー分だけ余裕をとる。起動時はまずスタートアップRAMの値だけ割り当てられる、ということです。

仮想マシンを起動してみると、あっさりメモリ割り当てが変わりました。やっぱり…。動的メモリは当たり前に使えるものなのね。
sshから入って操作してみたけれど、特に不具合は無し。

4mem_after0

こんなきっちり設定通りになるものかと疑問を感じつつ。起動直後はぴったりスタートアップメモリ設定値の0.5Gbytesだけ割り当てられているようです。

これでもし仮想マシン上でメモリの需要があった場合、最大メモリ設定値の4Gbytesまでメモリ使用量が上がるはずですよね。
仮想マシン上で以下のプログラムをブン回して検証してみました。

~/work>$ cat memeater.c
#include <stdlib.h>

void main(void) {
        while (malloc(1024 * 1024) != NULL) {}
        return;
}
~/work>$ cc -o memeater memeater.c
~/work>$ ./memeater
Killed
~/work>$

最後はOOM Killerに落とされた?ぽい。ですが、おもしろい挙動を見せてくれました。

5memeater

何か怖いくらい理屈通りの動きをしますね。しっかり4Gbytesを消費したところで頭打ちになったみたいです。

でも感心したのはここから。このまま5分ほど放置したら、

6memflush

きっちりmemeaterの浪費していたメモリが返却されました!これ素晴らしい。ここのアルゴリズムってどうなっているのでしょうね。

Hyper-Vちょっと好きになったな。

-Ubuntu, Windows

関連記事

Windows 8.1上でHyper-Vを試す ~ネットワークがつながらない~

前回、Hyper-V上の仮想マシンにUbuntuをインストールしたところまで書きました。 インストールが完了して、さっそく仮想マシンにSSHからログインしてあれこれ設定しようとしました。しかし、 SS …

Hyper-VでUbuntu 14.04を試す(1)

ついにリリースされました、Ubuntu 14.04。 実験用にインストールした13.10はともかく、実用に使っていた12.04マシンの調子が最近悪くて。インストールし直したかったけど、あと少しで14. …

OOM Killerの発動を検知したい

今回はプログラムの話。タイトル通り、LinuxのOOM Killerが発動したことを検知したいという話です。組み込みでLinuxを使っていると、OOM Killerが動き出すこと自体異常事態なので、検 …

Ubuntu 14.04 64bitで32bitアプリを使う

新たにVMを作ってUbuntu 12.04から14.04に乗り換えたわけですが、セットアップしていて最初に困ったのは、12.04で使っていた32bitアプリを14.04上で動かそうとしたとき。 Ubu …

Windows 8.1上でHyper-Vを試す ~Ubuntuの仮想マシンを作る(2)~

前回、空の仮想マシンを作るところまで書きました。 (なんか長かった…)。 続いてUbuntuを仮想マシンにインストールします。 Ubuntuのインストールを開始するには、まずHyper-Vマネージャー …