From c38957d22b79e58dcfc2f1111afcbbc0019cfe89 Mon Sep 17 00:00:00 2001 From: dyson Date: Sat, 9 Aug 1997 10:13:32 +0000 Subject: Modify the scheduling policy to take into account disk I/O waits as chargeable CPU usage. This should mitigate the problem of processes doing disk I/O hogging the CPU. Various users have reported the problem, and test code shows that the problem should now be gone. --- sys/kern/kern_physio.c | 6 +++++- sys/kern/subr_trap.c | 15 ++++++++++++++- sys/kern/vfs_bio.c | 6 +++++- 3 files changed, 24 insertions(+), 3 deletions(-) (limited to 'sys/kern') diff --git a/sys/kern/kern_physio.c b/sys/kern/kern_physio.c index 42d1d21..bfa7c01 100644 --- a/sys/kern/kern_physio.c +++ b/sys/kern/kern_physio.c @@ -16,7 +16,7 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id$ + * $Id: kern_physio.c,v 1.19 1997/02/22 09:39:08 peter Exp $ */ #include @@ -112,7 +112,11 @@ physio(strategy, bp, dev, rw, minp, uio) spl = splbio(); while ((bp->b_flags & B_DONE) == 0) +#if defined(NO_SCHEDULE_MODS) tsleep((caddr_t)bp, PRIBIO, "physstr", 0); +#else + tsleep((caddr_t)bp, curproc->p_usrpri, "physstr", 0); +#endif splx(spl); /* release mapping into kernel space */ diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index 7110933..516925f 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.101 1997/07/20 08:37:23 bde Exp $ + * $Id: trap.c,v 1.102 1997/08/09 00:02:52 dyson Exp $ */ /* @@ -144,6 +144,19 @@ userret(p, frame, oticks) while ((sig = CURSIG(p)) != 0) postsig(sig); + +#if !defined(NO_SCHEDULE_MODS) + if (!want_resched && + (p->p_priority <= p->p_usrpri) && + (p->p_rtprio.type == RTP_PRIO_NORMAL)) { + int newpriority; + p->p_estcpu += 1; + newpriority = PUSER + p->p_estcpu / 4 + 2 * p->p_nice; + newpriority = min(newpriority, MAXPRI); + p->p_usrpri = newpriority; + } +#endif + p->p_priority = p->p_usrpri; if (want_resched) { /* diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index f2477e5..1239dfb9 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -18,7 +18,7 @@ * 5. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: vfs_bio.c,v 1.120 1997/06/13 08:30:40 bde Exp $ + * $Id: vfs_bio.c,v 1.121 1997/06/15 17:56:49 dyson Exp $ */ /* @@ -1717,7 +1717,11 @@ biowait(register struct buf * bp) s = splbio(); while ((bp->b_flags & B_DONE) == 0) +#if defined(NO_SCHEDULE_MODS) tsleep(bp, PRIBIO, "biowait", 0); +#else + tsleep(bp, curproc->p_usrpri, "biowait", 0); +#endif splx(s); if (bp->b_flags & B_EINTR) { bp->b_flags &= ~B_EINTR; -- cgit v1.1