freebsd-skq/sys/fs
Kirk McKusick e03486d198 This checkin reimplements the io-request priority hack in a way
that works in the new threaded kernel. It was commented out of
the disksort routine earlier this year for the reasons given in
kern/subr_disklabel.c (which is where this code used to reside
before it moved to kern/subr_disk.c):

----------------------------
revision 1.65
date: 2002/04/22 06:53:20;  author: phk;  state: Exp;  lines: +5 -0
Comment out Kirks io-request priority hack until we can do this in a
civilized way which doesn't cause grief.

The problem is that it is not generally safe to cast a "struct bio
*" to a "struct buf *".  Things like ccd, vinum, ata-raid and GEOM
constructs bio's which are not entrails of a struct buf.

Also, curthread may or may not have anything to do with the I/O request
at hand.

The correct solution can either be to tag struct bio's with a
priority derived from the requesting threads nice and have disksort
act on this field, this wouldn't address the "silly-seek syndrome"
where two equal processes bang the diskheads from one edge to the
other of the disk repeatedly.

Alternatively, and probably better: a sleep should be introduced
either at the time the I/O is requested or at the time it is completed
where we can be sure to sleep in the right thread.

The sleep also needs to be in constant timeunits, 1/hz can be practicaly
any sub-second size, at high HZ the current code practically doesn't
do anything.
----------------------------

As suggested in this comment, it is no longer located in the disk sort
routine, but rather now resides in spec_strategy where the disk operations
are being queued by the thread that is associated with the process that
is really requesting the I/O. At that point, the disk queues are not
visible, so the I/O for positively niced processes is always slowed
down whether or not there is other activity on the disk.

On the issue of scaling HZ, I believe that the current scheme is
better than using a fixed quantum of time. As machines and I/O
subsystems get faster, the resolution on the clock also rises.
So, ten years from now we will be slowing things down for shorter
periods of time, but the proportional effect on the system will
be about the same as it is today. So, I view this as a feature
rather than a drawback. Hence this patch sticks with using HZ.

Sponsored by:	DARPA & NAI Labs.
Reviewed by:	Poul-Henning Kamp <phk@critter.freebsd.dk>
2002-10-22 00:59:49 +00:00
..
cd9660 Fix comments and one resulting code confusion about the type of the 2002-10-16 08:04:11 +00:00
coda Back our kernel support for reliable signal queues. 2002-10-01 17:15:53 +00:00
deadfs Fix comments and one resulting code confusion about the type of the 2002-10-16 08:04:11 +00:00
devfs Missed a case of _POSIX_MAC_PRESENT -> _PC_MAC_PRESENT rename. 2002-10-20 22:50:43 +00:00
fdescfs Remove any VOP_PRINT that redundantly prints the tag. 2002-09-18 20:42:04 +00:00
fifofs Fix comments and one resulting code confusion about the type of the 2002-10-16 08:04:11 +00:00
hpfs Regularize the vop_stdlock'ing protocol across all the filesystems 2002-10-14 03:20:36 +00:00
msdosfs Grrr, s/PBP/BPB/ here as well. 2002-10-21 20:52:51 +00:00
ntfs Regularize the vop_stdlock'ing protocol across all the filesystems 2002-10-14 03:20:36 +00:00
nullfs Be consistent about functions being static. 2002-10-16 08:00:32 +00:00
nwfs Regularize the vop_stdlock'ing protocol across all the filesystems 2002-10-14 03:20:36 +00:00
portalfs Fix a warning on 64 bits platforms: copyinstr() takes 2002-10-06 11:45:22 +00:00
procfs Remove even more '&' from pointers to functions. 2002-10-20 21:30:02 +00:00
pseudofs '&' not used for pointers to functions. 2002-10-20 21:31:16 +00:00
smbfs Regularize the vop_stdlock'ing protocol across all the filesystems 2002-10-14 03:20:36 +00:00
specfs This checkin reimplements the io-request priority hack in a way 2002-10-22 00:59:49 +00:00
udf Regularize the vop_stdlock'ing protocol across all the filesystems 2002-10-14 03:20:36 +00:00
umapfs umap_sync is empty and is identical to vfs_stdsync. Remove it and 2002-10-19 22:22:42 +00:00
unionfs Fix comments and one resulting code confusion about the type of the 2002-10-16 08:04:11 +00:00