freebsd-dev/sys/kern
Brian Feldman 226f14bc83 Change the scheduler to actually respect the PUSER barrier. It's been
wrong for many years that negative niceness would lower the priority
of a process below PUSER, and once below PUSER, there were conditionals
in the code that are required to test for whether a process was in
the kernel which would break.

The breakage could (and did) cause lock-ups, basically nothing else
but the least nice program being able to run in some conditions.  The
algorithm which adjusts the priority now subtracts PRIO_MIN to do
things properly, and the ESTCPULIM() algorithm was updated to use
PRIO_TOTAL (PRIO_MAX - PRIO_MIN) to calculate the estcpu.

NICE_WEIGHT is now 1 to accomodate the full range of priorities better
(a -20 process with full CPU time has the priority of a +0 process with
no CPU time).  There are now 20 queues (exactly; 80 priorities) for
use in user processes' scheduling, and PUSER has been lowered to 48
to accomplish this.

This means, to the user, that things will be scheduled more correctly
(noticeable), there is no lock-up anymore WRT a niced -20 process
never releasing the CPU time for other processes.  In this fair system,
tsleep()ed < PUSER processes now will get the proper higher priority
than priority >= PUSER user processes.

The detective work of this was done by me, along with part of the
solution.  Luoqi Chen has provided most of the solution, and really
helped me understand what was happening better, to boot :)

