メモリ削減パッチ再提出
また提出しなおし。
ひたすらベンチマークとった。
http://marc.info/?l=selinux&m=118767082011094&w=2
さらにハッシュスロットへらして、300k超のメモリを節約した。
ハッシュ関数変えたけど、ハッシュテーブルの利用状況は良くとも、
ハッシュ関数が遅くなるほうが上回り、
全体として遅くなるので、変えないほうがいいという結論。
ちなみに、測定の中で、
ポリシーのサイズが小さくなると、
security_compute_avが遅くなっているように見える現象を発見した。
KaiGaiさんに聞いたら、アトリビュートが怪しいのではとのこと。
security_compute_avから呼ばれる関数に以下のような処理がある。
331 sattr = &policydb.type_attr_map[scontext->type - 1]; 332 tattr = &policydb.type_attr_map[tcontext->type - 1]; 333 ebitmap_for_each_bit(sattr, snode, i) { 334 if (!ebitmap_node_get_bit(snode, i)) 335 continue; 336 ebitmap_for_each_bit(tattr, tnode, j) { 337 if (!ebitmap_node_get_bit(tnode, j)) 338 continue; 339 avkey.source_type = i + 1; 340 avkey.target_type = j + 1; 341 for (node = avtab_search_node(&policydb.te_avtab, &avkey); <略> 350 }
つまり、ドメイン側とタイプ側に付与されたアトリビュート全ての組合せに対して、
avtab_search_nodeを呼んでいる。
調べてみると、
strictポリシでは、例えばkernel_tには8個アトリビュートが付与されているのに対し、
targetedでは、kernel_tに24個も。
遅くなるわけだ。
お、早速返事が返ってきた。
概ねよさそうだ。あとはコーディングスタイルの問題っぽい。
そういえば、カーネルコーディングのお作法はよく知らないなぁ。勉強しなきゃ(汗