Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Oct 2009 13:13:18 +0500
From:      rihad <rihad@mail.ru>
To:        freebsd-net@freebsd.org
Subject:   Re: dummynet dropping too many packets
Message-ID:  <4AD6D99E.10805@mail.ru>

next in thread | raw e-mail | index | archive | help
For now we've mostly disabled dummynet and the drops have stopped, 
thanks to some extra unused bandwidth we have. But this isn't a real 
solution, of course, so this weekend I'm going to try the suggestion 
made by Robert Watson:

 > In the driver init code in if_bce, the following code appears:
 >
 >         ifp->if_snd.ifq_drv_maxlen = USABLE_TX_BD;
 >         IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen);
 >         IFQ_SET_READY(&ifp->if_snd);
 >
 > Which evaluates to a architecture-specific value due to varying 
pagesize.  You might just try forcing it to 1024.

But I've looked in /sys/dev/bce/if_bcereg.h of our FreeBSD 7.1 source 
code and found this:

#define TX_PAGES        2
#define TOTAL_TX_BD_PER_PAGE  (BCM_PAGE_SIZE / sizeof(struct tx_bd))
#define USABLE_TX_BD_PER_PAGE (TOTAL_TX_BD_PER_PAGE - 1)
#define TOTAL_TX_BD (TOTAL_TX_BD_PER_PAGE * TX_PAGES)
#define USABLE_TX_BD (USABLE_TX_BD_PER_PAGE * TX_PAGES)
#define MAX_TX_BD (TOTAL_TX_BD - 1)

meaning that USABLE_TX_BD is expected to be smaller than MAX_TX_BD. What 
if MAX_TX_BD is itself way smaller than 1024, which I'll eventually set 
ifq_drv_maxlen to? Can a driver guru please comment on this? In a few 
days I'm going to try it anyway, and if the system locks up I'll just 
revert back to the original code, and order a darn expensive Intel 10 
Gige card,  but it won't hurt to ask beforehand.

TIA



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4AD6D99E.10805>