Commit Graph

49 Commits

Author SHA1 Message Date
thorpej
eb20bbc780 Change the semantics of splsoftclock() to be like other spl*() functions,
that is priority is rasied.  Add a new spllowersoftclock() to provide the
atomic drop-to-softclock semantics that the old splsoftclock() provided,
and update calls accordingly.

This fixes a problem with using the "rnd" pseudo-device from within
interrupt context to extract random data (e.g. from within the softnet
interrupt) where doing so would incorrectly unblock interrupts (causing
all sorts of lossage).

XXX 4 platforms do not have priority-raising capability: newsmips, sparc,
XXX sparc64, and VAX.  This platforms still have this bug until their
XXX spl*() functions are fixed.
1999-08-05 18:08:08 +00:00
christos
a32f7169fc Align struct timeval time to the same alignment requirements of a quad.
This broke the sparc elf kernel which in microtime uses ldd to load both
words at the same time. The a.out kernel, just got lucky.
1999-05-04 16:16:54 +00:00
ross
e47e3c9f45 schedclk() -> schedclock(), for consistency with hardclock(), statclock(), ...
update comments for recent scheduler mods
1999-02-28 18:14:57 +00:00
mycroft
d4955ba8a9 While I'm on a fixed point kick, improve the NTP clock factor correction to
give <.1% error in all (supported) cases.  It doesn't cost us much.
1999-02-23 17:41:48 +00:00
ross
b4a33c4e60 Scheduler bug fixes and reorganization
* fix the ancient nice(1) bug, where nice +20 processes incorrectly
  steal 10 - 20% of the CPU, (or even more depending on load average)
* provide a new schedclk() mechanism at a new clock at schedhz, so high
  platform hz values don't cause nice +0 processes to look like they are
  niced
* change the algorithm slightly, and reorganize the code a lot
* fix percent-CPU calculation bugs, and eliminate some no-op code

