Oracle RAC on Linux でキャッシュフュージョンを行う際、サーバープロセスがLMSプロセスに対してブロック転送を要求し、LMSプロセスがブロックをサーバープロセスに転送する図を書いてみた。ソケットバッファに関して、いろいろ検証してみたいことがあるので、まずは何がわからないかを整理してみた。
疑問点
- サーバープロセスはキャッシュフュージョンのためにソケットを開きっぱなしにしているか?
- LMSプロセスとサーバープロセスは setsockopt() に SOL_SOCKET + SO_RCVBUF/SO_SNDBUF を指定して、ソケットバッファのサイズを拡張しているか、それともデフォルト(net.core.rmem_default/net.core.wmem_default)のまま?
- ソケットをオープンした時点ではソケットバッファ用にメモリは確保されず、書き込みされたときなどに初めて確保され、転送処理が完了すると解放されるような感じ?ファイルシステムのキャッシュぽいけど、使い終わるとメモリ上に残存させない感じ?
- ソケットバッファに使われているメモリサイズを調べることができるか?例えば、/proc/meminfo のどこを見ればわかるとか。