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.
This commit is contained in:
John Dyson 1997-08-09 10:13:32 +00:00
parent ae4efed268
commit c0ecffb96b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=28013
5 changed files with 52 additions and 5 deletions

View File

@ -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) {
/*

View File

@ -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) {
/*

View File

@ -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 <sys/param.h>
@ -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 */

View File

@ -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) {
/*

View File

@ -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;