Depuis plusieurs jours on explore plusieurs pistes. J'ai maintenant la certitude que la perte de paquet est liée a l'application. En effet, si je commente l'écriture sur disque (fonction write()) dans le thread dédié a cela, je ne pert plus aucun paquet.
L'appli est écrite en C++, et il a un mécanisme de synchro des threads. Pendant l'écriture sur disque, le thread "receveur" continue son travail (recevoir des paquets UDP) mais il semble perdre certains paquets probablement au moment de l'écriture sur le disque (voir plus haut).
Le débit n'est même pas énorme: j'ai des pertes pour 20 Mb/s ! Pas beaucoup, mais c'est quand meme génant (de 50 a 2000 paquets sur 1 million). Du coup, la recv-q augmente tres peu, ce débit est assez faible. Ce sont des tout petit paquets qui partent (de 300 a 500 octets).
Quant à la variable net.core.rmem_max, impossible de la setter: "Operation not permitted". Je vais demander a mon admin.
Que vaut-il mieux employer comme fonction pour recevoir les paquets ?
recfromv() ou read() ? Avec les deux j'ai des pertes.
[^] # Re: pistes
Posté par fabricius . En réponse au message comment investiguer des "packet receive errors" en UDP ?. Évalué à 1.
L'appli est écrite en C++, et il a un mécanisme de synchro des threads. Pendant l'écriture sur disque, le thread "receveur" continue son travail (recevoir des paquets UDP) mais il semble perdre certains paquets probablement au moment de l'écriture sur le disque (voir plus haut).
Le débit n'est même pas énorme: j'ai des pertes pour 20 Mb/s ! Pas beaucoup, mais c'est quand meme génant (de 50 a 2000 paquets sur 1 million). Du coup, la recv-q augmente tres peu, ce débit est assez faible. Ce sont des tout petit paquets qui partent (de 300 a 500 octets).
Quant à la variable net.core.rmem_max, impossible de la setter: "Operation not permitted". Je vais demander a mon admin.
Que vaut-il mieux employer comme fonction pour recevoir les paquets ?
recfromv() ou read() ? Avec les deux j'ai des pertes.
Merci pour ton aide.