[PATCH] xfree86: Use SA_SIGINFO if available for SIGIO handlers
Adam Jackson
ajax at nwnk.net
Tue Nov 17 12:57:46 PST 2009
On Tue, 2009-11-10 at 21:15 +0100, Mark Kettenis wrote:
> > From: Adam Jackson <ajax at redhat.com>
> > Date: Tue, 10 Nov 2009 15:03:31 -0500
> >
> > This one's slightly subtle, the fcntl(F_SETSIG) is required for ->si_fd
> > to actually be filled in correctly, at least on Linux. I know this area
> > has been sensitive to platform variation in the past, so I'd appreciate
> > a second look from Solaris / BSD / Hurd people.
>
> Alas, OpenBSD doesn't have si_fd. So if you really want to go this
> route, you'll need to add an additional configure check for it.
Harsh!
> > siginfo_t gives us the file descriptor that raised the signal directly,
> > so we don't need to select() for it. This gets evdev event processing
> > down to exactly one syscall in the common case.
>
> Is that an optimizition that's really worth the added complexity?
Seems straightforward to me. I just wrote it because it's clearly
correct. But hey, why guess when you could measure. This:
http://ajax.fedorapeople.org/ten-million-selects.c
in a RHEL5.4 32-bit kvm guest (Fedora 12 host, Intel Core 2 Duo at
2.6GHz) runs about this fast:
% time ./ten-million-selects
./ten-million-selects 1.35s user 4.28s system 94% cpu 5.981 total
So, about 1500 cycles per select call, and if your mouse was absolutely
screaming events at you, you'd max out at something like a thousand per
second, which'd come to about half a millisecond. If you're a gamer,
you might pretend to notice that. But, that's a fairly fast machine;
how far down do you want to scale? Assuming identical syscall code
paths (which is a bit spurious, I know) on a 300MHz chip that'd be 5ms,
which is starting to get into losing frames territory.
Other OSes, naturally, have different numbers. In an otherwise
identical kvm guest setup, FreeBSD 7.2 gives:
$ time ./ten-million-selects
9.15 real 1.27 user 7.31 sys
OpenSolaris 0906 gives:
$ time ./ten-million-selects
real 0m4.319s
user 0m2.488s
sys 0m1.379s
I'd have tried OpenBSD 4.6 but it failed to boot once installed and I
couldn't be bothered to figure out if that was a kvm bug or not.
- ajax
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://lists.x.org/archives/xorg-devel/attachments/20091117/fb3b3c07/attachment.pgp
More information about the xorg-devel
mailing list