The major performance hit that SELinux can make on the system is in the
kernel, where the hooks used through LSM divert the kernel flow into the
AVC. Usually, the working set of cached permissions used in normal system
operations is relatively small, fewer than 100 AVC entries for most
systems with a focused mission. SELinux maintains up to 512 entries in the
cache, and does not usually need to perform additional lookups outside of
that cache.
If you suspect you are having performance problems due to SELinux or you
generally want to fine tune your system, you can monitor the AVC through
the /selinux file system. The first file,
/selinux/avc/hash_stats, shows the number of entries,
the number of hash buckets used by the entries, and the length of the
longest hash chain:
cat /selinux/avc/hash_stats
entries: 521 # total number of AVC entries
buckets used: 285/512 # total number of buckets
longest chain: 6 # hash chain of less than 10 is
# optimal |
If your hash chains are growing to be larger than 10, there may be a
performance impact. You can consider reducing the size of the cache. To
increase or decrease the size of the cache, you can set a new value
through this tunable:
cat /selinux/avc/cache_threshold
512
echo 768 > /selinux/avc/cache_threshold
# Check to be sure the change took hold. Be sure you are
# root when using the targeted policy.
cat /selinux/avc/cache_threshold
768 |
| Caution |
---|
| The default value of 512 for the cache threshold in Red Hat Enterprise Linux is set from
extensive optimization benchmarking. Changing this value could have
negative effects on system performance.
|
To be sure adjusting the cache limit is having positive effects on your
performance, watch the number of reclaimed cache entries. Stale cache
entries can build up following boot or long after daemon startup, which
requires reclaiming entries when more are required for new processes. If
you have a system where there are a high number of entries changing across
a broad enough policy, this reclamation may occur more often and effect
system performance. You can watch the
reclaims column in the output of
avcstat using the -c option, which
displays the cumulative values:
avcstat -c 1
... reclaims ...
... 800 ...
... 830 ...
... 876 ...
... 912 ...
... 955 ...
... 992 ...
|
Occasional reclaim activity is within the bounds of normal, and it may
increase when changing workloads. Excessive reclaims over a sustained
period of time should be looked into.