nkjmkzk.net

powered by Kazuki Nakajima

Xenでメモリをオーバーコミットする(Transcendent Memoryセットアップ編)

概要

  • 管理者は多かれ少なかれメモリをある程度オーバープロビジョニングする
  • 結果、性能は確保されるものの定常的に使われていないメモリが出てくる
  • これを特にサーバ仮想化環境で見ると相当量のメモリが「未使用」となり、「もし、メモリ割り当てを最適化できればあと数VM収容できるのに」となる。実際、メモリは現在唯一VMの収容数を絶対的に制限するハードリミットとなっている
  • この最適化を行うのがTranscendent Memory(以後tmem)。使われていないメモリをかき集めてtmem poolとして再配布可能とする
  • ゲストOSはtmemを有効にしてビルドされたカーネルで起動することによって、従来のpage cacheに格納していたページをtmemを使って読み書きするようになる

環境

  • Xen: 4.0.0
  • ゲストOS: Oracle Enterprise Linux 5.4 x86_64

セットアップ手順

dom0にログインし、Xen(4.0.0)でtmemを有効にする。grub.confを編集してカーネル行に「tmem」を追加しdom0を再起動する

[root@vmserver]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Xen 4.0.0 (2.6.32.11-1.2.97.xendom0.fc12.x86_64)
	root (hd0,0)
	kernel /xen-4.0.gz dom0_mem=1024M loglvl=all guest_loglvl=all tmem
	module /vmlinuz-2.6.32.11-1.2.97.xendom0.fc12.x86_64 ro root=/dev/mapper/vg_x4-lv_root
	module /initramfs-2.6.32.11-1.2.97.xendom0.fc12.x86_64.img

[root@vmserver]# init 6

次にゲストOSにログインしtmemを有効にする。tmemはまだカーネルのメインラインにはマージされていないのでディストリビューションが公開しているカーネルSRPMにtmemパッチ当て、カーネルを再構築する。

tmemパッチ入手先:http://oss.oracle.com/projects/tmem/files/

カーネルSRPM入手先:http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/x86_64/

公開されているtmemパッチはvanillaカーネル用なのでディストリビューション付属のカーネルに当てるといくつかHunk, Failがでるが手作業で直せるレベルなので手で直す。

[root@guest]# rpm -ivh kernel-2.6.18-194.3.1.0.1.el5.src.rpm
[root@guest]# cd /usr/src/redhat/SPECS
[root@guest]# rpmbuild -bp kernel-2.6.spec
[root@guest]# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
[root@guest]# patch -p1 < /var/opt/tmem-linux-2.6.18-xen-855-090408.patch

*4つ程Failするので手作業で直す

[root@guest]# cp configs/kernel-2.6.18-x86_64-xen.config .config

任意だが、わかり易いようにカーネル名を変更しておく

[root@guest]# vi .config
CONFIG_LOCALVERSION="-tmem"
[root@guest]# vi Makefile
EXTRAVERSION = -194.3.1.0.1.el5xen

ビルドする

[root@guest]# make -j8

*tmemについて有効化するか訊かれるので全て「Y」として有効化する

カーネルモジュールをインストールする

[root@guest]# make modules_install

カーネルをインストールする

[root@guest]# make install

initial ramdiskを作成する

[root@guest]# mkinitrd -v -f initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img 2.6.18-194.3.1.0.1.el5xen-tmem

initial ramdiskをインストールする

[root@guest]# cp initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img /boot/

新しいカーネルで起動するようにgrub.confを編集する

[root@guest]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Enterprise Linux (2.6.18-194.3.1.0.1.el5xen-tmem)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-194.3.1.0.1.el5xen-tmem ro root=/dev/VolGroup00/root rhgb quiet
    initrd /initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img
title Enterprise Linux (2.6.18-164.el5xen)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/root rhgb quiet
    initrd /initrd-2.6.18-164.el5xen.img

再起動し、新しいカーネルで起動する

[root@guest]# init 6

Demo



Reference

with one comment

Written by 中嶋 一樹

5月 20th, 2010 at 2:18 pm

Posted in Uncategorized

Tagged with ,

One Response to 'Xenでメモリをオーバーコミットする(Transcendent Memoryセットアップ編)'

Subscribe to comments with RSS or TrackBack to 'Xenでメモリをオーバーコミットする(Transcendent Memoryセットアップ編)'.

Leave a Reply