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 [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html