syscall improvement patch [0/12]

From: David Mosberger <davidm_at_napali.hpl.hp.com>
Date: 2005-03-24 11:49:09
Tony,

Inspired by the excellent work the UNSW folks did to optimize the L4
IPC hot path, I took another look at the syscall paths (well, I did
cheat a little to get this done in a reasonable amount of time).

The result of this work in in the following series of 12 patches.
They successively improve various aspects of the kernel's syscall
entry and exit paths.  I tried to split them as much as possible into
independent pieces, but since many of them touch the same areas of
code, it's by far easiest to apply them in order.

I have done as much testing as I can and think the patches are all
safe.  For the most part, they're just shuffling instructions around
without any functional/behavior change but then again this is very
low-level code so it's easy to goof.  In particular, I'd very much
like critical minds to review the fsys_bubble_down() changes,
specifically the rationale for why we don't need a srlz.i in that code
(the rationale is both in the patch header and the code comment).

I would be very interested to hear how these patches behave on
syscall-intensive workloads with huge workingsets.

A summary of the effect of the patches on getpid() and getuid()
performance is in the table below (4 of the patches are
cosmetic/cleanup only, so they don't have any performance effects).
In the table below, "EPC" is for EPC-based system calls, "BREAK" for
BREAK-based system-calls (note: the test-programs ensure that getpid()
isn't cached by the C library).  All numbers are cycle counts as
measured on a 1.5GHz/6M Madison.

					  getpid	  getuid
					EPC	BREAK	EPC	BREAK
 Baseline (linux-ia64-test-2.6.12):	40	254	232	249
 Dynamic prediction of RSE-clearing br:	40	252	231	249
 Avoid F-unit stalls after ar.bsp read: 40	246	225	246
 Hint b7 with __kernel_syscall_via_epc:	40	246	219	246
 Use st8 instead of stf8 to clear pt.r8:40	245	217	242
 Read bsp early in ia64_leave_syscall:	40	237	208	232
 Reschedule break_fault:		40	207	208	206
 Reschedule __kernel_syscall_via_epc:	38	207	201	206
 Reschedule fsys_bubble_down:		38	207	180	206

I'd appreciate if you could check these patches into the
linux-ia64-test-2.6.12 repository as soon as possible so we can give
it additional testing-exposure before feeding it into 2.6.13.

Thanks!

	--david
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Wed Mar 23 19:50:21 2005

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:37 EST