freebsd-dev/sys/kern
Peter Wemm cc66ebe2a9 Commit a partial lazy thread switch mechanism for i386. it isn't as lazy
as it could be and can do with some more cleanup.  Currently its under
options LAZY_SWITCH.  What this does is avoid %cr3 reloads for short
context switches that do not involve another user process.  ie: we can
take an interrupt, switch to a kthread and return to the user without
explicitly flushing the tlb.  However, this isn't as exciting as it could
be, the interrupt overhead is still high and too much blocks on Giant
still.  There are some debug sysctls, for stats and for an on/off switch.

The main problem with doing this has been "what if the process that you're
running on exits while we're borrowing its address space?" - in this case
we use an IPI to give it a kick when we're about to reclaim the pmap.

Its not compiled in unless you add the LAZY_SWITCH option.  I want to fix a
few more things and get some more feedback before turning it on by default.

This is NOT a replacement for Bosko's lazy interrupt stuff.  This was more
meant for the kthread case, while his was for interrupts.  Mine helps a
little for interrupts, but his helps a lot more.

The stats are enabled with options SWTCH_OPTIM_STATS - this has been a
pseudo-option for years, I just added a bunch of stuff to it.

One non-trivial change was to select a new thread before calling
cpu_switch() in the first place.  This allows us to catch the silly
case of doing a cpu_switch() to the current process.  This happens
uncomfortably often.  This simplifies a bit of the asm code in cpu_switch
(no longer have to call choosethread() in the middle).  This has been
implemented on i386 and (thanks to jake) sparc64.  The others will come
soon.  This is actually seperate to the lazy switch stuff.

