[OpenAFS-devel] Solaris 10 predicament update
Jeffrey Hutzelman
jhutz@cmu.edu
Mon, 10 Sep 2007 18:06:43 -0400
On Saturday, September 08, 2007 07:46:54 PM -0400 Dale Ghent
<daleg@umbc.edu> wrote:
> 2) Option 2 would be to use the above mentioned ioctl-based method, but
> to remove it entirely from the critical code path. We could, at
> AFSinit() time, create a worker thread which would periodically update a
> global struct of interface telemetry. The worker thread would wake up
> every, say, 30 seconds (tunable), lock the struct via mutex, update it,
> unlock, and return to sleep. The RX and ServerPredfs code can read their
> desired values from this struct when they need it, spinning if need be.
This doesn't seem unreasonable.
> 4) We toss caution to the wind and let modern routers deal with UDP
> frags the way they should be and dispense with the UDP packet size
> adjustments based on MTU, or at least nail them to 1500. If you're still
> using AFS over a PPP connection... well... sorry 'bout that. We also let
> the kernel routing table do its job and dispense with selecting
> interfaces. I don't think even the NFS code jumps through these kinds of
> hoops. Is there a reason we should be? I admit I'm not too familiar with
> the inner details and history of things here, so feel free to gently
> clue me in.
This is a horrible idea. Fragmentation of a large IP datagram increases
both the likelyhood that it will be lost and the amount of data that must
be retransmitted if it is, as opposed to use of a PMTU-sized datagram.
This means that if the network is congested, packet loss will lead to more
retransmits and more packet loss, making the problem worse. It is
essential that any protocol carrying a signficant amount of traffic
discover and follow the path MTU. Discovering the local interface MTU is a
critical part of this process, since sending a larger-than-MTU packet will
result in local fragmentation, which has all the problems I just described
and prevents discovery of the true path MTU.
>
> 5) Continue to use the ILL method and release OpenAFS 1.4.5 with the
> code being compatible with s10u4. We simply tell people that if you want
> to run OpenAFS client version 1.4.5 or greater, you also need to run
> Solaris KU 120012-14 (x86) or whatever the analog is if you're running
> SPARC.
No. A flag day which forces people to upgrade AFS and Solaris at the same
time is unacceptable. It must be possible to upgrade one or the other
first. If at all possible, it should be possible to have a single kernel
module which either determines at runtime which technique to use or always
uses a technique that works on both old and new Solaris. Lacking that, the
next best thing is to build two modules and have the startup scripts decide
which to load, or perhaps which to install.
Incidentally, having two platforms (sun4x_510 and sun4x_510u4) is nearly as
bad as requiring AFS and Solaris to be updated at the same time. Many
people will not understand that these differ only in a single file, or why.
> 6) Any other idears?
Find the interfaces we need, and get someone within Sun to help us either
get a contract on them or get them reclassified.
-- Jeff