うならぼ

どうも。

grub2でEFIブートに移行した

メインのGentoo環境(年一回未満syncするだけと化している)がBIOSブートだったのを忘れてGPTディスクに移してあれなことになったので、やっと移行しました。*1

systemrescuecdで起動して、諸々マウントして、chrootして、emerge grub:2 を叩いて、適当に済ませるだけです。日本語の資料は Gentoo WIki にも Arch Wiki にもあるので、安心ですね。

以下どうでもいい話。

  • efifbとnvidia-driversが競合してsystemrescuecdが真っ暗
    →KMSを無効化して起動するオプションを使う
  • なんかESPの前にパーティションが余ってるから結合しよう
    →gdiskで…リサイズが面倒だ、partedで…終了位置指定するのが面倒だ、やっぱりgparted。
  • chroot内でgrub2-installしたのにブートエントリ登録されてなくない?? →efishellで直接起動して、改めてgrub2-installしたらちゃんと登録されたっぽい。

あとgrub.conf見てたら懐かしくなったので供養。

splashimage (hd0,2)/boot/splash.xpm.gz
foreground fcb595
background 643426

# jp keymap
setkey at bracketleft
setkey doublequote at
setkey ampersand caret
setkey quote ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey tilde parenright
setkey equal underscore
setkey plus colon
setkey colon quote
setkey asterisk doublequote
setkey bracketleft bracketright
setkey braceleft braceright
setkey bracketright backslash
setkey braceright bar
setkey backslash equal
setkey underscore plus
setkey backslash bracketleft
setkey bar braceleft
setkey F9 equal
setkey F10 bracketleft
setkey equal k73
setkey bracketleft k7d

#0x361=1280x800 0x33e=640x400 0x31b=1280x1024

title Gentoo Linux 3.12.13 (Highres/Splash)
root (hd0,2)
kernel /boot/kernel-3.12.13-gentoo root=/dev/sdb3 video=vesafb:mtrr:2,ywrap vga=0x361 splash=silent,theme:MyNewLinux console=tty1
initrd /boot/splash/MyNewLinux.gz

title Gentoo Linux 3.12.13
root (hd0,2)
kernel /boot/kernel-3.12.13-gentoo root=/dev/sdb3 video=vesafb:mtrr:2,ywrap vga=0x33e

ブートメニューの背景に凝ってみたり、jp106配列の記号類をマッピングしたり、高解像度化のためにvgaをいじったり、fbsplashを試してみたり、色々やってたなあ。

*1:grub2でEFIブートな環境も作ったことはあったけれど、この環境はMBMからGRUB Legacyをチェインロードするという時代を感じる構成だった。EFIEFIで共通のストアを使うのが便利でもあるしはまりポイントな気もするし、うーん。

MinecraftでG1GCを使ったメモ

2GBの Incremental CMS でぼちぼち動いていて、6GBも割り当てるのは避けたいという環境で、G1GCどないやろって試した記録。実用レベルにはなったのでしばらく動かしてみるけど、そこまでメリットは…という感じ。

-Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCCause を付けて起動しては GCViewer に食わせて眺めるの繰り返しをしていた。

  • 起動完了時に FullGC を手動で実行しているっぽいが、今の構成ではそこまでメリットがないので1secをケチって -XX:+DisableExplicitGC をつける -> いい感じ
  • Young:Tenuredをガッと1G:2Gにしてみる -> GC回数やトータルの時間こそ減っても、最大の停止時間が延びてしまった。恐らくレンダリング周りを中心に短命なオブジェクトが多いので、まとめて掃除するよりは頻繁に片づけた方が停止時間は少なくてすむ。それはそう。

-Xmx2G -Xms2G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:+DisableExplicitGC -Xmn128m

で、G1GC。

  • XX:MaxGCPauseMillisを守ろうと頑張ってくれるのだけど、調子にのってYoungがヒープの半分ほどを持っていってしまうことがあり、移動先がなくてFullGCが走ってしまった。
  • -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=30 で積極的にmixedを走らせ余裕も持たせると流石に失敗することはない感じ。でも時々カクつく。やっぱりYoungを絞ることを考えた方がよいのでは。
  • -XX:G1MaxNewSizePercent で十分に絞ると心なしか停止時間も短かくなる?
    • じゃいっそXmnで固定してもいいのではとなるけど、それならCPU負荷低い分CMSでよくない?という感じが。
  • どうせTenuredはなかなか埋まらないので、InitiatingHeapOccupancyPercent は MaxNewSize 近辺かより小さいぐらいでないと意味なさそう。となった時に Young を絞って young GC に仕事してもらう vs InitiatingHeapOccupancyPercent だけ下げて積極的に mixed GC してもらう、みたいなことを思ったけれど、ワーストケースを抑制するにはやはり Young を絞ったほうがいいかなあという感じ。
  • 基本的に潤沢なメモリとCPUが前提というか、それを有効活用してスループットや停止時間を改善する感じはある(12Gもあればいい感じに動くのだろうな)

-Xmx2G -Xms2G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1MaxNewSizePercent=20 -XX:G1ReservePercent=30 -XX:MaxGCPauseMillis=20 -XX:+DisableExplicitGC

どうせそういう運用になるならと2GBにしてみたけど、主に3とか4とかで試していた。

参考

いろいろ読んだけどよーわからんマン。

GC全般とか

G1GCの話