linux/security/selinux/ss
KaiGai Kohei 9fe79ad1e4 SELinux: improve performance when AVC misses.
* We add ebitmap_for_each_positive_bit() which enables to walk on
  any positive bit on the given ebitmap, to improve its performance
  using common bit-operations defined in linux/bitops.h.
  In the previous version, this logic was implemented using a combination
  of ebitmap_for_each_bit() and ebitmap_node_get_bit(), but is was worse
  in performance aspect.
  This logic is most frequestly used to compute a new AVC entry,
  so this patch can improve SELinux performance when AVC misses are happen.
* struct ebitmap_node is redefined as an array of "unsigned long", to get
  suitable for using find_next_bit() which is fasted than iteration of
  shift and logical operation, and to maximize memory usage allocated
  from general purpose slab.
* Any ebitmap_for_each_bit() are repleced by the new implementation
  in ss/service.c and ss/mls.c. Some of related implementation are
  changed, however, there is no incompatibility with the previous
  version.
* The width of any new line are less or equal than 80-chars.

The following benchmark shows the effect of this patch, when we
access many files which have different security context one after
another. The number is more than /selinux/avc/cache_threshold, so
any access always causes AVC misses.

      selinux-2.6      selinux-2.6-ebitmap
AVG:   22.763 [s]          8.750 [s]
STD:    0.265              0.019
------------------------------------------
1st:   22.558 [s]          8.786 [s]
2nd:   22.458 [s]          8.750 [s]
3rd:   22.478 [s]          8.754 [s]
4th:   22.724 [s]          8.745 [s]
5th:   22.918 [s]          8.748 [s]
6th:   22.905 [s]          8.764 [s]
7th:   23.238 [s]          8.726 [s]
8th:   22.822 [s]          8.729 [s]

Signed-off-by: KaiGai Kohei <kaigai@ak.jp.nec.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
2007-10-17 08:59:34 +10:00
..
avtab.c SELinux: tune avtab to reduce memory usage 2007-10-17 08:59:30 +10:00
avtab.h SELinux: tune avtab to reduce memory usage 2007-10-17 08:59:30 +10:00
conditional.c SELinux: tune avtab to reduce memory usage 2007-10-17 08:59:30 +10:00
conditional.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
constraint.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
context.h selinux: Delete mls_copy_context 2007-01-08 17:32:51 -05:00
ebitmap.c SELinux: improve performance when AVC misses. 2007-10-17 08:59:34 +10:00
ebitmap.h SELinux: improve performance when AVC misses. 2007-10-17 08:59:34 +10:00
hashtab.c SELinux: ensure keys constant in hashtab_search 2006-11-28 12:04:37 -05:00
hashtab.h SELinux: ensure keys constant in hashtab_search 2006-11-28 12:04:37 -05:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mls_types.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mls.c SELinux: improve performance when AVC misses. 2007-10-17 08:59:34 +10:00
mls.h selinux: Delete mls_copy_context 2007-01-08 17:32:51 -05:00
policydb.c SELinux: policy selectable handling of unknown classes and perms 2007-10-17 08:59:33 +10:00
policydb.h SELinux: policy selectable handling of unknown classes and perms 2007-10-17 08:59:33 +10:00
services.c SELinux: improve performance when AVC misses. 2007-10-17 08:59:34 +10:00
services.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sidtab.c Reassign printk levels in selinux kernel code 2007-02-26 14:43:07 -05:00
sidtab.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
symtab.c SELinux: ensure keys constant in hashtab_search 2006-11-28 12:04:37 -05:00
symtab.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00