begin process at 2012 05 29 15:32:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Système

 > 

Noyau

 > 

perte de paquets UDP dans un thread quand l'autre thread fait un write()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

perte de paquets UDP dans un thread quand l'autre thread fait un write()

mercredi 3 juin 2009 à 14:34:07 | perte de paquets UDP dans un thread quand l'autre thread fait un write()

fabricius

Hello,

Voila mon problème, ca fait bien une semaine que je suis dessus...
J'ai écrit un soft qui écoute une socket UDP, qui reçoit des paquets et qui les écrit sur disque. Et ce, pour plusieurs port donnés.
Le tout est en C++, sous linux, et utilise la libraire pthread. A chaque port UDP ecouté il y a deux threads: un qui ecoute la socket l'autre qui se charge d'ecrire sur disque le buffer quand il est suffisament gros.
Le probleme est que je perd des paquets, et je connais la cause: c'est la fonction write() qui s'effectue dans l'autre thread . Si je commente l'appel à la fonction write() alors je ne perd aucun paquet.
Pourtant cet appel système est censé etre ré-entrant, non ? Il ne devrait pas y avoir de soucis...

Je précise que les débits ne sont pas tres important: je commence à avoir des pertes à partir de 2 ports UDP qui envoient chacun à 20 Mo/s. Ce sont des petits paquets qui partent: de 300 a 500 octets. Et si j'augmente la taille des paquets, les pertes disparraissent.

Je commence à secher....
mercredi 3 juin 2009 à 14:55:28 | Re : perte de paquets UDP dans un thread quand l'autre thread fait un write()

fregolo52

Membre Club

Essaie d'augmenter la taille du buffer de réception avec setsockopt.

Sinon, au niveau système, tu peux aussi augmenter la taille de la pile IP (surtout si tu es sous Linux).

mercredi 3 juin 2009 à 15:27:55 | Re : perte de paquets UDP dans un thread quand l'autre thread fait un write()

fabricius

Hello,

merci de ta réponse. J'ai augmenté la taille de la variable net.core.rmem_max (avec la commande sysctl) mais ça n'a rien changé. Et pour les options de la socket, pareil, je crois que j'ai reduit un peu les pertes mais j'en ai toujours.

En fait plus j'y pense plus je me dit que c'est un soucis de synchronisation des threads, mais tout semble ok...
mercredi 3 juin 2009 à 15:38:09 | Re : perte de paquets UDP dans un thread quand l'autre thread fait un write()

fregolo52

Membre Club

dans un ancien projet, on balancait et recevait des trames multicast, c'était du violent niveau débit, style minimum 200Mb/s.
on a augmenté la pile, puis le buffer de réception, et ca allait mieux.
par défaut SO_RCVBUF est à 8200, on avait été tres haut je crois, style 160000.

pour la synchro des threads, on utilisait un semaphore, ce que tu as du faire.

après je vois pas, peut-etre l'écriture sur le HDD est super lente ?


Cette discussion est classée dans : perte, thread, write, paquets, udp


Répondre à ce message

Sujets en rapport avec ce message

Thread et socket udp [ par eurysthe ] Bonjour !!Voila j'ai un petit problème de thread qui me pourrit la vie.J'ai crée un thread qui doit écouter en boucle les informations qui transite su Passer des arguments à un Thread & framework 2.0 [ par nico971gwada ] Salut,Je dois faire une interface graphique qui permet de s'échanger des fichiers xml.Sans trop rentrer dans les détails je dois faire 2 serveur UDP é Thread et serveur UDP [ par nico971gwada ] Salut,J'ai fait une IHM qui doit démarrer un serveur UDP à partir de l'appuie sur un bouton. Puis en réapuyant sur ce même bouton je voudrais arreter Socket UDP linux [ par elinep ] Bonjour à tous, J'ai une application qui communique en wifi entre deux machines linux en utilisant des liaisons UDP. En fait la machine A envoie rég Perte de messages [ par mohdaef ] Bonjour à tous Je suis entrain de programmer un petit multijoueur, et pour cela je doit échanger des messages entre les différents programmes. Pour Envoi de message à windowProcedure [ par mohdaef ] Bonsoir Je souhaite envoyer un message personalisé depuis un thread à windowProcedure(...), pour qu'il soit traité comme n'importe quel autre message Thread [ par malkommalkom ] Bonjour a tous, Ma question est simple mais dificile a posé J'ai consu un server multy-client, donc avec des thread. Ces threads accedent, lors de c [ C -> BAR (FORTRAN)]resolution numerique d une equation u''(x)=f(x) par difference finies [ par wimil ] bonjour tt l monde! je suis debutante en programmation fortran et j dois resoudre numeriquement l 'equation u''(x)=f(x) avec les condition initiale de Modification de paquets réseau [ par Rankin ] Salut à tous, Je cherche à rediriger certains paquets émis ou reçus sur une interface réseau vers une autre interface ; peu importe en réalité la fin


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,044 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales