none
为什么在 Windows Server 2008 R2 下打开播放视频文件的一瞬间移动鼠标指针会卡顿两下呢? RRS feed

  • 问题

  • 我的 CPU 是 i3 2120,H61 的主板,8 GB 内存,安装的 cn_windows_server_2008_r2_enterprise_with_sp1_vl_build_x64_dvd_617396 版系统。现在的问题是,在使用第三方媒体播放器软件打开播放一些视频文件时,刚开始加载的一瞬间,移动鼠标指针就会卡顿两下,然后就一切正常播放了。即使用 Windows Media Player 打开 AVI/WMV 类型的文件也是这样,只不过比起第三方播放器卡顿的轻微而已。打开音频文件不会这样。难道是因为 Windows Server 2008 R2 系统默认进程优先级对多媒体任务的支持与 Windows 7 家庭桌面版不同而造成的吗?

    我安装完系统后安装了主板配套的所有驱动,也添加安装了桌面体验、墨迹支持和 .NET Framework 3.5。查看 DirectX 诊断工具,显示加速也都已经启用了。具体如以下附图所示:


    Pulled over our eyes to blind us from the truth

    2012年7月24日 13:23

答案

  • 鼠标或键盘卡顿,我看是中断服务例程没能及时得到调度而引起的。

    Windows下,各种软/硬件中断是有优先级的(IRQL),如果一个优先级N的中断到了CPU,内核的中断调度逻辑会把CPU跳转到对应的中断处理例程(ISR)代码上去执行,并且,此刻,再发送到该颗CPU的屏蔽低于级别小于等于N的中断(可能就是鼠标键盘之类的USB控制器所触发的中断)。

    这些是纯理论,不过希望对你判断问题有用。

    一个可实践的操作就是拿perfmon或者procexp去看DPC Rate及Interrupt是否有突然的爆发。


    2012年7月25日 6:01

全部回复

  • 鼠标或键盘卡顿,我看是中断服务例程没能及时得到调度而引起的。

    Windows下,各种软/硬件中断是有优先级的(IRQL),如果一个优先级N的中断到了CPU,内核的中断调度逻辑会把CPU跳转到对应的中断处理例程(ISR)代码上去执行,并且,此刻,再发送到该颗CPU的屏蔽低于级别小于等于N的中断(可能就是鼠标键盘之类的USB控制器所触发的中断)。

    这些是纯理论,不过希望对你判断问题有用。

    一个可实践的操作就是拿perfmon或者procexp去看DPC Rate及Interrupt是否有突然的爆发。


    2012年7月25日 6:01
  • 那么假设这一理论是正确的,出现这种情况是正常普遍现象呢,还是只会在个别硬件环境条件下才会引发呢?

    假如不是 USB 设备,而是 PS/2 接口的鼠标,还会这样吗?


    Pulled over our eyes to blind us from the truth

    2012年7月26日 11:17
  • 那么假设这一理论是正确的,出现这种情况是正常普遍现象呢,还是只会在个别硬件环境条件下才会引发呢?

    假如不是 USB 设备,而是 PS/2 接口的鼠标,还会这样吗?


    Pulled over our eyes to blind us from the truth

    windows里定义的32级IRQL里,最低的0/1/2是软件中断,3开始往上到20多是硬件IO设备中断。那USB和PS/2的IRQL,好像是PS/2高一些。但关键在于,要高于你的硬件解码器的中断级别,才能抢夺CPU资源转到键盘鼠标的中断处理例程,让你感觉鼠标键盘不卡顿。

    你可能可以抓个kernel dump看到这些中断级别值。

    其实微软的教你怎么手动dump一个系统memory的kb244139就已经告诉我们这一点:当系统hang在IRQL高于键盘IRQL时,你连手动触发dump都做不到了。

    所以,你的问题,是一样的道理。


    • 已编辑 Finy 2012年7月27日 3:20
    2012年7月27日 3:19
  • 那么假设这一理论是正确的,出现这种情况是正常普遍现象呢,还是只会在个别硬件环境条件下才会引发呢?

    假如不是 USB 设备,而是 PS/2 接口的鼠标,还会这样吗?


    Pulled over our eyes to blind us from the truth

    windows里定义的32级IRQL里,最低的0/1/2是软件中断,3开始往上到20多是硬件IO设备中断。那USB和PS/2的IRQL,好像是PS/2高一些。但关键在于,要高于你的硬件解码器的中断级别,才能抢夺CPU资源转到键盘鼠标的中断处理例程,让你感觉鼠标键盘不卡顿。

    你可能可以抓个kernel dump看到这些中断级别值。

    其实微软的教你怎么手动dump一个系统memory的kb244139就已经告诉我们这一点:当系统hang在IRQL高于键盘IRQL时,你连手动触发dump都做不到了。

    所以,你的问题,是一样的道理。


    可我不明白的是,既然 IRQL 是所有基于 Windows NT 内核架构的系统所共有的。那为什么在 Windows 7 家庭桌面平台上播放视频时,鼠标就不卡顿呢?而且我见到其他人也安装的 Windows Server 2008 R2,播放视频鼠标就不卡顿


    Pulled over our eyes to blind us from the truth

    2012年7月27日 10:13
  • 那为什么在 Windows 7 家庭桌面平台上播放视频时,鼠标就不卡顿呢?而且我见到其他人也安装的 Windows Server 2008 R2,播放视频鼠标就不卡顿


    你说Win7不卡,是指把Win7装在这台机器上吗?

    另外,你在08下,能用perfmon抓一下问题发生时的Interrupt/sec和DPC Queted/sec看看吗?

    2012年7月30日 3:08
  • 我说的是别人的机器上装的 Windows 7 和 Windows Server 2008 R2 就不卡。我这台机器只装过 Windows XP SP3 和现在的 Windows Server 2008 R2。装 Windows XP 就不卡。

    以下是照你说的,用 perfmon 抓取的问题发生时 DPC Rate、Interrupts/sec 和 DPCs Queted/sec 的相关信息

    这是重启系统后,关闭 EAV NOD32 4.2.76.1 反病毒软件的所有实时监控,待机什么都不做时的 perfmon 截图:

    这是打开视频问题发生时的 perfmon 截图(需要指出的是,无论是否打开视频,只要一移动鼠标,DPCs Queted/sec 就直线升到封顶了):

    请问,从以上截图中能分析出问题吗?

    另外还有一点要说一下。我安装的是终极解码这款播放器。当时安装好后由于个人喜好,就在解码中心里设置了使用 MPlayerc 播放器播放。结果才出现以上帖子中所述的打开视频文件时会卡顿两下的现象。

    前几天我又设置为使用 PotPlaye 播放,结果还是会卡顿。但是当改为使用 KMPlayer 播放后,就不卡了,一切都很流畅。为什么会这样呢?以前在 WinXP 下用使用 MPlayerc 就很正常。这是不是可以证明,我的问题与 IRQL 无关呀?


    Pulled over our eyes to blind us from the truth

    2012年8月3日 14:12
  • 麻烦 Finy 再给分析一下

    Pulled over our eyes to blind us from the truth

    2012年8月10日 4:46