Glanced at by:  jake, jhb
2003-04-02 23:53:30 +00:00
..
bus_if.m Give print_child a default method. 2003-03-25 04:32:52 +00:00
clock_if.m Add a generic implementation of inittodr() and resettodr(), as well as 2002-04-04 23:39:10 +00:00
device_if.m
genassym.sh Allow one to specify the AWK used in the environment(commandline). 2002-02-11 03:54:30 +00:00
imgact_aout.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
imgact_elf32.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf64.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
imgact_gzip.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
imgact_shell.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
inflate.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
init_main.c Use the proc lock to protect p_realtimer instead of Giant, and obtain 2003-02-17 10:03:02 +00:00
init_sysent.c - Regen. 2003-04-01 02:34:21 +00:00
kern_acct.c Trim some trailing whitespace. 2003-03-13 23:07:09 +00:00
kern_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
kern_alq.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_clock.c Update netisr handling; Each SWI now registers its queue, and all queue 2003-03-04 23:19:55 +00:00
kern_condvar.c Do NOT return from an non-interruptable cv_wait, falsely 2003-03-31 22:41:47 +00:00
kern_conf.c Add one little hack to allow us to make MAJOR_AUTO be zero: 2003-03-09 10:28:05 +00:00
kern_context.c - Fix UC_COPY_SIZE. Adding up the size of structure fields doesn't take 2003-04-01 23:25:18 +00:00
kern_descrip.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
kern_environment.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_event.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_exec.c - Borrow the KSE single threading code for exec and exit. We use the check 2003-04-01 01:26:20 +00:00
kern_exit.c - Borrow the KSE single threading code for exec and exit. We use the check 2003-04-01 01:26:20 +00:00
kern_fork.c - Borrow the KSE single threading code for exec and exit. We use the check 2003-04-01 01:26:20 +00:00
kern_idle.c - Create a new scheduler api that is defined in sys/sched.h 2002-10-12 05:32:24 +00:00
kern_intr.c Add a WITNESS_WARN() call to verify that we hold no locks after running 2003-03-04 21:01:42 +00:00
kern_jail.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_kse.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_kthread.c Some kernel threads try to do significant work, and the default KSTACK_PAGES 2002-10-02 07:44:29 +00:00
kern_ktr.c Trim leading "../" sequences from filenames. 2003-03-11 19:56:16 +00:00
kern_ktrace.c Add a new userland-visible ktrace flag KTR_DROP and an internal ktrace flag 2003-03-13 18:31:15 +00:00
kern_linker.c FreeBSD 5.0 has stopped shipping /modules 2.5 years ago. Catch 2003-03-03 22:53:35 +00:00
kern_lock.c Use the KTR_LOCK mask for logging events via KTR in lockmgr() rather 2003-03-11 20:00:37 +00:00
kern_lockf.c Including <sys/stdint.h> is (almost?) universally only to be able to use 2003-03-18 08:45:25 +00:00
kern_mac.c Modify the mac_init_ipq() MAC Framework entry point to accept an 2003-03-26 15:12:03 +00:00
kern_malloc.c Permit debug.malloc.failure_rate to be specified using a tunable so 2003-03-26 20:44:29 +00:00
kern_mib.c - Provide backwards compatibility for kern.fallback_elf_brand. 2003-01-05 03:48:14 +00:00
kern_module.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_mtxpool.c Change callers of mtx_init() to pass in an appropriate lock type name. In 2002-04-04 21:03:38 +00:00
kern_mutex.c Remove unused mtx_lock_giant(), mtx_unlock_giant(), related globals 2003-03-23 11:26:11 +00:00
kern_ntptime.c Explicitly have the timecounter init happen after the cpu_initclocks is 2003-01-06 01:01:08 +00:00
kern_physio.c - Add a lock for protecting against msleep(bp, ...) wakeup(bp) races. 2003-03-13 07:31:45 +00:00
kern_poll.c Update netisr handling; Each SWI now registers its queue, and all queue 2003-03-04 23:19:55 +00:00
kern_proc.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
kern_prot.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_resource.c Back out previous. The locking here needs a rethink. 2003-03-13 00:54:53 +00:00
kern_sema.c Change callers of mtx_init() to pass in an appropriate lock type name. In 2002-04-04 21:03:38 +00:00
kern_shutdown.c style. 2003-02-14 12:44:48 +00:00
kern_sig.c - p will be unused in cursig() if INVARIANTS is not defined. Access it 2003-04-01 09:07:36 +00:00
kern_subr.c Remove extraneous check. We are not going to return from copyin/out on 2003-03-25 20:13:24 +00:00
kern_switch.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_sx.c Set the lock type equal to the lock name for now as all of the current 2002-04-04 20:49:35 +00:00
kern_synch.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_syscalls.c - Lock down the ``module'' structure by adding an SX lock that is used by 2002-03-18 07:45:30 +00:00
kern_sysctl.c Use a shorter and less redundant name for the sysctl tree lock. 2003-03-11 20:01:51 +00:00
kern_tc.c Including <sys/stdint.h> is (almost?) universally only to be able to use 2003-03-18 08:45:25 +00:00
kern_thr.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_thread.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_time.c o fix ppsratecheck to interpret a maxpps of zero as "ignore everything" 2003-02-26 17:16:38 +00:00
kern_timeout.c Under DIAGNOSTIC, only report expensive timeouts if they are more expensive 2003-02-01 10:06:40 +00:00
kern_umtx.c - Make casuptr return the old value of the location we're trying to update, 2003-04-02 08:02:27 +00:00
kern_uuid.c SMP locking for ifnet list. 2002-12-22 05:35:03 +00:00
kern_xxx.c more caddr_t removal. 2002-06-29 02:00:02 +00:00
ksched.c Move a bunch of flags from the KSE to the thread. 2003-02-17 09:55:10 +00:00
link_elf_obj.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
link_elf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
linker_if.m
Make.tags.inc Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
Makefile Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
makesyscalls.sh - Include umtx.h in files generated by makesyscalls.sh 2003-04-01 01:12:24 +00:00
md4c.c
md5c.c We have memset() and memcpy() in the kernel now, so we don't need to 2002-10-20 22:33:42 +00:00
p1003_1b.c Use copyout to access user memory. 2003-01-07 20:10:04 +00:00
posix4_mib.c Rework the sysconf(3) interaction with aio: 2002-11-17 04:15:34 +00:00
sched_4bsd.c Remove a trailing semicolon in SCHED_QUANTUM definition. 2003-03-24 15:16:21 +00:00
sched_ule.c - Make the interactivity calculator decay faster. 2003-04-02 08:22:33 +00:00
subr_acl_posix1e.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
subr_autoconf.c Remove __P. 2002-03-19 21:25:46 +00:00
subr_blist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_bus.c Lock the process before sending it a SIGIO. Not doing so is a panic(2) 2003-04-02 21:54:51 +00:00
subr_clist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_clock.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_devstat.c - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
subr_disk.c #include <geom/geom_disk.h> 2003-04-01 19:00:38 +00:00
subr_eventhandler.c Rework the eventhandler locking for hopefully the last time. The scheme 2003-03-11 20:17:00 +00:00
subr_hints.c Cosmetic tweaks. Try and keep the style more consistent, catch some stray 2002-05-01 02:51:50 +00:00
subr_kobj.c Convert hit and miss counters to unsigned values. Surely negative values 2002-06-10 22:40:26 +00:00
subr_log.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
subr_mbuf.c PHCC[1]: 2003-03-10 20:24:54 +00:00
subr_mchain.c The "m = m->m_next" that was removed in the revision 1.12 was necessary 2003-02-19 10:12:42 +00:00
subr_module.c
subr_param.c Change hw.physmem and hw.usermem to unsigned long like they used to be 2002-08-30 04:04:37 +00:00
subr_pcpu.c
subr_power.c Use ISO 9X variadic macro format; arguments are not optional, just 2002-07-15 17:17:56 +00:00
subr_prf.c Add a checksum to the kernel message buffer, and update it every 2003-03-28 02:50:10 +00:00
subr_prof.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_rman.c Implement rman_get_device 2003-02-12 07:00:59 +00:00
subr_rtc.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_sbuf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_scanf.c Fix mis-indentation. 2002-10-02 09:09:25 +00:00
subr_smp.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
subr_taskqueue.c Introduce a new taskqueue that runs completely free of Giant, and in 2003-02-26 03:15:42 +00:00
subr_trap.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
subr_turnstile.c Remove unused mtx_lock_giant(), mtx_unlock_giant(), related globals 2003-03-23 11:26:11 +00:00
subr_witness.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
subr_xxx.c - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
sys_generic.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
sys_pipe.c Need to hold the same SMP lock for (knote) list traversal as for 2003-04-02 15:24:50 +00:00
sys_process.c Whitespace cleanup. 2003-03-19 00:33:38 +00:00
sys_socket.c Remove duplicate includes. 2003-02-20 03:26:11 +00:00
syscalls.c - Regen. 2003-04-01 02:34:21 +00:00
syscalls.master - Mark the various thr syscalls as MP safe. Previously there was a bug if 2003-04-01 02:32:07 +00:00
sysv_ipc.c It is possible for an active aio to prevent shared memory from being 2003-01-13 23:04:32 +00:00
sysv_msg.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
sysv_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
sysv_shm.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
tty_compat.c Fixed some style bugs in the removal of __P(()). The main ones were 2002-03-24 05:09:11 +00:00
tty_conf.c
tty_cons.c Don't call make_dev() before we are ready for it. 2003-03-09 20:42:49 +00:00
tty_pty.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
tty_subr.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
tty_tty.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
tty.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
uipc_accf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
uipc_cow.c Pass the vm_page's address to sf_buf_alloc(); map the vm_page as part 2003-03-29 06:14:14 +00:00
uipc_domain.c Fix a spelling error. 2003-03-07 22:47:32 +00:00
uipc_jumbo.c - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
uipc_mbuf2.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
uipc_mbuf.c Add the m_defrag routine, as discussed on committers@. This 2003-03-29 05:48:36 +00:00
uipc_proto.c
uipc_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
uipc_sockbuf.c Missing M_TRYWAIT from so_upcall third argument. 2003-02-21 22:23:40 +00:00
uipc_socket2.c Missing M_TRYWAIT from so_upcall third argument. 2003-02-21 22:23:40 +00:00
uipc_socket.c Clean up whitespace, s/register //, refrain from strong urge to ANSIfy. 2003-03-02 15:56:49 +00:00
uipc_syscalls.c Recent changes to uipc_cow.c have eliminated the need for some sf_buf- 2003-03-31 06:25:42 +00:00
uipc_usrreq.c s/discriptors/descriptors/ 2003-03-23 19:41:34 +00:00
vfs_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
vfs_aio.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
vfs_bio.c Preparation commit before I start on the bioqueue lockdown: 2003-03-30 08:51:23 +00:00
vfs_cache.c Backout the getcwd changes, a more comprehensive effort will be needed. 2003-03-20 10:40:45 +00:00
vfs_cluster.c - We are not guaranteed that read ahead blocks are not in memory already. 2003-03-30 02:57:32 +00:00
vfs_default.c - Remove a race between fsync like functions and flushbufqueues() by 2003-03-13 07:19:23 +00:00
vfs_export.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_extattr.c Move the initialization of the vattr flags field in setfflags() to 2003-03-05 23:15:23 +00:00
vfs_init.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_lookup.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_mount.c Adjust the number of vnodes scanned by vlrureclaim() according to the 2003-03-26 22:15:58 +00:00
vfs_subr.c Adjust the number of vnodes scanned by vlrureclaim() according to the 2003-03-26 22:15:58 +00:00
vfs_syscalls.c Move the initialization of the vattr flags field in setfflags() to 2003-03-05 23:15:23 +00:00
vfs_vnops.c fp->f_offset doesn't need any protection when it isn't accessed. 2003-03-26 19:21:12 +00:00
vnode_if.src Temporarily introduce a new VOP_SPECSTRATEGY operation while I try 2003-01-04 22:10:36 +00:00