Contiki: Error de adición de cola TSCH

Creado en 9 feb. 2017  ·  14Comentarios  ·  Fuente: contiki-os/contiki

favorito
Estoy desarrollando un protocolo de reenvío usando Contiki OS. El protocolo se ejecuta sobre el modo TSCH de IEEE802.15.4. El protocolo requiere agregar una cierta cantidad de paquetes durante un corto período de tiempo. Muy a menudo recibo el siguiente error:

[RLL]:Send to Parent 0 base timeslot: 40, currentTimeslot: 1, send timeslot: 45 at: asn-0.46c41d
TSCH: send packet to 255 with seqno 0, queue 0 1, len 8 120
[RLL]:Send to CS base timeslot: 40, currentTimeslot: 2, send timeslot: 50 at: asn-0.46c41e
TSCH-queue:! add packet failed: 0 #0x20003004 8 #0x0 #0x0
TSCH:! can't send packet to 255 with seqno 0, queue 1 1

Si bien agrega el primer paquete, no puede agregar el segundo paquete. La cola no está llena, lo comprobé. El error simplemente dice que no es posible asignar memoria para otro paquete, mientras que debería haber espacio más que suficiente.

Probablemente sea solo una configuración simple en el extranjero, pero no puedo encontrarla. Si alguien tiene una sugerencia, por favor hágamelo saber.

Conrado

Comentario más útil

Tuve tiempo hoy para verificar si la solución mencionada en #2108 y #2046 está resolviendo el problema.
Después de ejecutar algunos experimentos, el error ya no apareció. Haré mis experimentos hoy y mañana. En cuanto tenga los resultados confirmaré mis primeras observaciones

Todos 14 comentarios

Hola Conrado,
¿Intentaste sintonizar QUEUEBUF_CONF_NUM ?
Simón

Hola Simón,
sí, lo aumenté a 32, pero encontré un problema similar https://github.com/contiki-os/contiki/issues/1766
Parece que ese es el problema, trabajando en una solución en este momento.
Si sé más, actualizaré esta publicación....

está bien. Esto suena como un problema en tsch_queue_reset . No hay tiempo para cavar ahora, pero comparta cualquier hallazgo de su lado :)

Hola,
Creo que eso está relacionado con el bloqueo de TSCH. tsch_queue_remove_nbr agarra un candado y llama a tsch_queue_flush_nbr_queue . Luego tsch_queue_flush_nbr_queue llama a tsch_queue_remove_packet_from_queue para cada paquete, pero esta función solo hace el trabajo si TSCH no está bloqueado.

Ahora que lo pienso, sospecho que también he visto esto.

Podría estar relacionado con el bloqueo, pero no exactamente lo que describe: tsch_queue_remove_nbr libera el bloqueo antes de llamar a tsch_queue_flush_nbr_queue .

No pude encontrar la causa del problema, pero encontré una solución por el momento. Lo probé durante la noche y no recibí un solo error. Lo probaré más durante mis experimentos y, si funciona bien, crearé un PR a partir de él.

Pero aquí está por el momento lo que hice para resolverlo:

void tsch_queue_reset(void)
{
  /* Deallocate unneeded neighbors */
  if (!tsch_is_locked())
  {
    struct tsch_neighbor *n = list_head(neighbor_list);
    while (n != NULL)
    {

        struct tsch_neighbor *next_n = list_item_next(n);
        /* Flush queue */
        tsch_queue_flush_nbr_queue(n);
        /* Reset backoff exponent */
        tsch_queue_backoff_reset(n);
        n = next_n;
    }


    //re-initialise the buffers
    memb_init(&packet_memb); // <--- re-initialise packet buffer
    queuebuf_init(); //<--- re-initialise queue buffer
    }
}

Correcto, pero prefiero solucionar la causa raíz que reiniciar agresivamente los módulos. Tenemos que encontrar la fuga de memoria.

Profundizaré más cuando tenga más tiempo, pero podría tomar algún tiempo hasta que pueda hacerlo...

¡Lo entiendo completamente!

@ Conrad2210 Los parches de https://github.com/contiki-os/contiki/pull/2046 podrían resolver el problema que está experimentando. Consulte https://github.com/contiki-os/contiki/pull/2108 para obtener más información.

@yatch gracias por esto, lo probaré lo antes posible. De todos modos, lo que describes suena razonable y podría ser el problema. En cuanto sepa más, te lo haré saber.

Tuve tiempo hoy para verificar si la solución mencionada en #2108 y #2046 está resolviendo el problema.
Después de ejecutar algunos experimentos, el error ya no apareció. Haré mis experimentos hoy y mañana. En cuanto tenga los resultados confirmaré mis primeras observaciones

Estuve realizando experimentos todo el día de ayer y durante la noche, y el problema desapareció.
La solución mencionada en #2108 y #2046 resuelve el problema.

Gracias @yatch por la ayuda!!!

@ Conrad2210 ¡ Gracias por la prueba y el informe! ¡Estoy feliz de escucharlo!

¿Fue útil esta página
0 / 5 - 0 calificaciones