Xenでメモリをオーバーコミットする(Self-Ballooningセットアップ編)
概要
- self-ballooningはゲストOS自らメモリをある条件に基づいて動的に返却する/獲得ことによって実質的にメモリをオーバーコミットするための仕組み
- xenballoondはゲストOSで動くbashベースのデーモン。これがself-ballooningを制御する
- xenballoondはdom0へのメモリ情報提供を担うことも計画されている
- xenballoondは/proc/meminfoのCommitted_ASの値をベースに最低限必要なメモリ容量を判別する
環境
- Xen: 3.4.0(Oracle VM Server 2.2.1)及び4.0.0(Fedora 12)で確認
- ゲストOS: Oracle Enterprise Linux 5.4 x86_64
セットアップ方法
Xen側には特殊な設定は必要ありません。すべてゲストOSでの作業です。
まず、ゲストOS上でxen-4.0.0.tar.gzをxen.orgからダウンロードし展開します。これはxenのtarボールの中に必要なスクリプトがあるからです。(恐らくXen 3.3以降であれば必要なツールが含まれているはず)
[root@guest]# tar xvfz xen-4.0.0.tar.gz
展開されたディレクトリ中から3つのファイルをそれぞれインストール(コピー)する
[root@guest]# cp xen-4.0.0/tools/xenballoon/xenballon.conf /etc/sysconfig/ [root@guest]# cp xen-4.0.0/tools/xenballoon/xenballond /usr/bin/ [root@guest]# cp xen-4.0.0/tools/xenballoon/xenballond.init /etc/init.d/xenballoond
bashファイルを実行可能なようにパーミッションを変更する
[root@guest]# chmod 755 /usr/sbin/xenballoond [root@guest]# chmod 755 /etc/init.d/xenballoond
必要に応じて設定ファイルを編集する
[root@guest]# vi /etc/sysconfig/xenballoon.conf
*特にXENBALLOON_SELF=falseはtrueに変更する必要がある
xenballoondデーモンを起動する
[root@guest]# service xenballoond start
検証結果
- self-ballooning有効化によって動的にメモリ容量が縮小されるか? => yes
- self-ballooning有効化によって動的にメモリ容量が拡張されるか? => yes(ただしユーザプロセスがメモリを予約した場合。page cacheでは拡張は発動しない)
使用したツール
mem_allocate.c(メモリを確保し、60秒後に解放するツール。適当に作った。)
#include
#include
#include
int main(int argc, char **argv) {
char *str;
int i;
if (argc == 2) {
sscanf(argv[1], "%d", &i);
printf("Allocating %d Bytes for 60 seconds...\n", i);
str = (char *)malloc(i);
memset(str, 1, i);
sleep(60);
free(str);
} else {
printf("This program needs exactly 1 argument.\nYou can set the bulk of RAM to allocate with integer.\n");
}
return 0;
}
Demo
Reference
- xen-4.0.0/tools/xenballoon/xenballoond.README
- http://blog.xen.org/index.php/2008/08/27/xen-33-feature-memory-overcommit/
- http://www.xen.org/files/xensummitboston08/MemoryOvercommit-XenSummit2008.pdf