On Mon Oct 26 12:35:07 EDT 2009, [email protected] wrote:
> Our cpu/auth/file went belly up some time during the weekend. It
> responded to ping, but we couldn't drawterm in. No response from
> the vblade process providing storage to our XenServers either.
> Walking down to the machine I found the screen full of "soverflow
> for fx->in" messages. I had to reboot it to get the virtual machines
> back online, so this is my only clue (print statement in
> /sys/src/9/pc/devether.c:186 ). The machine had been working happily
> for over a week before this. Any ideas as to how i can keep this
> from happening again?
>
> The ethernet controller is an "Intel®PRO/1000 GT Desktop Adapter"
> according to the sticker on the back, on bootup i get
> #l0: i82543: 1000 Mbps port 0xFEBE0000 irq 5 tu 1514:000e0c73d17a
a soft overflow is when there are packets coming in
that don't fit on the ethernet queue. soft overflows
are not bugs. it's a consequence of having a finite
memory; one cannot queue infinitely.
however, printing each soft overflow to the console
can put one in a difficult to recover from situation.
i would suggest reverting these changes
; diff -c /n/sourcesdump/2009/0601/plan9/sys/src/9/pc/devether.c
/n/sourcesdump/2009/0404/plan9/sys/src/9/pc/devether.c
/n/sourcesdump/2009/0601/plan9/sys/src/9/pc/devether.c:182,196 -
/n/sourcesdump/2009/0404/plan9/sys/src/9/pc/devether.c:182,192
else if(xbp = iallocb(len)){
memmove(xbp->wp, pkt, len);
xbp->wp += len;
- if(qpass(f->in, xbp) < 0) {
- print("soverflow for f->in\n");
+ if(qpass(f->in, xbp) < 0)
ether->soverflows++;
- }
}
- else {
- print("soverflow iallocb\n");
+ else
ether->soverflows++;
- }
}
else
etherrtrace(f, pkt, len);
/n/sourcesdump/2009/0601/plan9/sys/src/9/pc/devether.c:198,207 -
/n/sourcesdump/2009/0404/plan9/sys/src/9/pc/devether.c:194,201
}
if(fx){
- if(qpass(fx->in, bp) < 0) {
- print("soverflow for fx->in\n");
+ if(qpass(fx->in, bp) < 0)
ether->soverflows++;
- }
return 0;
}
if(fromwire){
/n/sourcesdump/2009/0601/plan9/sys/src/9/pc/devether.c:239,246 -
/n/sourcesdump/2009/0404/plan9/sys/src/9/pc/devether.c:233,238
}
if(!loopback){
- if(qfull(ether->oq))
- print("etheroq: WARNING: ether->oq full!\n");
qbwrite(ether->oq, bp);
if(ether->transmit != nil)
ether->transmit(ether);
- erik