=== nice bug === Correctly divide the scheduler queues between niced and
compute-bound processes. The current nice weight of two (sort of, see
`algorithm change' below) neatly divides the USRPRI queues in half; this
should have been used to clip p_estcpu, instead of UCHAR_MAX.  Besides
being the wrong amount, clipping an unsigned char to UCHAR_MAX is a no-op,
and it was done after decay_cpu() which can only _reduce_ the value.  It
has to be kept <= NICE_WEIGHT * PRIO_MAX - PPQ or processes can
scheduler-penalize themselves onto the same queue as nice +20 processes.
(Or even a higher one.)

=== New schedclk() mechansism === Some platforms should be cutting down
stathz before hitting the scheduler, since the scheduler algorithm only
works right in the vicinity of 64 Hz. Rather than prescale hz, then scale
back and forth by 4 every time p_estcpu is touched (each occurance an
abstraction violation), use p_estcpu without scaling and require schedhz
to be generated directly at the right frequency. Use a default stathz (well,
actually, profhz) / 4, so nothing changes unless a platform defines schedhz
and a new clock.  Define these for alpha, where hz==1024, and nice was
totally broke.

=== Algorithm change === The nice value used to be added to the
exponentially-decayed scheduler history value p_estcpu, in _addition_ to
be incorporated directly (with greater wieght) into the priority calculation.
At first glance, it appears to be a pointless increase of 1/8 the nice
effect (pri = p_estcpu/4 + nice*2), but it's actually at least 3x that
because it will ramp up linearly but be decayed only exponentially, thus
converging to an additional .75 nice for a loadaverage of one. I killed
this, it makes the behavior hard to control, almost impossible to analyze,
and the effect (~~nothing at for the first second, then somewhat increased
niceness after three seconds or more, depending on load average) pointless.

=== Other bugs === hz -> profhz in the p_pctcpu = f(p_cpticks) calcuation.
Collect scheduler functionality. Try to put each abstraction in just one
place.
1999-02-23 02:56:03 +00:00
jonathan
6c0abe64fc defopt NTP and PPS_SYNC, in preparation for adding PPS support. 1998-04-22 07:08:11 +00:00
ross
7516424fe6 Teach the NTP PLL how to lock when hz == 1000. 1998-01-31 10:42:11 +00:00
gwr
55f621803a Moved db_show_callout() to ddb/db_xxx.c 1997-05-21 19:55:45 +00:00
tls
02697a5d47 add case for 512Hz in NTP code 1997-05-05 19:25:26 +00:00
mycroft
85b2440284 Use splclock() to block time updates, not splhigh(). 1997-02-28 04:45:35 +00:00
cgd
008f5aedf9 apply patch from PR 2788 (from Dennis Ferguson <dennis@jnx.com>) to
more smoothly apply "tickfix"es microsecond deltas (when compensating
for clocks running at > 1000Hz).
1997-01-15 04:59:39 +00:00
cgd
99fb250b5c fix from PR 2787 (from Dennis Ferguson <dennis@jnx.com>): when adjtime
is running (and NTP is not enabled), the adjtime()-handling code clobbers
any tickfix that may be necessary for systems with clocks with frequency
greater than 1000Hz.
1997-01-15 04:27:35 +00:00
cgd
30ca7eaa8d clean up a few spaces vs. tabs bogons 1996-11-15 23:51:23 +00:00
abrown
062b2cdd6b Fix unused variable warning for an "int i" left over from the old disk
statistics code.
1996-07-24 16:13:04 +00:00
thorpej
0462d3063c Remove old-style disk instrumentation code. 1996-07-12 22:00:42 +00:00
briggs
0a55dbede5 Do not declare tickfixcnt ifdef NTP. 1996-06-09 04:51:03 +00:00
christos
4ef330b934 remove include of <sys/cpu.h> 1996-04-22 01:38:12 +00:00
christos
0babd67cbc Fix db_printf formats. 1996-03-30 22:23:18 +00:00
mycroft
6b1f642521 Calculate the equivalent of `SHIFT_HZ' at run time, in initclocks(). 1996-03-15 07:56:00 +00:00
mycroft
79bb0bd2c7 Move an assignment inside #ifdef NTP. 1996-03-08 06:27:30 +00:00
christos
4a43afe50f - Make things compile cleanly after the NTP additions.
- Remove unused variables in exec_ecoff.c
1996-03-07 14:31:16 +00:00
jonathan
1f6d8c1c1f Fix for PR kern/2140: a typo in the nested CPP if/else/endif caused
SHIFT_HZ to be undefined for values of HZ other than 64.
1996-02-29 02:48:53 +00:00
jonathan
e7ef034c05 Add NTP kernel precision timekeeping from Dave Mill's xntp distribution
and the "kernel.tar.Z" distribution on louie.udel.edu, which is older than
xntp 3.4y or 3.5a, but contains newer kernel source fragments.

This commit adds support for a new kernel configuration option, NTP.
If NTP is selected, then the system clock should be run at "HZ", which
must be defined at compile time to be one value from:
  60, 64, 100, 128, 256, 512, 1024.

Powers of 2 are ideal; 60 and 100 are supported but are marginally less
accurate.

If NTP is not configured, there should be no change in behavior relative
to pre-NTP kernels.

These changes have been tested extensively with xntpd 3.4y on a decstation;
almost identical kernel mods work on an i386.  No pulse-per-second (PPS)
line discipline support is included, due to unavailability of hardware
to test it.

With this in-kernel PLL support for NetBSD, both xntp 3.4y and xntp
3.5a user-level code need minor changes. xntp's prototype for
syscall() is  correct for FreeBSD, but not for NetBSD.
1996-02-27 04:20:30 +00:00
christos
09afd77655 More proto fixes 1996-02-09 18:59:18 +00:00
christos
8a5b1b92e2 First pass at prototyping 1996-02-04 02:15:01 +00:00
cgd
6ffadcadf6 fix off-by-one error in tickfix code. (should increment when count >=
interval, because count goes from 0->(interval-1) to count interval
ticks.)
1996-01-17 04:37:31 +00:00
thorpej
17eb6e2bc1 Move the old-style disk instrumentation "structures" to a central location
(sys/kern/subr_disk.c) and note that they should/will be deperecated.
1995-12-28 19:16:31 +00:00
cgd
41356f64e3 add support for clocks with hz > 1000, and for cases where 1000000 / hz != int 1995-03-03 01:24:03 +00:00
mycroft
9085601009 Clean up #includes. 1994-10-09 08:29:55 +00:00
mycroft
3b83040b88 Add tickadj to clockinfo. 1994-09-18 21:55:43 +00:00
cgd
cf92afd66e New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD' 1994-06-29 06:29:24 +00:00
cgd
5a6e2953a0 clock info gathering 1994-05-07 00:42:11 +00:00
cgd
a0a7429482 lots of changes: prototype migration, move lots of variables, definitions,
and structure elements around.  kill some unnecessary type and macro
definitions.  standardize clock handling.  More changes than you'd want.
1994-05-05 05:35:42 +00:00
cgd
e0db92993a change timeout/untimeout/wakeup/sleep/tsleep args to void * 1994-04-29 23:15:51 +00:00
pk
6ce04ec890 Routine to display callout table from DDB. 1994-04-27 10:47:51 +00:00
cgd
9ea6d6571f kill support for 'dcfclk' ; shouldn't pollute tree for things not in NetBSD. 1994-02-07 07:33:49 +00:00
deraadt
c1d3660b28 pass around a clockframe *' instead of a clockframe' 1994-02-01 01:50:38 +00:00
mycroft
497cad8b12 Remove the evil #ifndef; we no longer need it. 1994-01-11 23:19:00 +00:00
mycroft
21edb9924e Canonicalize all #includes. 1993-12-18 03:59:02 +00:00
cgd
b73e5e6647 kill the process 'space' accounting collection for the following reasons:
(1) text calculation incorrect (would 'overbill')
	(2) data calculation incorrect (would 'overbill')
	(3) the maxrss calculation uses stuff which isn't present
		on the sparc.
if 3/4 tests are questionable and/or broken, well...
1993-10-29 19:49:25 +00:00
cgd
ddd610e422 from Mark Tinguely, with mods by davidg and then fially fixed by cgd.
do the space-used integration, over time, for processes.
1993-10-19 23:37:50 +00:00
deraadt
6fce70ed63 blast it, i forgot two ('s 1993-08-30 06:25:10 +00:00
deraadt
bab3a9ce58 added two __P() macros 1993-08-29 13:16:04 +00:00
andrew
f74843ee98 * ansifications
* cleaned up hardclock() to avoid checking "p" multiple times, and avoid a
  gcc2 possible-use-before-initialisation warning.
* changed softclock() timeout callback functions to be of type timeout_t -
  a pointer to a void fn(int).  No-one was using the second, tick, argument
  that was being passed to these callbacks - it is much cleaner to drop the
  thing entirely, rather than add a whole heap of casts of dubious
  correctness to calls to timeout(), etc.  The old style is kept in an
  #ifdef, for future reference.
1993-06-27 06:05:32 +00:00
cgd
9751bf77a7 include the (stupid and ugly) patch for the i386 interrupt stuff.
it seems to help stability, when included.
1993-06-15 01:28:29 +00:00
cgd
c26bdfdb86 kill processes outright if they've exceeded their hard CPU limit. 1993-06-02 23:03:45 +00:00
cgd
230dcf0d05 add $Id$ strings, and clean up file headers where necessary 1993-05-20 02:54:09 +00:00
cgd
e9be58fa40 add dcfclock support from patchkit patch 113 1993-05-07 07:15:19 +00:00
cgd
61f282557f initial import of 386bsd-0.1 sources 1993-03-21 09:45:37 +00:00