All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] X+SELinux performance work
@ 2009-02-27 16:42 Eric Paris
  2009-02-27 17:12 ` Joe Nall
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Eric Paris @ 2009-02-27 16:42 UTC (permalink / raw)
  To: selinux; +Cc: sds, ewalsh, ajax, method, joe

(sorry for everyone who gets this twice, I misspelled the list address
the first time)

As a great example of how much selinux is killing X performance ajax
showed me the x11perf -create test.

Without the SELinux extensions: 175,000 events per second.
With the SELinux extensions:      1,000 events per second.

First thing I did to try to help was to implement creation caching in the AVC:
http://people.redhat.com/~eparis/xorg-selinux/libselinux-create-cache.patch

This resulted in about a 4.5-5x performance improvement

---

Next thing to try was to stop regularly calling recv on the netlink
socket to find policy update information.  So I hacked (poorly)
libselinux and the xselinux.c extention to try to create a seperate
thread which does nothing but listen on the netlink socket (I just stole
most of the code from dbus.)  X people on irc told me they didn't like
the idea of a thread in the X server and what I did to libselinux is
quite hideous.  I can certainly clean up libselinux (do the thread
callback as an selinux_set_callback() rather than this new
avc_open_init() interface.)  As long as the X people object to a
separate thread I guess these might be going into the bit bucket...

http://people.redhat.com/~eparis/xorg-selinux/libselinux-avc-open-init.patch
http://people.redhat.com/~eparis/xorg-selinux/xserver-selinux-netlink-faster.patch

---

Last thing was that translating from raw to whatever looked to be taking
up tons of syscalls, open a socket, bind, fail, close over and over and
over.  So I added new hook where X can just disable translations
altogether.  What does X care if it has raw strings?  I think as soon as
we have things to "display" strings to users they should take care of
translation and just let X internally hand things back and forth the way
the AVC can use them.

http://people.redhat.com/~eparis/xorg-selinux/libselinux-use-raw.patch
http://people.redhat.com/~eparis/xorg-selinux/xserver-selinux-raw.patch

So I've at least got us within one order of magnitude of the non-selinux
case.

Without the SELinux extensions:   175,000 events per second.
With the SELinux extensions:        1,000 events per second.
create-cache:                       5,000 events per second.
create-cache + nl-thread:           5,500 events per second.
create-cache + all-raw:            35,000 events per second.
create-cache + all-raw + nl-thead  65,000 events per second.

So initially the nl-thread didn't seem like a big win (only 10% perf
increase) but as I cut back on the setrans stuff the enforcing netlink
stuff started to dominate and it became a 2x perf win.

If I had a box with oprofile that worked I'd try to run it down more,
but I don't have any hardware with working performance counters.

Anyone how thoughts, comments, complaints, reviews, ideas, pointers,
direction, insults, compliments, etc etc, please share

-Eric


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-03-02 20:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-27 16:42 [RFC] X+SELinux performance work Eric Paris
2009-02-27 17:12 ` Joe Nall
2009-02-27 17:16   ` Eric Paris
2009-02-27 19:22     ` Daniel J Walsh
2009-02-27 17:29 ` Xavier Toth
2009-02-27 21:04 ` Eamon Walsh
2009-03-02 20:24   ` Eric Paris

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.