Oracle VM for x86(OVM x86)3.2.8 の DomU(Guest OS) で hugepage を使う
Oracle VM for x86(OVM x86)3.2.8 の DomU(Guest OS) で hugepage を使おうとしたら、messages に以下のメッセージが出て使えない。
$ cat /etc/sysctl.conf : vm.nr_hugepages = 512 ★sysctl.conf上では hugepage を設定済み $ cat /var/log/messages : Aug 20 20:58:43 guestos1 kernel: Guest pages are not properly aligned to use hugepages $ sysctl -a | grep huge : vm.nr_hugepages = 0 ★実際には hugepage が確保されてない
以下のページによれば、Dom0(Host OS)上の grub.conf と vm.cfg に仕掛けをする必要があるみたい。
Linux Huge Pages in Oracle VM 3 http://portrix-systems.de/blog/brost/linux-huge-pages-in-oracle-vm-3/
まず Dom0(Host OS) の grub.conf を編集して「allowsuperpage」を追記する。。。らしいが、初めから書いてあった。
$ vi /etc/grub.conf # grub.conf generated by anaconda : kernel /xen.gz dom0_mem=672M allowsuperpage
次に Dom0(Host OS) から起動する DomU(Guest OS) の vm.cfg(設定ファイル) を編集して「superpages = 1」を追記する。
$ vi vm.cfg : superpages = 1
DomU(Guest OS) を reboot して、結果を確認。
$ sysctl -a | grep huge : vm.nr_hugepages = 512 ★hugepage が確保されている。
成功(`・ω・)Ъ
Java7 と Java5 で hugepage を 使う/使わない が異なる?
とりあえずメモ。hugepage使用の判定方法は yohei-aさんの記事
【Linux で huge page を使っているプロセスを調べる方法:id:yohei-a:20140816:1408168458】
を参考。
Java7 の場合
[oracle@hostname1 javatest]$ /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -version java version "1.7.0_51" ★Java7 Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) [oracle@hostname1 javatest]$ ps -ef | grep -i java : ★UseLargePagesオプション無し oracle 26871 2552 1 01:38 pts/1 00:00:00 /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -Xmx64m -Xms64m HelloWorld oracle 26907 22419 0 01:38 pts/0 00:00:00 grep -i java [oracle@hostname1 javatest]$ view /proc/26871/smaps f6c00000-f8200000 rw-p 00000000 00:0b 2503962 /anon_hugepage (deleted) Size: 22528 kB : KernelPageSize: 2048 kB ★hugepage を使ってるっぽい。 MMUPageSize: 2048 kB :
Java5 の場合(※ORACLE_HOME配下の java で動かしてみた。)
[oracle@hostname1 javatest]$ /u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -version java version "1.5.0_51" ★Java5 Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_51-b10) Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_51-b10, mixed mode) [oracle@hostname1 javatest]$ ps -ef | grep -i java : ★UseLargePagesオプション無し oracle 32732 2552 1 01:49 pts/1 00:00:00 /u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -Xmx64m -Xms64m HelloWorld oracle 32748 22419 0 01:50 pts/0 00:00:00 grep -i java [oracle@hostname1 javatest]$ view /proc/32732/smaps : <「KernelPageSize: 2048 kB」 が見当たらない> ★hugepage は使ってない? :
うーん?こいつは???(´・ω・`)
※追記:jinfoってコマンドでUseLargePagesデフォルト値を確認できた。変わってるっぽい。
[oracle@hostname1 bin]$ ps -ef | grep -i HelloWorld ★UseLargePagesオプション無し oracle 28067 22415 1 02:46 pts/0 00:00:00 /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -Xmx64m -Xms64m HelloWorld oracle 28111 24261 0 02:46 pts/1 00:00:00 grep -i HelloWorld [oracle@hostname1 bin]$ ./jinfo -flag UseLargePages 28067 ★jinfoコマンドで確認 -XX:+UseLargePages ★UseLargePagesオプションが有効化されている。 [oracle@hostname1 bin]$
※更に追記:java の「-XX:+PrintFlagsFinal」ってオプションでデフォルト値が確認できる。こっちの方が便利なんじゃ〜〜。
$ ./java -XX:+PrintFlagsFinal [Global flags] uintx AdaptivePermSizeWeight = 20 {product} uintx AdaptiveSizeDecrementScaleFactor = 4 {product} : bool UseLargePages = true {pd product} ★ :
■2017/11/15追記:Java 1.7.0_60以降ではhugepage(UseLargePages)は
デフォルトで無効化されているようです。下記リンク参照ですやで彡(゚)(゚)
RFR:7191817:-XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2013-December/010370.html