Submitted by:   luoqi
Concept reviewed by:    bde
2000-04-30 18:33:43 +00:00
..
bus_if.m * Factor out the object system from new-bus so that it can be used by 2000-04-08 14:17:18 +00:00
device_if.m * Factor out the object system from new-bus so that it can be used by 2000-04-08 14:17:18 +00:00
imgact_aout.c Remove ~25 unneeded #include <sys/conf.h> 2000-04-19 14:58:28 +00:00
imgact_elf.c Change our ELF binary branding to something more acceptable to the Binutils 2000-04-18 02:39:26 +00:00
imgact_gzip.c useracc() the prequel: 1999-10-29 18:09:36 +00:00
imgact_shell.c Fix #! script exec under linux emulation. If a script is exec'd from a 2000-04-26 20:58:40 +00:00
inflate.c Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 05:07:58 +00:00
init_main.c Add new oid, debug.boothowto. This allows userland apps to see 2000-02-25 11:43:08 +00:00
init_sysent.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
kern_acct.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_acl.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
kern_clock.c Remove ~25 unneeded #include <sys/conf.h> 2000-04-19 14:58:28 +00:00
kern_conf.c Reword warning to make it clearer (I read it as "remove block devices created 2000-03-25 21:10:20 +00:00
kern_descrip.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
kern_environment.c Change the prototype of the strto* routines to make the second 1999-11-24 01:03:08 +00:00
kern_event.c Add files that I forgot to `cvs add' on last commit. 2000-04-16 19:02:08 +00:00
kern_exec.c Fix #! script exec under linux emulation. If a script is exec'd from a 2000-04-26 20:58:40 +00:00
kern_exit.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
kern_fork.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
kern_intr.c Trim unused options (or #ifdef for undoc options). 1999-10-11 15:19:12 +00:00
kern_jail.c Yet-another-update: rename ``kern.prison'' to a new sysctl root entry, 2000-02-12 13:41:56 +00:00
kern_kthread.c Panic if proc0 hasn't been created and we try to call kthread_create. 2000-01-10 08:00:58 +00:00
kern_ktrace.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_linker.c First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
kern_lock.c Eliminate the undocumented, experimental, non-delivering and highly 2000-03-16 08:51:55 +00:00
kern_lockf.c Commit the remaining part of PR14914: 1999-11-16 16:28:58 +00:00
kern_malloc.c Print "previous type" correctly when INVARIANTS is defined. 2000-03-14 14:58:04 +00:00
kern_mib.c Draw the outline of "struct bio". 2000-04-02 09:26:51 +00:00
kern_module.c First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
kern_ntptime.c Isolate the Timecounter internals in their own two files. 2000-03-20 14:09:06 +00:00
kern_physio.c Move B_ERROR flag to b_ioflags and call it BIO_ERROR. 2000-04-02 15:24:56 +00:00
kern_proc.c Also allow non-rot processes to setproctitle() 2000-02-08 19:54:15 +00:00
kern_prot.c Make the sigprocmask() and geteuid() system calls MP SAFE. Expand 2000-04-02 17:52:43 +00:00
kern_random.c Hookup /dev/[u]random on the Alpha. 2000-04-28 17:18:48 +00:00
kern_resource.c Don't try to account for the partial quantum unless the process is 2000-02-15 09:02:07 +00:00
kern_shutdown.c The SMP cleanup commit broke UP compiles. Make UP compiles work again. 2000-03-28 18:06:49 +00:00
kern_sig.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
kern_subr.c useracc() the prequel: 1999-10-29 18:09:36 +00:00
kern_switch.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
kern_synch.c Change the scheduler to actually respect the PUSER barrier. It's been 2000-04-30 18:33:43 +00:00
kern_syscalls.c Trim unused options (or #ifdef for undoc options). 1999-10-11 15:19:12 +00:00
kern_sysctl.c Remove unneeded <sys/buf.h> includes. 2000-04-18 15:15:39 +00:00
kern_tc.c Isolate the Timecounter internals in their own two files. 2000-03-20 14:09:06 +00:00
kern_threads.c
kern_time.c Remove unneeded <sys/buf.h> includes. 2000-04-18 15:15:39 +00:00
kern_timeout.c
kern_xxx.c
ksched.c Remove unneeded #include <sys/kernel.h> 2000-04-29 15:36:14 +00:00
link_aout.c First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
link_elf_obj.c First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
link_elf.c First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
linker_if.m First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
Make.tags.inc Add soft updates to the set of things being tagged. Syntax cleanup. 2000-01-27 01:22:06 +00:00
makedevops.pl Fix some bugs in user-end output and add a reference to the original 1999-11-22 14:40:04 +00:00
Makefile ${MACHINE} -> ${MACHINE_ARCH} 1999-11-14 13:54:44 +00:00
makeobjops.pl * Factor out the object system from new-bus so that it can be used by 2000-04-08 14:17:18 +00:00
makesyscalls.sh Make makesyscalls.sh parse an optional field 'MPSAFE' that specifies 2000-04-03 06:36:14 +00:00
md5c.c Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 05:07:58 +00:00
p1003_1b.c
posix4_mib.c Add $FreeBSD$. 2000-04-22 15:13:06 +00:00
subr_acl_posix1e.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
subr_autoconf.c
subr_blist.c Eliminate the undocumented, experimental, non-delivering and highly 2000-03-16 08:51:55 +00:00
subr_bus.c The newer module dependency code exposes an apparent bug in the 2000-04-29 13:24:35 +00:00
subr_clist.c
subr_devstat.c Clone bio versions of certain bits of infrastructure: 2000-04-02 19:08:05 +00:00
subr_disk.c Clone the {b|bio}_offset field, and make sure it is always initialized 2000-04-25 10:51:18 +00:00
subr_disklabel.c s/biowait/bufwait/g 2000-04-29 16:25:22 +00:00
subr_diskmbr.c s/biowait/bufwait/g 2000-04-29 16:25:22 +00:00
subr_diskslice.c Remove unused variable. 2000-04-26 00:20:01 +00:00
subr_eventhandler.c Commit the remaining part of PR14914: 1999-11-16 16:28:58 +00:00
subr_kobj.c * Factor out the object system from new-bus so that it can be used by 2000-04-08 14:17:18 +00:00
subr_log.c
subr_module.c Trim unused options (or #ifdef for undoc options). 1999-10-11 15:19:12 +00:00
subr_param.c Make sysv-style shared memory tuneable params fully runtime adjustable 2000-03-30 07:17:05 +00:00
subr_prf.c Do not fault if curproc is null. 2000-04-29 11:32:15 +00:00
subr_prof.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
subr_rman.c Commit the remaining part of PR14914: 1999-11-16 16:28:58 +00:00
subr_scanf.c Change the prototype of the strto* routines to make the second 1999-11-24 01:03:08 +00:00
subr_smp.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
subr_trap.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
subr_xxx.c
sys_generic.c Fix select(2) for the Alpha. (!!) It was never returning true for 2000-02-20 13:36:26 +00:00
sys_pipe.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
sys_process.c Introduce the new function 1999-11-21 19:03:20 +00:00
sys_socket.c Update socket file type for fo_stat(). soo_stat() becomes a fileops 1999-11-08 03:31:01 +00:00
syscalls.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
syscalls.master Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
sysv_ipc.c In 'ipcperm()', only call 'suser()' if it is actually required. 2000-03-13 23:00:08 +00:00
sysv_msg.c
sysv_sem.c Remove #ifdef for sem_wakeup() - we just use wakeup(). 2000-03-30 11:35:25 +00:00
sysv_shm.c Make sysv-style shared memory tuneable params fully runtime adjustable 2000-03-30 07:17:05 +00:00
tty_compat.c
tty_conf.c Don't refer to TABLDISC in the comments here. 2000-01-30 10:14:13 +00:00
tty_cons.c Don't follow null pointers if we somehow have a null devswitch entry 2000-01-25 09:20:08 +00:00
tty_pty.c Correct an oversight in jail() that allowed processes in jail to access 2000-02-09 03:32:11 +00:00
tty_snoop.c Unstaticize this driver. You can have as many snoop devices as you can 2000-04-02 00:35:37 +00:00
tty_subr.c
tty_tty.c
tty.c Add sysctl variable to set initial drainwait timeout on ttyopen, default to 2000-04-30 16:00:53 +00:00
uipc_domain.c
uipc_mbuf.c Actively limit the allocation of mbufs to NMBUFS/nmbufs and mbuf clusters 1999-12-28 06:35:57 +00:00
uipc_proto.c Trim unused options (or #ifdef for undoc options). 1999-10-11 15:19:12 +00:00
uipc_sockbuf.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
uipc_socket2.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
uipc_socket.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
uipc_syscalls.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
uipc_usrreq.c Enable SCM_RIGHTS on alpha. Allocate necessary buffer as conversion between 2000-03-09 15:15:27 +00:00
vfs_acl.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
vfs_aio.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
vfs_bio.c Hmm, diff/patch still doesn't like me. 2000-04-30 06:16:03 +00:00
vfs_cache.c Move procfs_fullpath() to vfs_cache.c, with a rename to textvp_fullpath(). 2000-04-26 11:57:45 +00:00
vfs_cluster.c s/biowait/bufwait/g 2000-04-29 16:25:22 +00:00
vfs_conf.c Split the logic of 2000-03-20 16:28:35 +00:00
vfs_default.c Complete the bio/buf divorce for all code below devfs::strategy 2000-04-15 05:54:02 +00:00
vfs_export.c Rename the existing BUF_STRATEGY() to DEV_STRATEGY() 2000-03-20 11:29:10 +00:00
vfs_extattr.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
vfs_init.c The sysctl mod_xx hack is no longer required now that we have totally 1999-12-12 16:30:34 +00:00
vfs_lookup.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
vfs_mount.c Split the logic of 2000-03-20 16:28:35 +00:00
vfs_subr.c Rename the existing BUF_STRATEGY() to DEV_STRATEGY() 2000-03-20 11:29:10 +00:00
vfs_syscalls.c Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
vfs_vnops.c Introduce kqueue() and kevent(), a kernel event notification facility. 2000-04-16 18:53:38 +00:00
vnode_if.pl Use a seperate -c and -h mode. The vnode_if.c file is compiled only into 1999-12-12 16:43:05 +00:00
vnode_if.src Second pass commit to introduce new ACL and Extended Attribute system 1999-12-19 06:08:07 +00:00