在Windows Vista和更新的Windows Vista中播放音频或视频时,是什么导致网络性能差?

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

所讨论的软件是一个本机C ++/MFC应用程序,可通过UDP接收大量数据,然后处理显示,声音输出和写作的数据,以及磁盘。当应用程序的CHM帮助文档从其帮助菜单启动时,我首先遇到了问题,然后在从硬件收集数据时单击了帮助文档。为了复制这一点,在应用程序运行时,使用Autohotkey脚本在帮助文档中迅速单击。系统上发生任何声音后,我就开始遇到错误。

如果我完全禁用了声卡,则所有内容都没有错误,尽管声音输出显然是禁用的。但是,如果我有声音播放(在此应用程序中,一个不同的应用程序,甚至是消息框中的哔哔声),我会得到数千个掉落的数据包(我们知道这一点,因为每个数据包都均为时间戳)。作为第二次测试,我根本没有使用我的应用程序,只使用Wireshark来监视硬件中的传入数据包。果然,每当窗户上播放的声音时,我们都会丢弃数据包。实际上,声音甚至不必积极播放来引起错误。如果我简单地创建一个缓冲区(使用DirectSound8),并且永远不会开始播放,那么我仍然会遇到这些错误。

这发生在多个PC上,具有多个网络卡(光纤和RJ45)和声卡(包括集成和独立卡)的多个组合。我还尝试了每张NIC和声卡的不同驱动程序版本。所有测试都在Windows 7 32位上。由于我的应用程序将DirectSound用于音频,因此我尝试了不同的Cooperativelevels(正常操作为DSSCL_PRIORITY),但没有成功。

在这一点上,我非常坚信它与我的应用程序无关,并且想知道是否有人知道在我开始与硬件供应商和/或Microsoft打交道之前可能会导致这个问题。

有帮助吗?

解决方案

众所周知,Microsoft在Windows Vista内核中构建了一些怪异的反功能,这些反功能将降低I/O性能,以确保多媒体应用程序(Windows Media Player,DirectX)获得100%的响应能力。我不知道这是否也意味着对UDP的数据包丢失。阅读该方法的la脚理由: http://blogs.technet.com/b/markrussinovich/archive/2007/08/27/1833290.aspx

那里的一条评论很好地总结了这一点:“在我看来,微软试图“修复”没有破坏的东西。”

其他提示

事实证明,这种行为是设计的。 Windows Vista,后来实现了所谓的 多媒体类调度程序服务(MMCSS) 这旨在使所有多媒体播放尽可能流畅。由于多媒体播放依赖于硬件中断以确保播放平稳,因此任何竞争中断都会引起问题。主要硬件中断来源之一是网络流量。因此,在MMCSS下运行程序时,微软决定在网络流量下进行防风。

我想这是一个 大事 背部 在2007年 什么时候 Vista出来了, ,但我错过了。马克·罗西诺维奇(Mark Russinovich)有一篇文章(谢谢 ypnos) 描述MMCSS. 。看来我的整个问题归结为这一点:

由于标准以太网框架大小约为1500字节,因此每秒10,000个数据包的限量约为15mb/s的最大吞吐量。 100MB网络最多可以处理12MB/s,因此,如果您的系统位于100MB网络上,则通常不会看到任何放缓。但是,如果您具有1GB网络基础架构,并且发送系统和Vista接收系统都具有1GB网络适配器,则会看到吞吐量下降到大约15%。此外,如果您有多个NIC,则NDIS节流代码中有一个不幸的错误。例如,如果您具有具有无线和有线适配器的系统,则NDIS将每秒最多处理8000个数据包,并且使用三个适配器,它将每秒处理最多6000个数据包。每秒6000个数据包等于9MB/s,即使在100MB网络上也可见。

我尚未验证Windows 7或Vista SP1中仍然存在多个适配器错误,但是如果您遇到问题,这是值得寻找的。

从关于Russinovich帖子的评论中,我发现Vista SP1引入了一些注册表设置,这些设置使人们可以调整MMCS的影响如何影响Windows。特别是 NetworkThrottlingIndex键.

解决我问题的解决方案是通过设置 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\NetworkThrottlingIndex 关键 0xFFFFFFFF 然后重新启动。这完全禁用了MMCSS的网络节流部分。我曾尝试将价值提高到 70, ,但是直到我完全禁用它之前,它不会停止引起错误。

到目前为止,我还没有从此更改中看到对其他多媒体应用程序(也没有我自己应用程序的视频捕获和音频输出部分)的任何不利影响。如果发生变化,我将在这里报告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top