On Thu, Nov 15, 2007 at 09:28:45AM +0300, Igor Sysoev wrote:
> On Thu, Nov 15, 2007 at 09:25:02AM +0300, Igor Sysoev wrote:
>
> > > >Ну там ещё есть запас - настроено на
> > > >*) прерывание после 64 rx пакетов или 128 tx пакетов.
> > > >*) или задержка прерывания на 150ms.
> > > >
> > > >
> > > не нашёл никаких похожих настроек в man bge
> >
> > Их там нет, только в исходниках. В аттаче патч с настройками.
>
> Патч.
Новый патч для 6.2, который позволяет настраивать bge на загрузке:
/boot/loader.conf:
hw.bge.rxd=512
# прерывание через 500 микросекунд
hw.bge.rx_int_delay=500
hw.bge.tx_int_delay=500
hw.bge.rx_coal_desc=64
hw.bge.tx_coal_desc=128
Такие настройки дают
systat -v 1
1885 bge0 irq19
на
input (bge0) output
packets errs bytes packets errs bytes colls
8586 0 3513419 8696 0 4585120 0
8944 0 3965891 9252 0 5165557 0
Ещё полезно в /etc/sysctl.conf добавить
net.isr.direct=1
--
Игорь Сысоев
http://sysoev.ru
--- sys/dev/bge/if_bge.c 2007-05-08 20:18:21.000000000 +0400
+++ sys/dev/bge/if_bge.c 2007-11-16 17:13:42.000000000 +0300
@@ -417,9 +417,19 @@
static int bge_fake_autoneg = 0;
static int bge_allow_asf = 0;
+static int bge_rxd = BGE_SSLOTS;
+static int bge_rx_coal_ticks = 150;
+static int bge_tx_coal_ticks = 150;
+static int bge_rx_max_coal_bds = 10;
+static int bge_tx_max_coal_bds = 10;
TUNABLE_INT("hw.bge.fake_autoneg", &bge_fake_autoneg);
TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf);
+TUNABLE_INT("hw.bge.rxd", &bge_rxd);
+TUNABLE_INT("hw.bge.rx_int_delay", &bge_rx_coal_ticks);
+TUNABLE_INT("hw.bge.tx_int_delay", &bge_tx_coal_ticks);
+TUNABLE_INT("hw.bge.rx_coal_desc", &bge_rx_max_coal_bds);
+TUNABLE_INT("hw.bge.tx_coal_desc", &bge_tx_max_coal_bds);
SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters");
SYSCTL_INT(_hw_bge, OID_AUTO, fake_autoneg, CTLFLAG_RD, &bge_fake_autoneg, 0,
@@ -825,10 +835,10 @@
{
int i;
- for (i = 0; i < BGE_SSLOTS; i++) {
+ for (i = 0; i < bge_rxd; i++) {
if (bge_newbuf_std(sc, i, NULL) == ENOBUFS)
return (ENOBUFS);
- };
+ }
bus_dmamap_sync(sc->bge_cdata.bge_rx_std_ring_tag,
sc->bge_cdata.bge_rx_std_ring_map,
@@ -2389,10 +2399,10 @@
/* Set default tuneable values. */
sc->bge_stat_ticks = BGE_TICKS_PER_SEC;
- sc->bge_rx_coal_ticks = 150;
- sc->bge_tx_coal_ticks = 150;
- sc->bge_rx_max_coal_bds = 10;
- sc->bge_tx_max_coal_bds = 10;
+ sc->bge_rx_coal_ticks = bge_rx_coal_ticks;
+ sc->bge_tx_coal_ticks = bge_tx_coal_ticks;
+ sc->bge_rx_max_coal_bds = bge_rx_max_coal_bds;
+ sc->bge_tx_max_coal_bds = bge_tx_max_coal_bds;
/* Set up ifnet structure */
ifp = sc->bge_ifp = if_alloc(IFT_ETHER);