Neighbour table overflow
rbilbao en inzignia.cl
rbilbao en inzignia.cl
Lun Oct 4 16:19:43 CLT 2004
El Mon, Oct 04, 2004 at 02:15:27PM -0400, Marco Bravo escribio:
> en gc_thresh1,2 y 3 tengo valores de 128, 512 y 1024 respectivamente..
sip, ese es el default
>
> Lo que leo acerca de gc_thresh es q si aumento los valores solo
> incrementaria el buffer para almacenar cache de ruteo?
nopes, como veras de net/core/neighbour.c :
static struct neighbour *neigh_alloc(struct neigh_table *tbl)
{
struct neighbour *n = NULL;
unsigned long now = jiffies;
if (tbl->entries > tbl->gc_thresh3 ||
(tbl->entries > tbl->gc_thresh2 &&
now - tbl->last_flush > 5 * HZ)) {
if (!neigh_forced_gc(tbl) &&
tbl->entries > tbl->gc_thresh3)
goto out;
}
.....
....
..
.
}
ademas en net/ipv4/route.c :
...
..
static int rt_garbage_collect(void){
...
...
...
/* Calculate number of entries, which we want to expire now. */
goal = atomic_read(&ipv4_dst_ops.entries) -
(ip_rt_gc_elasticity << rt_hash_log);
if (goal <= 0) {
if (equilibrium < ipv4_dst_ops.gc_thresh)
equilibrium = ipv4_dst_ops.gc_thresh;
...
...
..
}
y en net/ipv4/arp.c :
...
.gc_interval = 30 * HZ,
.gc_thresh1 = 128,
.gc_thresh2 = 512,
.gc_thresh3 = 1024,
....
o sea, los valores permiten un balance entre el tamanno de la tabla,
la frecuencia y la cantidad de nodos que se limpian en cada "pasada".
** en resumen :
gc_thresh1 = minimo
gc_thresh2 = balance, o cuando debe comenzar a preocuparse
gc_thresh3 = maximo permitido
** ademas puedes modificar el valor de :
gc_stale_time = tiempo de vida de cada entrada en la tabla
** y de :
gc_interval = cada cuanto debe correr el garbage_collector (GC) en la
tabla.
** cuidado eso si que si tienes una tabla muy grande, con mucho trafico
a distintos hosts y un GC muy seguido podrias hacer que el kernel entrara
en un loop (algo asi como un auto DoS ;-D )
suerte y que ojala te sirva, pero trata de determinar porque se te llenaron
las tablas arp (algun virus o troyano quizas? ).
slds
mundo
Más información sobre la lista de distribución Linux