[MontelLUG] ifconfig che dà i numeri (forse)

cesco webmonster a apf.it
Ven 16 Set 2005 16:46:59 CEST


Decimo septimo Kalendas Novembres MMV EndelWar="E" haec scripsit:
E> alcuni 2.2 e 2.4 hanno un bellissimo "bug" i cui sintomi assomigliano
E> moltissimo a questo comportamento; in sostanza hanno usato un tipo di
E> variabile  troppo stretto  e semplicemente  "ha fatto  il giro"  e ha
E> ricominciato da 0 a contare i byte trasmessi

$ bc -l
l(4283258987)/l(2)
31.99606176632245179833

Effettivamente hai sfondato il muro dei 32 bit.

** Dopo una bella googolata **

Nel file netdevice.h c'è la definizione della struttura che memorizza le
statistiche di rete (net_device_stats) e la tua variabile è una unsigned
long, quindi a 32 bit (almeno  nel codice della 2.6.8 che ho sottomano).

Farla a 64 bit in un sistema a 32 bit lo rallenterebbe e quindi sta a te
fare statistiche piú spesso :)

** Mail di Linus sull'argomento **
     On Thu, 3 Jul 2003, Jeff Sipek wrote:
     
     > The variables for network statistics (in struct net_device_stats)
     > are  unsigned longs.  On  32-bit architectures,  this makes  them
     > overflow  every 4GB  or  2^32 packets.  The  following series  of
     > patches  [against  2.5.74]  makes the  statistics  variable  type
     > configurable. The default  is to leave everything the  way it was
     > (unsigned long). However,  when NETSTATS64 is set  in the config,
     > the statistics use 64-bit variables (u_int64_t) - this works only
     > on 32-bit architectures.
     
     Please do  this in  user space. The  "overflow every  2^32 packets"
     thing is _not_ a problem, if  you just gather the statistics at any
     kind of reasonable interval.
     
     I'd  hate  to penalise  performance  for  something like  this.  We
     have generally  avoided locking _entirely_ for  statistics, exactly
     because people  felt that  there are  major performance  issues wrt
     network  packet  handling,  and that  "perfect  statistics"  aren't
     important enough to penalize performance over.
     
     Remember: "perfect is the enemy of good".
     
                     Linus
** Fine **

-- 
     ______________
    /\             \
    \_| ciao ciao, |
      |   cesco    |
      |   _________|_
       \_/___________/




More information about the montellug mailing list