Subject: CVS commit: [vmlocking] src/sys/kern
To: None <source-changes@NetBSD.org>
From: Andrew Doran <ad@netbsd.org>
List: source-changes
Date: 10/18/2007 15:47:00
Module Name: src
Committed By: ad
Date: Thu Oct 18 15:47:00 UTC 2007
Modified Files:
src/sys/kern [vmlocking]: kern_softint.c
Log Message:
Soft interrupt changes. This speeds up the slow mechanism quite a bit and
removes the requirement that IPL_SCHED == IPL_HIGH. On a DECstation 3100
using the slow mechanism, FTP transfers are about 7% slower than HEAD on
the few simple tests that I have done.
- Instead of using the run queues to schedule soft interrupts, poll for soft
interrupt activity in mi_switch(). If there is a soft interrupt to run, we
pick a new soft interrupt LWP to run in preference to checking the run
queues.
- If a soft interrupt occurs while the CPU is running in userspace, hijack
the user LWP in userret() to run the soft interrupt, thus avoiding context
switches. This is OK to do, since in userret() the LWP can hold no locks.
Soft interrupts will very rarely block in this configuration, and any
blocking activity will be short term, so the user process will ~never be
delayed by much. The downside to this approach is that it prevents the
architecture from doing anything useful with real-time LWPs or kernel
preemption, but that is not a problem is the fast path is implemented.
- Steal an idea from powerpc, and use DONETISR to set up multiple soft
interrupt handlers for the legacy netisrs. Now schednetisr() just does
softint_schedule() on the relevant handle.
To generate a diff of this commit:
cvs rdiff -r1.1.2.17 -r1.1.2.18 src/sys/kern/kern_softint.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.