Date: Sat, 31 Aug 2019 21:44:38 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Martin Birgmeier <d8zNeCFG@aon.at> Cc: net@freebsd.org Subject: Re: [Bug 235031] [em] em0: poor NFS performance, strange behavior Message-ID: <20190831212849.X1183@besplex.bde.org> In-Reply-To: <bug-235031-7501-CaB9yXRDNO@https.bugs.freebsd.org/bugzilla/> References: <bug-235031-7501@https.bugs.freebsd.org/bugzilla/> <bug-235031-7501-CaB9yXRDNO@https.bugs.freebsd.org/bugzilla/>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 15 Aug 2019 a bug that doesn't want replies@freebsd.org wrote: > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235031 > > --- Comment #36 from Martin Birgmeier <d8zNeCFG@aon.at> --- > I just notice that the console and syslog have about 20 messages of > > em: frame error: ignored > em: frame error: ignored > em: frame error: ignored > em: frame error: ignored > em: frame error: ignored > > Uptime is 2 1/2 hours. You seem to be using my old patch which is not in -current: Index: em_txrx.c XX =================================================================== XX --- em_txrx.c (revision 348771) XX +++ em_txrx.c (working copy) XX @@ -629,9 +629,20 @@ XX XX /* Make sure bad packets are discarded */ XX if (errors & E1000_RXD_ERR_FRAME_ERR_MASK) { XX +#if 0 XX adapter->dropped_pkts++; XX - /* XXX fixup if common */ XX return (EBADMSG); XX +#else XX + /* XX + * XXX the above error handling is worse than none. XX + * First it it drops 'i' packets before the current XX + * one and doesn't count them. Then it returns an XX + * error. iflib can't really handle this error. XX + * It just resets, and this usually drops many more XX + * packets (without counting them) and much time. XX + */ XX + printf("lem: frame error: ignored\n"); XX +#endif XX } XX XX ri->iri_frags[i].irf_flid = 0; XX @@ -692,8 +703,12 @@ XX XX /* Make sure bad packets are discarded */ XX if (staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) { XX +#if 0 XX adapter->dropped_pkts++; XX return EBADMSG; XX +#else XX + printf("em: frame error: ignored\n"); XX +#endif XX } XX XX ri->iri_frags[i].irf_flid = 0; Without this patch, no message is printed and the device takes a long time to recover (when I wrote the patch, recovery was from something like a watchdog timeout after many seconds). With the patch, the recovery is good enough for nfs over udp to not lose any data or time out, but I don't trust this so I print the message. Pre-iflib versions of [l]em handled this correctly by dropping a single packet, which was easy to do. Unpatched iflib makes a mess by returning with subsequent packets unprocessed. It apparently just stops receiving until kicked by a watchdog. I don't know what causes this error. Maybe just a bad cable or switch. I don't see it for I218V with the same cable and switch. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190831212849.X1183>