Linux + SGA 大きく + 接続セッション沢山 -> Hugepage

メモ
http://www.reqtc.com/column/linux-hugepage4.html
http://www.reqtc.com/column/linux-hugepage5.html
http://joe.blog.freemansoft.com/2010/10/memory-tuning-how-os-page-sizes-can.html

メモリ沢山積んだ(っても、64Gくらいじゃもうそんなに多いといえないか?)マシンでOracle動かして、
調子に乗ってSGA 30G環境で、1000セッションつないだらスワップ起きますよというお話。

「1GBの共有メモリに対して、2MBのPTEが消費」とあるので
 →1024/2 = 512/M
30Gだと、、、最悪、、、
 →30720/512 = 60M/1ses * 1000 ses = 60G (ノω・、) ウゥ・・・

HugePageの設定をおとなしく入れましょうorz
LinuxだとPTEで予想以上にメモリ使われるんですねえ…。

最近はあまり見かけない?ですが、共有メモリアーキテクチャ全般に言えることですので、
PostgreSQL辺りでも言えることかもしれません。

※9/2追記(ちょっとした検証結果

■メモリ 2G
■SGA設定 1G
■コネクション数 100(外部ホストからjdbc-thin接続)
■Huge設定時の 5分後付近の vmstat
vm.nr_hugepages = 524

HugePages_Total:   524
HugePages_Free:     19
HugePages_Rsvd:      8
Hugepagesize:     2048 kB
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
27  2     84  11424   2004 478108    0    0    24 31344 3702 20264 73 16  5  5  0
64  1     84  10540   1988 478496    0    0     4 21936 4095 20599 66 15 12  7  0
51  1     84  10168   1988 478468    0    0     0 14504 3970 22267 75 15  7  4  0
 9  2     84  12696   1960 477628    0    0     0 22188 3626 20708 74 16  5  4  0

■Hugeなしの  5分後付近の vmstat
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
70  0 166704  12708   1080 1363400    0    0     0 13064 3294 20129 75 15  6  3  0
33  1 166700  11552   1080 1364644    0    0     0 17064 3198 19718 75 16  6  4  0
 1  2 166696  11568   1088 1364044    0    0    16 25660 3470 19088 74 16  4  5  0
 7  1 166696  11356   1080 1363584    0    0    20 27688 3502 16701 59 15 14 11  0