So the problem state arises when the round trip time converges on some
value which is too small? And in this state, "soft" returns EIO
within some ridiculously small timeout?
It is definitely too small because I see that the bulk of readdir
requests are fine for the first few thousand, but nearly all of them
have one or more duplicates after that. There is no justification for
those duplicates - all the original requests are getting replies.
It's possible that the server is taking longer to respond to
READDIRPLUS than to GETATTR. That makes sense, because the
READDIRPLUS reads inodes from disk, then GETATTR just reads them from
memory. Let's take a look...
Yup! In the traces, GETATTR responds consistently in 0.0002 seconds
(close to ping time, clearly no disk access), whereas READDIRPLUS
takes some 0.2 seconds to respond.
I see that the RTT estimation _is_ adapting quickly to this: the first
READDIRPLUS in a sequence has several duplicates; subsequent ones don't.
Suggestion:
- With RTT estimation, "not responding" should require a certain
amount of absolute time to pass, e.g. 5 seconds, not just a fixed
number of packets. Without this, "soft" is broken because the
time difference between a response for cached data and a response
from the disk is a factor of several hundred.
Note that I'm looking as "ls -R" now because it's easy to repeat, but
the EIO problem occurs with file reading and writing too.
-- Jamie
p.s Another quirk is I see the server sending more than one duplicate
reply to each duplicate READDIRPLUS request... Well, that's a
separate problem I think :)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/