エンジョイ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

関連記事

Cygwin上でiperfをビルド

ネットワークの疎通確認に便利なツールiperf。 先日Windows上で使おうと思ったら、見つからなくて困ったことがありました。 iperfのWindows版バイナリも配布されているらしいですが、私は …

OOM Killerの発動を検知したい

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

カーネルモジュールのビルド

前回、OOM Killerの発動を検知するテスト用のカーネルモジュールをビルドしたと書きました。前回は長くなるのを避けてビルド手順を端折ったので、改めて記録しておきます。ここを見ながらビルドしました。 …

限定版が復活してた。ASUS TransBook T100TA

今回は私が愛用している10.1インチWindowsタブレットの使用感です。 いわゆる”2 in 1”で、キーボードを脱着することによりノートPCとしてもタブレットPCとしても使えてとても重宝してます。 …

metaWeblog.newMediaObject メソッドへの応答が無効です

ブログの執筆にWindows Live Writerを使っています。 この記事を投稿しようとしたら、 「ブログサーバーから受信した metaWeblog.newMediaObject メソッドへの応答 …