Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Oct 2002 17:59:49 -0700 (PDT)
From:      Kirk McKusick <mckusick@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/fs/specfs spec_vnops.c src/sys/kern subr_disk.c src/sys/ufs/ffs ffs_snapshot.c
Message-ID:  <200210220059.g9M0xnWm049023@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
mckusick    2002/10/21 17:59:49 PDT

  Modified files:
    sys/fs/specfs        spec_vnops.c 
    sys/kern             subr_disk.c 
    sys/ufs/ffs          ffs_snapshot.c 
  Log:
  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>
  
  Revision  Changes    Path
  1.183     +24 -1     src/sys/fs/specfs/spec_vnops.c
  1.65      +0 -29     src/sys/kern/subr_disk.c
  1.46      +2 -2      src/sys/ufs/ffs/ffs_snapshot.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210220059.g9M0xnWm049023>