cvs commit: src/sys/kern vfs_bio.c
Jeff Roberson
jeff at FreeBSD.org
Wed Jun 8 20:26:06 GMT 2005
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
More information about the cvs-src
mailing list