2011年11月10日木曜日

HugePagesとその設定_1

2011/11/09のOracle DBA & Developer Days 2011のE-5セッション
シバタツ流!チューニングの極意「パフォーマンス・チューニングの勘どころ」でも
シバタツさんが説明されていたので、ちょうど前日検証していたところもあり、
書いておきたいと思います。


■HugePages
 Linuxカーネル2.6に統合された機能です。これは大きいページを使用する方法で、
 大規模メモリーで作業する際に便利です。
 32ビットおよび64ビット構成の両方で使用できます。HugePageサイズは、
 カーネル・バージョンおよびハードウェア・アーキテクチャに応じて、
 2MBから256MBと異なります。
 Oracle Databaseの場合、HugePagesを使用すると、
 ページ状態のオペレーティング・システム・メンテナンスが軽減され、
 Translation Lookaside Buffer(TLB)ヒット率が向上します。

■なぜ大規模メモリにHugePagesなのか?
 HugePagesを使用しない場合、1ページ当たり4KBのメモリーがオペレーティング・システムに
 保持され、SGAに割り当てられる際に、
 ページのライフサイクル(ダーティ、空き、プロセスにマップ済など)が
 オペレーティング・システム・カーネルによって最新に保たれます。
 HugePagesを使用する場合、各ページ表エントリが2MBから256MBのページを指すため、
 オペレーティング・システム・ページ表(仮想メモリーから物理メモリーへのマッピング)は
 小さくなります。
 また、カーネルでは、ライフサイクルを監視する必要があるページが少なくなります。

⇒Oracleが何を言いたいかと言うと、大きな物理メモリを積んでいるようなマシンで、
 Oracleに割り当てるでっかいメモリ領域(SGA)を4KB単位とのページを
 OSが管理するのは負荷(CPU負荷)が高いんです。
 なので、1ページが大きいHugePagesを使用した方がOSの管理負荷(CPU負荷)が
 低減されてよいんです。と言っているんだと思う。

また、HugePagesを使うと以下のメリットがあります。

1.TLBヒットが増加することによってパフォーマンスが向上します。
2.ページがメモリー内でロックされ、スワップ・アウトされないため、
 SGAのような共有メモリーがRAMに残ります。
3.連続するページを事前に割り当てるため、
 System V共有メモリー(SGAなど)以外に使用できなくなります。
4.より大きなページ・サイズによる仮想メモリーの部分のため、カーネル用の記録操作が
  削減されます。

⇒2.がポイントかしら。要は、SGAをメモリ上にロックできるんですね。
 それにより、スワップ・イン/スワップ・アウトを食らわなくてすむ。
 SGAの情報は常にRAM上にキャッシュできる。
 (そもそも、キャッシュ上のデータ管理はSGAのLRUがあるし。)
 ⇒OSのページ管理による負荷(CPU負荷)を軽減できる。


なお、大規模メモリ環境におけるOSのページ管理による負荷(CPU負荷)は
MOSでも障害として取り上げられています。
[ID 361670.1]Slow Performance with High CPU Usage on 64-bit Linux with Large SGA

大規模メモリ&大規模SGAを積んでる環境で、なんかSYSTEM CPU負荷が高いんだけど。。。
という環境は確認&検討してみるといいかもですね。
※大規模メモリ:シバタツさんのセミナーでは32GBが目安とご説明されていました。


ちなみに、HugePagesはmemory_targetでは使えないので注意が必要。
でも、それは次回のHugepagesとその設定_2で。。。


出典:Oracle® Database管理者リファレンス 11g リリース2(11.2)
  for Linux and UNIX-Based Operating Systems

0 件のコメント:

コメントを投稿