All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ole Kliemann <ole@plastictree.net>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: selinux@tycho.nsa.gov, Eric Paris <eparis@redhat.com>
Subject: Re: SELinux performance depending on type count
Date: Fri, 10 Aug 2012 17:44:54 +0200	[thread overview]
Message-ID: <20120810154454.GH2296@telvanni> (raw)
In-Reply-To: <1344611147.10631.65.camel@moss-pluto.epoch.ncsc.mil>

[-- Attachment #1: Type: text/plain, Size: 4513 bytes --]

PS: Have you actually reproduced this problem? Could still be 
something else broken on my system...

On Fri, Aug 10, 2012 at 11:05:47AM -0400, Stephen Smalley wrote:
> On Fri, 2012-08-10 at 16:36 +0200, Ole Kliemann wrote:
> > On Fri, Aug 10, 2012 at 09:00:15AM -0400, Stephen Smalley wrote:
> > > On Fri, 2012-08-10 at 14:11 +0200, Ole Kliemann wrote:
> > > > I did some runtime test now. I have about 2000 types, 1000 of 
> > > > them (named xIcJ_t, for 0 <= I <= 9, 0 <= J <= 99) each with his 
> > > > own role (xIcJ_r) associated to a user_u. Then there is a user_r 
> > > > and user_t for login. Additionally there is 
> > > > system_u:system_r:root_t with full access to everything.
> > > > 
> > > > I run the attached script. It creates directories for each of the 
> > > > 1000 types, puts something in it, does a find/grep etc.
> > > > 
> > > > As system_u:system_r:root_t the script measures an average of 
> > > > about 6sec walltime over 5 runs. (With very little variance.)
> > > > 
> > > > When I change context to user_u:user_r:user_t even things like 
> > > > 'ls' on home dir or 'id' lag consideribly the first time 
> > > > executed. Just being in this context makes things slow. The 
> > > > script measures an average of about 15sec walltime over 5 runs. 
> > > > 
> > > > That's 2.5 times as much. Who thinks 7% is ridiculously high now? 
> > > > ;-)
> > > > 
> > > > While it's running the whole system sometimes lags even for just 
> > > > writing on the terminal. top shows spikes of 50%+ CPU on kworker 
> > > > threads.
> > > > 
> > > > 
> > > > Good side is: It's a clear result and kind of settles the 
> > > > question. If you want a lot of different types for one user, go 
> > > > for categories.
> > > > 
> > > > 
> > > > But I don't understand this result. Why isn't it slow when root 
> > > > runs the script? He does the same relabeling to all those types. 
> > > > It's not like user_u:user_r:user_t would be running in different 
> > > > type concurrently. Just the fact that user_u is associated with 
> > > > all those types seems to make it slow to run in any context 
> > > > user_u:*
> > > 
> > > Your result doesn't sound right.  Wondering whether you are triggering
> > > masses of AVC denials (which could then peg syslog or audit) when
> > > running your script?
> > 
> > Checked that of course. dmesg showed nothing or just occasional 
> > denials. Just tryed again giving user_t full access to 
> > everything. Changes nothing and dmesg is clear. 
> > 
> > Anyway turns out above I forgot to mention something that 
> > actually is the core of the problem:
> > 
> > I build a minimal example which is attached. Of course you have 
> > at modify it to your policy. 
> > 
> > Basicly there is one role choke_r with one type choke_t und a 
> > user choke_u with role choke_r. Then are 1000 other types in the 
> > choke role each with a corresponding attribute.
> > 
> > This alone isn't a problem. But if each of these attributes get 
> > attributed to choke_t, the slowdown starts. Not as bad as 
> > mentioned above but still significantly. (10sec in the test 
> > above.)
> > 
> > So we have choke_u:choke_r:choke_t. Although all other types are 
> > in choke_r, that alone causes nothing. But as soon as there are
> > these 1000 attributes on choke_t the fun starts. Actually you 
> > don't even need the 1000 types. Just 1000 attributes on one type 
> > produces a measurable slowdown (7sec) and lags. Having 1000 types 
> > beside just makes it a lot worse. But there absolutely no 
> > slowdown with just 1000 types and no attributes.
> 
> Interesting.  We would expect some slowdown on an AVC cache miss in that
> situation, although the amount seems troubling.  Things to consider:
> - Does the AVC cache need to be increased or otherwise tuned?  You can
> see some information via the avcstat utility or by directly looking
> at /sys/fs/selinux/avc.
> 
> - Does security_compute_av(), which is called on a cache miss, need some
> profiling and tuning?  Particularly the logic within
> context_struct_compute_av(), where we are iterating through the type
> attribute ebitmaps.
> 
> In Fedora 17, most types only have a few attributes (as shown by seinfo
> -t -x).  unconfined_t has a larger number of attributes than most, but
> even it only has 46 attributes.  So we likely don't see this behavior
> there.
> 
> -- 
> Stephen Smalley
> National Security Agency

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  parent reply	other threads:[~2012-08-10 15:45 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-07 13:02 SELinux performance depending on type count Ole Kliemann
2012-08-07 14:12 ` David Quigley
2012-08-07 17:07 ` William Roberts
2012-08-07 17:36   ` Daniel J Walsh
2012-08-08 20:44 ` Ole Kliemann
2012-08-09 10:45   ` Adam Tkac
2012-08-09 11:56     ` Ole Kliemann
2012-08-10 12:11 ` Ole Kliemann
2012-08-10 13:00   ` Stephen Smalley
2012-08-10 14:36     ` Ole Kliemann
2012-08-10 15:05       ` Stephen Smalley
2012-08-10 15:43         ` Ole Kliemann
2012-08-10 15:44         ` Ole Kliemann [this message]
2012-08-10 16:08           ` Stephen Smalley
2012-08-10 16:18             ` Stephen Smalley
2012-08-10 17:00               ` Ole Kliemann
2012-08-10 18:08                 ` Stephen Smalley
2012-08-10 18:46                   ` Ole Kliemann
2012-08-10 18:55                     ` Stephen Smalley
2012-08-10 19:11                       ` Ole Kliemann
2012-08-10 19:19                         ` Stephen Smalley
2012-08-10 19:26                           ` Ole Kliemann
2012-08-10 19:50                             ` Stephen Smalley
2012-08-10 21:38 ` Ole Kliemann
2012-08-13 12:35   ` Stephen Smalley
2012-08-27 15:28     ` Ole Kliemann
2012-08-27 16:24       ` Stephen Smalley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120810154454.GH2296@telvanni \
    --to=ole@plastictree.net \
    --cc=eparis@redhat.com \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.