ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: небольшой оффтоп : device polling



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);


 




Copyright © Lexa Software, 1996-2009.