Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Jun 2005 20:26:06 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern vfs_bio.c
Message-ID:  <200506082026.j58KQ6cT052316@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jeff        2005-06-08 20:26:06 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             vfs_bio.c 
  Log:
   - Under heavy IO load the buf daemon can run for many hundereds of
     milliseconds due to what is essentially n^2 algorithmic complexity.  This
     change makes the algorithm N*2 instead.  This heavy processing manifested
     itself as skipping in audio and video playback due to the long scheduling
     latencies and contention on giant by pcm.
   - flushbufqueues() is now responsible for flushing multiple buffers
     rather than one at a time.  This allows us to save our progress in the
     list by using a sentinal.  We must do the numdirtywakeup() and
     waitrunningbufspace() here now rather than in buf_daemon().
   - Also add a uio_yield() after we have processed the list once for bufs
     without deps and again for bufs with deps.  This is to release Giant
     and allow any other giant locked code to proceed.
  
  Tested by:      Many users on current@
  Revealed by:    schedgraph traces sent by Emil Mikulic & Anthony Ginepro
  
  Revision  Changes    Path
  1.487     +28 -6     src/sys/kern/vfs_bio.c



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