Quelles sont les causes de mauvaises performances du réseau lors de la lecture audio ou vidéo dans Windows Vista et plus récent?

StackOverflow https://stackoverflow.com/questions/4661390

Question

Le logiciel en question est une application C ++ / MFC natif qui reçoit une grande quantité de données sur UDP et traite ensuite les données pour l'affichage, la sortie sonore et écriture sur le disque entre autres. J'ai d'abord rencontré le problème lors du lancement CHM document d'aide de l'application de son menu d'aide, puis je clique dans le document d'aide lors de la collecte des données du matériel. Pour reproduire ce, un script AutoHotkey a été utilisé pour cliquer rapidement autour dans le document d'aide pendant que l'application était en marche. Dès qu'un son est produite sur le système, j'ai commencé à obtenir des erreurs.

Si j'ai la carte son complètement désactivé, tout processus bien sans erreur, bien que la sortie sonore est évidemment désactivé. Cependant, si j'ai son jeu (dans cette application, une autre application ou même le bip d'une boîte de message) Je milliers de paquets perdus (nous le savons parce que chaque paquet est horodaté). En tant que second test, je n'ai pas utilisé ma demande du tout et juste utilisé Wireshark pour surveiller les paquets entrants à partir du matériel. Effectivement, chaque fois qu'un son joué dans Windows, nous avions laissé tomber des paquets. En fait, son n'a même pas jouer activement à provoquer l'erreur. Si je crée simplement un tampon (en utilisant DirectSound8) et ne jamais commencer à jouer, je reçois toujours ces erreurs.

Cela se produit sur plusieurs ordinateurs avec de multiples combinaisons de cartes réseau (à la fois à fibre optique et RJ45) et les cartes son (à la fois intégrés et des cartes séparées). J'ai aussi essayé différentes versions de pilotes pour chaque carte réseau et son. Tous les tests ont été sur Windows 7 32bit. Depuis mon application utilise DirectSound pour l'audio, j'ai essayé différentes CooperativeLevels (fonctionnement normal est DSSCL_PRIORITY) sans succès.

A ce moment, je suis assez convaincu qu'il n'a rien à voir avec ma demande et je me demandais si quelqu'un avait une idée de ce que pourrait être la cause de ce problème avant de commencer à traiter avec les fournisseurs de matériel et / ou Microsoft.

Était-ce utile?

La solution

Il est connu que Microsoft a construit une fonctionnalité anti-bizarre dans le noyau de Windows Vista qui dégradent les performances d'E / S pour vous assurer préventivement que les applications multimédia (Windows Media Player, directX) obtenir la réponse 100%. Je ne sais pas si cela signifie aussi la perte de paquets UDP. Lisez cette justification boiteux pour la méthode: http: // blogs .technet.com / b / Mark Russinovich / archive / 2007/08/27 / 1833290.aspx

L'un des commentaires, il résume assez bien ce «Il me semble que Microsoft a essayé quelque chose de « réparer » qui n'a pas été brisé »

Autres conseils

Il se trouve que ce comportement est par la conception. Windows Vista et quelque chose plus tard mis en œuvre appelé Multimedia Class Scheduler Service (MMCSS) qui est destiné à faire tous la lecture multimédia aussi lisse que possible. Depuis la lecture multimédia repose sur des interruptions matérielles pour assurer une lecture fluide, les interruptions concurrentes causera des problèmes. L'une des principales sources d'interruption matérielle est le trafic réseau. À cause de cela, Microsoft a décidé d'accélérer le trafic réseau lorsqu'un programme est en cours d'exécution sous MMCSS.

Je suppose que cela a été grand retour face en 2007 lorsque Vista est sorti , mais je manqué. Il y avait un article de Mark Russinovich (merci ypnos ) décrivant MMCSS. Il semble que la bouillie tout mon problème à ceci:

  

Parce que la trame Ethernet standard   la taille est d'environ 1500 octets, une limite de   10.000 paquets par seconde équivaut à une   un débit maximal d'environ 15 Mo / s.   100mb réseaux peuvent gérer au plus   12MB / s, donc si votre système est sur un   réseau 100Mb, vous ne verrez pas en général   tout ralentissement. Toutefois, si vous avez un   1gb infrastructure réseau et à la fois   le système d'envoi et votre Vista   système de réception possède réseau 1Gb   adaptateurs, vous verrez le débit baisse   à environ 15%. De plus, il y a une   bug malheureux dans l'étranglement NDIS   code qui magnifie étranglant si vous   ont plusieurs cartes réseau. Si tu as un   système à la fois sans fil et filaire   adaptateurs, par exemple, la volonté NDIS   processus au plus 8000 paquets par   d'autre part, et avec trois adaptateurs il   traitera un maximum de 6000 paquets   par seconde. 6000 paquets par seconde   est égal à 9 Mo / s, une limite qui est visible   même sur les réseaux 100Mb.

Je n'ai pas vérifié que le multiple bug de l'adaptateur existe encore dans Windows 7 ou Vista SP1, mais il est quelque chose à chercher si vous rencontriez des problèmes.

D'après les commentaires sur le poste de Russinovich, je trouve que Vista SP1 introduit certains paramètres de Registre qui permettait de régler la MMCSS affecte Windows. Plus précisément, le NetworkThrottlingIndex touche.

La solution à mon problème était de régulation du réseau désactiver complètement en définissant la clé de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\NetworkThrottlingIndex à 0xFFFFFFFF puis redémarrant. Cela désactive complètement la partie d'étranglement réseau de MMCSS. J'avais essayé simplement faire monter la valeur à 70, mais il n'a pas arrêté jusqu'à ce que je provoque des erreurs complètement désactivé.

Jusqu'à présent je n'ai pas vu des effets négatifs sur d'autres applications multimédias (ni la capture vidéo et des portions de sortie audio de ma propre application) de ce changement. Je rendrai compte ici si ces modifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top