[OpenAFS-devel] .35 sec rx delay bug?

Jeffrey Altman jaltman@secure-endpoints.com
Wed, 07 Nov 2007 21:26:13 -0600


This is a cryptographically signed message in MIME format.

--------------ms010004020501020808000505
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Chas:

Was this code ever tested?

Does it solve the problem it was intended to solve?

Or was something else committed in its place?

Thanks.

Jeffrey Altman


chas williams - CONTRACTOR wrote:
> In message <Pine.GSO.4.61-042.0611081225140.26418@johnstown.andrew.cmu.edu>,Derrick J Brashear writes:
>> On Wed, 8 Nov 2006, Jim Rees wrote:
>>> Yes, but that's what the code Chas quoted apparently tries to do.  Why isn't
>>> it working?
>> i have no idea.
> 
> the fix for this will need at least two changes.  in src/rx/rx.c, handling
> of ack packets should check the peer->natMTU (what i would gather to
> the interface mtu of the remote side) and peer->ifMTU (mtu of the
> interface on local side).  so if the remote mtu is less than the local
> mtu, we should only send jumbograms to the limit of the remote mtu.
> note that this patch removes a spurious MIN(,tSize) and probably abuses
> the original intent of rxi_AdjustDgramPackets().
> 
> Index: rx.c
> ===================================================================
> --- rx.c	(revision 62)
> +++ rx.c	(working copy)
> @@ -3770,9 +3770,9 @@
>  			  sizeof(afs_int32), &tSize);
>  	    maxDgramPackets = (afs_uint32) ntohl(tSize);
>  	    maxDgramPackets = MIN(maxDgramPackets, rxi_nDgramPackets);
> -	    maxDgramPackets =
> -		MIN(maxDgramPackets, (int)(peer->ifDgramPackets));
> -	    maxDgramPackets = MIN(maxDgramPackets, tSize);
> +	    maxDgramPackets = MIN(maxDgramPackets, peer->ifDgramPackets);
> +	    if (peer->natMTU < peer->ifMTU)
> +	        maxDgramPackets = MIN(maxDgramPackets, rxi_AdjustDgramPackets(1, peer->natMTU));
>  	    if (maxDgramPackets > 1) {
>  		peer->maxDgramPackets = maxDgramPackets;
>  		call->MTU = RX_JUMBOBUFFERSIZE + RX_HEADER_SIZE;
> 
> however, this doesnt completely fix the problem.  peer->ifMTU is assumed
> to be the mtu of the interface on the same subnet or RX_REMOTE_PACKET_SIZE
> (packets sized for mtu = 1500).  if your host has a single 9000 interface
> and is sending to a non-local subnet, the guess for the ifMTU is wrong.
> for a host with a single interface, this fix is simple.  for hosts with
> multiple interfaces with multiple mtus, i am not sure what the right
> answer might be.  i suppose if you cant guess the right interface you
> should assume the worst case thatthe datagram will exit on the interface
> with the largest mtu.  but suppose you had two non-local multi-homed hosts
> each with a 9000 and 1500 mtu interface.  both would appear to have 9000
> mtus but you could still get the original problem if your packets exited
> the 9000 mtu interface but arrived on the 1500 mtu interface on the remote
> side.  perhaps one should never send jumbograms between non-local hosts?
> anyway, here is a sample fix for the userspace side of rx.
> 
> Index: rx_user.c
> ===================================================================
> --- rx_user.c	(revision 62)
> +++ rx_user.c	(working copy)
> @@ -613,11 +613,9 @@
>  rxi_InitPeerParams(struct rx_peer *pp)
>  {
>      afs_uint32 ppaddr;
> -    u_short rxmtu;
> +    u_short rxmtu = 0, maxmtu = 0;
>      int ix;
>  
> -
> -
>      LOCK_IF_INIT;
>      if (!Inited) {
>  	UNLOCK_IF_INIT;
> @@ -644,6 +642,8 @@
>  
>      LOCK_IF;
>      for (ix = 0; ix < rxi_numNetAddrs; ++ix) {
> +        if (maxmtu < myNetMTUs[ix])
> +		maxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE;
>  	if ((rxi_NetAddrs[ix] & myNetMasks[ix]) == (ppaddr & myNetMasks[ix])) {
>  #ifdef IFF_POINTOPOINT
>  	    if (myNetFlags[ix] & IFF_POINTOPOINT)
> @@ -652,14 +652,14 @@
>  	    rxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE;
>  	    if (rxmtu < RX_MIN_PACKET_SIZE)
>  		rxmtu = RX_MIN_PACKET_SIZE;
> -	    if (pp->ifMTU < rxmtu)
> -		pp->ifMTU = MIN(rx_MyMaxSendSize, rxmtu);
>  	}
>      }
>      UNLOCK_IF;
> +    if (rxmtu)
> +	pp->ifMTU = MIN(rx_MyMaxSendSize, rxmtu);
>      if (!pp->ifMTU) {		/* not local */
>  	pp->timeout.sec = 3;
> -	pp->ifMTU = MIN(rx_MyMaxSendSize, RX_REMOTE_PACKET_SIZE);
> +	pp->ifMTU = MIN(rx_MyMaxSendSize, maxmtu ? maxmtu : RX_REMOTE_PACKET_SIZE);
>      }
>  #else /* ADAPT_MTU */
>      pp->rateFlag = 2;		/* start timing after two full packets */
> _______________________________________________
> OpenAFS-devel mailing list
> OpenAFS-devel@openafs.org
> https://lists.openafs.org/mailman/listinfo/openafs-devel

--------------ms010004020501020808000505
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJeTCC
AxcwggKAoAMCAQICEALr5BE3U6n+HWCoLbyhohMwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UE
BhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMT
I1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA3MDUzMTA2MTM1N1oX
DTA4MDUzMDA2MTM1N1owczEPMA0GA1UEBBMGQWx0bWFuMRUwEwYDVQQqEwxKZWZmcmV5IEVy
aWMxHDAaBgNVBAMTE0plZmZyZXkgRXJpYyBBbHRtYW4xKzApBgkqhkiG9w0BCQEWHGphbHRt
YW5Ac2VjdXJlLWVuZHBvaW50cy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCsoz/0+s4Cn65n/3bU3shXw4y5u1uEMEsBOiqNU0PfIKGYQe95b1FKNbNAkctSdQT6GF5c
bhSnJPmb2OOb1frx64dlDgskaG561xa8XPA1aP8Cc+33dgsSLIxGEh97lyUYHEfWBC03KMCF
PKhZfcrGAXoVCrFBadnLAokQbUTFahVg/qQx2IT3wSj1sCIfV5UDuXcEKHCvRtEZIsSzu184
9Cj6I4nY5bt+r94kyDHM94MHYBJi+6tWLFRy2gkIB3HEPmxAiQrKljNpH9bOffiBLIAgmJ6d
1ZXepBXyexQbwOYvftpVlMEFHHQmdiwH3tj69hE78XvM5X9J+SbjbuNpAgMBAAGjOTA3MCcG
A1UdEQQgMB6BHGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20wDAYDVR0TAQH/BAIwADAN
BgkqhkiG9w0BAQUFAAOBgQB8FShDN2Ig034Y5eyadiFDEtOvsIJ3Z2xV9aTL4u8xMlz1gZR1
AZAvCv+ZMMRRKWCsrG5tItV8DFPSfWAGMpInmMarA4f76JRLQEUhkRUg8GpkJM5ryk5EDakk
0oiBQcQD8A+UHwrcmaj3UWxQ9zCjDgU+1mY9nEQxZZyp4eeUfzCCAxcwggKAoAMCAQICEALr
5BE3U6n+HWCoLbyhohMwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoT
HFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25h
bCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA3MDUzMTA2MTM1N1oXDTA4MDUzMDA2MTM1N1ow
czEPMA0GA1UEBBMGQWx0bWFuMRUwEwYDVQQqEwxKZWZmcmV5IEVyaWMxHDAaBgNVBAMTE0pl
ZmZyZXkgRXJpYyBBbHRtYW4xKzApBgkqhkiG9w0BCQEWHGphbHRtYW5Ac2VjdXJlLWVuZHBv
aW50cy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoz/0+s4Cn65n/3bU
3shXw4y5u1uEMEsBOiqNU0PfIKGYQe95b1FKNbNAkctSdQT6GF5cbhSnJPmb2OOb1frx64dl
DgskaG561xa8XPA1aP8Cc+33dgsSLIxGEh97lyUYHEfWBC03KMCFPKhZfcrGAXoVCrFBadnL
AokQbUTFahVg/qQx2IT3wSj1sCIfV5UDuXcEKHCvRtEZIsSzu1849Cj6I4nY5bt+r94kyDHM
94MHYBJi+6tWLFRy2gkIB3HEPmxAiQrKljNpH9bOffiBLIAgmJ6d1ZXepBXyexQbwOYvftpV
lMEFHHQmdiwH3tj69hE78XvM5X9J+SbjbuNpAgMBAAGjOTA3MCcGA1UdEQQgMB6BHGphbHRt
YW5Ac2VjdXJlLWVuZHBvaW50cy5jb20wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOB
gQB8FShDN2Ig034Y5eyadiFDEtOvsIJ3Z2xV9aTL4u8xMlz1gZR1AZAvCv+ZMMRRKWCsrG5t
ItV8DFPSfWAGMpInmMarA4f76JRLQEUhkRUg8GpkJM5ryk5EDakk0oiBQcQD8A+UHwrcmaj3
UWxQ9zCjDgU+1mY9nEQxZZyp4eeUfzCCAz8wggKooAMCAQICAQ0wDQYJKoZIhvcNAQEFBQAw
gdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUg
VG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp
bCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTAeFw0w
MzA3MTcwMDAwMDBaFw0xMzA3MTYyMzU5NTlaMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxU
aGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwg
RnJlZW1haWwgSXNzdWluZyBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxKY8VXNV
+065yplaHmjAdQRwnd/p/6Me7L3N9VvyGna9fww6YfK/Uc4B1OVQCjDXAmNaLIkVcI7dyfAr
hVqqP3FWy688Cwfn8R+RNiQqE88r1fOCdz0Dviv+uxg+B79AgAJk16emu59l0cUqVIUPSAR/
p7bRPGEEQB5kGXJgt/sCAwEAAaOBlDCBkTASBgNVHRMBAf8ECDAGAQH/AgEAMEMGA1UdHwQ8
MDowOKA2oDSGMmh0dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVQZXJzb25hbEZyZWVtYWls
Q0EuY3JsMAsGA1UdDwQEAwIBBjApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0ZUxh
YmVsMi0xMzgwDQYJKoZIhvcNAQEFBQADgYEASIzRUIPqCy7MDaNmrGcPf6+svsIXoUOWlJ1/
TCG4+DYfqi2fNi/A9BxQIJNwPP2t4WFiw9k6GX6EsZkbAMUaC4J0niVQlGLH2ydxVyWN3amc
OY6MIE9lX5Xa9/eH1sYITq726jTlEBpbNU1341YheILcIRk13iSx0x1G/11fZU8xggNkMIID
YAIBATB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5
KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQ
AuvkETdTqf4dYKgtvKGiEzAJBgUrDgMCGgUAoIIBwzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN
AQcBMBwGCSqGSIb3DQEJBTEPFw0wNzExMDgwMzI2MTNaMCMGCSqGSIb3DQEJBDEWBBR9m7VZ
EhOLkR+tk5VeB45pZEksCDBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMHMA4GCCqGSIb3
DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDCBhQYJKwYB
BAGCNxAEMXgwdjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcg
KFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3Vpbmcg
Q0ECEALr5BE3U6n+HWCoLbyhohMwgYcGCyqGSIb3DQEJEAILMXigdjBiMQswCQYDVQQGEwJa
QTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhh
d3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECEALr5BE3U6n+HWCoLbyhohMwDQYJ
KoZIhvcNAQEBBQAEggEAQMyslApAvqP5SD92TepzdlG8N6XRF/InNFl+AaNHPHR1O+jAoVdm
dHU36a2xgKU9KkDzgv11OcAR07Tn3A+0hQa6+XeDZfmojjDlJW4wRZxodpzW9/qzS6SK4ZqI
ck18VmyUpd3fsSB+Q9JT6BvoJIzshAHyFJqnjxEYKQiFXgU2sWTv67sItqSaVnsjxjqT5k7q
wCiORP3QjmiXvkDjeV2JeumdygrEbKAHJ7PBYpUwPVx1jmmgaikn5Dx/50UFadeIEx37zgMO
mgFgMsx6y4V8xdE/4xWVX6x6od8hWru9w34vOSJSf52OvI2gmjGpXBvej+AueMAtYOgzWaTP
HwAAAAAAAA==
--------------ms010004020501020808000505--