libselinuxを使うかどうか(2)

この資料は、日本PostgreSQLユーザ会 仕組み分科会 井久保さんの作成した、PostgreSQLの利用するIPCの解析資料
http://www.f5.dion.ne.jp/~ikubo/PostgreSQL/pdf/IK08_ipc_041117.pdf

これを見ると、PostgreSQLの共有メモリ機構を利用するためのヒントが得られるが、AVC相当のモノを共有メモリセグメントに置くのも結構いいかなという気がした。
libselinuxをそのまま使うと、以下のような不都合がある。
1.クライアントからの接続を受けて、PostgreSQLインスタンスが生成された直後はAVCが空。なので、最初の何回かのavc_has_perm()関数の呼び出しは必ずカーネル呼び出しになってしまう。よって遅い。
2.ポリシーがロードされた場合、libselinuxはnetlink()ソケット経由でその通知を受け、ユーザ空間AVCをフラッシュしなければならない。このため、netlink()ソケットを監視するスレッドが一つ必要になる。PostgreSQLインスタンス一個ごとにスレッド一個というのはアホ。

本来なら、こういうパフォーマンス系の実装は後にするものだけど、後になればなるほど工数が増えるし、今のうちにちょっと検討してみる価値はあるかもね。