11
votes

Meilleures pratiques d'applications réseau hautes performances

Tout en essayant un serveur multidiffusion UDP que j'ai écrit sur Windows 7 Ultimate X64, je suis tombé sur une chose la plus curieuse. Jouer de la musique avec Foobar2000 dans l'arrière-plan amélioré le taux de transmission du serveur encore a également engagé une perte de paquets mineurs. Tourner la musique OFF a immédiatement déposé le taux de transmission au-dessous des niveaux acceptables, mais également une perte de paquets. (J'ai une application cliente qui parle au serveur et rapporte des paquets non acquittés)

Je suis conscient du comportement de l'étranglement de Vista (et de haut) pour que les applications de médias et de réseau jouent bien ensemble, mais je ne m'attendais certainement pas à ce que jouer de la musique améliorerait les performances du réseau, ni de la transformation de performances du réseau dégradées de manière significative. < / p>

Que puis-je faire à propos de cela à partir d'un point de vue de code dans mon application serveur de manière à ce qu'il effectue de manière cohérente si jouer de la musique ou non sur Vista et non? Je voudrais certainement éviter de devoir informer tous mes clients sur la manière de modifier leur registre pour obtenir des taux de transmission acceptables et souhaiterait également éviter de les faire simplement «jouer de la musique» afin d'obtenir également des taux de transmission acceptables. La demande devrait "travailler" à mon avis.

Je pense que la solution implique quelque chose dans le sens des priorités de processus, des MMCS, ou éventuellement un autre appel obscur Windows API pour l'obtenir pour faire la bonne chose (TM) ici.

Aussi, désolé mais créant un cas de test reproductible est une quantité non triviale de travail. Le comportement de l'étranglement ne se produit que lorsque le pilote de la carte réseau physique travaille activement et ne peut pas être reproduit à l'aide de l'interface de bouclage. On aurait besoin d'une mise en œuvre du client, d'une mise en œuvre du serveur et d'un matériel réseau physique à tester avec.


2 commentaires

Quand vous dites 'joue de la musique', voulez-vous dire que c'est la musique de votre HD et en utilisant la carte son? Ou est-ce en streaming via la même carte réseau?


@Reinier: Oui, Foobar2000 chargera lentement des données sur l'audio HD et diffusant de l'audio à mon interface audio externe via USB 2.0.


4 Réponses :


0
votes

foobar a beaucoup de plugins écrits par différentes personnes. Celles-ci peuvent être la cause de votre problème. Je vous propose de vous rapprocher de la vraie raison. Essayez d'éteindre les plugins une par une exécutant votre test chaque fois qu'un plugin est désactivé.

J'espère que l'idée aidera.


1 commentaires

Je doute fortement du problème est spécifique FOOBAR2000. Je vais essayer d'autres joueurs de médias à diagnostiquer le problème plus loin. pourrait avoir quelque chose à voir avec l'interface audio USB 2.0 que j'utilise. Je dirigerai également quelques tests avec la carte son à bord.



0
votes

Ce sonne comme TSP / IP Gestion du débit basé sur son algorithme primitif. Le papier blanc ici devrait donner plus d'arrière-plan. http://www.asperasoft.com/?gclid=cicszmqd8z0cfshgagod_ltsmq Leur produit est un protocole UDP qui fonctionne très bien.


3 commentaires

Je devrais mentionner que j'utilise les protocoles TCP et UDP dans la même application. TCP n'est que pour les informations de contrôle et la coordination de tous les clients; Ce ne devrait pas être le goulot d'étranglement ici. J'utilise purement udp pour le transfert de données et conserver les paquets de moins de 1500 octets. J'utilisais tous les UDP, mais j'ai rencontré de sérieuses problèmes de synchronisation et j'étais sur le point de réinventer la roue TCP, donc j'ai dit pourquoi pas seulement utiliser TCP.


TCP / IP est le premier endroit où je chercherais votre problème.


@Mike: Pensez-vous que la perte de paquets UDP sur le côté serveur est en quelque sorte liée à la communication TCP en cours? TCP n'est utilisé que pour informer tous les clients que le prochain lot de données est sur le point d'être envoyé via UDP. Il existe également un message «Secteur complet» envoyé après un court délai du serveur. Bien qu'un transfert de lot UDP soit en place, aucun message TCP n'est envoyé par l'application, à l'exception du flux de trafic TCP normal que le système d'exploitation a pour pouvoir conserver la connexion établie.



2
votes

3 commentaires

Je suis déjà associé à des paquets ensemble par groupes de 1 024. Les paquets sont environ 1400 octets chacun. Je reçois environ 50-60 paquets négatifs reconnus par le client sur le 1 024. Lorsque je désactive le lecteur multimédia sur la machine serveur, le nombre de NAK tombe immédiatement sur 0 et un meilleur débit est atteint. Cela semble indiquer que le serveur est responsable de la perte de paquets. Je me demande ce que je peux faire du côté serveur, si quelque chose, pour accueillir automatiquement cette conflit d'E / S.


Votre commentaire semble indiquer le contraire de votre question. Essayez-vous vraiment d'envoyer 1024 paquets tous les 50-100 μs? C'est un débit insensé. Et le problème est-il vraiment le débit ou la perte de données?


Oh non non. Le délai de microsecond 50-100 est le délai entre l'envoi de paquets individuels dans le secteur des paquets de 1024. De plus, je ne crois pas que j'ai mentionné mon retard de microsecond 50-100 dans cette question. Êtes-vous en train de référencer mes questions? :)



4
votes

Ce que vous observez est l'effet secondaire de votre lecteur multimédia définissant la résolution d'horloge de votre machine à 1 ms.

Cela ne se produit que pendant la pièce

L'effet secondaire est - votre application a des élèves plus petites et cela indique votre application car vous avez probablement eu beaucoup de processeur volé à partir de votre application et avec des horaires plus longs - plus longtemps.

Pour le tester Vous pouvez simplement définir la résolution de la minuterie dans votre application sur 1MS et comparer les performances sans jeu de média.

devrait être identique à la même chose que si aucun paramètre Clocres mais avec une lecture multimédia.


0 commentaires