LockPagesInMainMemory

提供:MySQL Practice Wiki

移動: 案内, 検索
LockPagesInMainMemory
ファイル config.ini
セクション [ndbd], [ndbd default]
データ型 整数値
デフォルト値 0
値の範囲 0,1,2
効果 プロセスのメモリをロックする。
効果の有効範囲 ndbdプロセス全体
使用頻度

説明

ndbdデーモン開始後に、アロケートしたメモリをロックする。ロックすることにより、プロセスがスワップアウトするのを防ぐ。ndbdにとって、スワップアウトは命取りであるが、運用中に他のプロセスを誤って実行してしまったりすることでシステムがメモリ不足に陥り、ndbdがスワップの対象になってしまうという事態が発生しうる。これを防ぐために、多くのUNIX系OSではスワップアウトをしないようにするための機能が備わっている。

ソースコード関連

ロックにはmlockall()/munlockall()を使用する。これを呼び出しているのはstorage/ndb/src/common/portlib/NdbMem.cにあるNdbMem_MemLockAll()関数である。この館数の引数はint型で、呼び出されるときの値は0か1なのだが、LockPagesInMainMemory=1のときにNdbMem_MemLockAll(0)が呼び出され、LockPagesInMainmemory=2のときにNdbMem_MemLockAll(1)が呼び出されるので非常にややこしい。

呼び出し元はstorage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cppとなっている。

storage/ndb/src/kernel/vm/Configuration.hppに設定値が保存されている。

バグ情報

Linuxのman mlockall()を見ると、MCL_FUTUREオプションを指定したときのバグが載っている。MCL_FUTUREはLockPagesInMainMemory=2のときに呼び出されるのだが、個人的な勘からすると潜在的な問題も孕んでそうな気がする。LockPagesInMainMemoryはスワップの防止に必要なので、1に設定しておこう。

個人用ツール