>>>>> "andrey" == Andrey Borzenkov <[EMAIL PROTECTED]> writes:

andrey> Danny, one more for your collection :) Should be the really last
andrey> problem known to me.

andrey> It fixes ridiculously slow read from IDE devices in some cases. The
andrey> reason was as usual very simple and is not supermount bug.

andrey> File read-ahead code never explicitly unplugs device queue after
andrey> submitting requests. Supermount checks for media change on every
andrey> operation (except read/write) and query_disk_change blocked until
andrey> queue was unplugged, i.e. tq_disk was run. This happened either
andrey> on next non-readahead IO request (not neccessarily for the same device,
andrey> it explains why supermount appeared to work normally during high
andrey> disk IO activity) or during next kupdated run that by default happens
andrey> every 5 seconds. This gives you those 4-5 second delays for every file.

andrey> The worst case was read-ahead of many files immediately followed by
andrey> close. In this case every close blocked for several seconds. And
andrey> this is exactly what happens when you run rpm - it scans all package
andrey> headers and waits several seconds between each file :)

andrey> The fix is to ensure that device IO is enabled before we are going
andrey> to sleep waiting for request. It should not break anything as far as
andrey> I can tell, SCSI layer does the same (so SCSI devices should not suffer
andrey> from this problem at all). Arguably this should happen in file read-ahead
andrey> code and comments there even suggest that it was intended but I do
andrey> not feel myself confident enough to touch the very heart of IO subsystem.

andrey> cheers

andrey> -andrey

integrated.


-- 
In theory, practice and theory are the same, but in practice they 
are different -- Larry McVoy

Reply via email to