问题及分析
我所用的PC(个人电脑)自从WindowsXP升级到Windows7操作系统后,声卡一直会通过音箱发出很多爆音,影响了听音乐的感受。
一开始,我用了potplayer播放软件的WASAPI的独占模式(EXCLUSIVE)的无损(BitExact)播出,并在播放软件里把输出模式改成声卡硬件支持的(不需SRC)的通道采样率的格式(24bit/48K或16bit/48K),避过了噪声。
但是这样毕竟只是种逃避的方法,并且对于在线的视音频无效,因为它们的音频是flashplayer通过wave out或DXsound输出的,例如优土IQIYI等等,爆音依然存在。
然后,由于之前XP没那么严重的爆音,我先是查询Windows7主题的论坛BBS,里面有人大约在2010年提出了,Win7默认把音频输出放在 低优先级,所以高负载下会发生 音频流延迟,从而产生爆音。并且据此提出关闭“Multimedia Class Scheduler”service服务,提高音频优先级,避免爆音,还有提出关闭 "Windows Audio Endpoint Builder"service服务的。但是我看了下我的CPU负载只有10%多,依然有爆音,使用了"Windows Performance Toolkit"软件检查下来负载不高,所以负载过高的说法不对症。
确诊
之后,我查询了一些PC技术的论坛BBS,里面大约在2011开始提出声卡爆音来自过高的DPC,并推荐了“DPC Latency Checker”和“LatencyMon"两款软件来检查DPC是否过高。我下载了软件对自己的PC系统进行了检查,结果如下。
Win7下解决声卡发出爆音的一种方法
(突破天际的DPC,over 16000!)
结果10%的CPUloading负载下就是一大片红条,最高DPC达到21000,正常PC机多数下应该全绿条才是正常的。
DPC是什么?DPC是操作系统控制硬件的一种数据队列,当软件要通过调用中断,传输数据时,总线却被更高响应级的中断处理占用的时候,软件的数据就会暂存入的队列,等待传输。音频流数据要是一直等待,不能传输的话,正在播放的设备就会发出爆音。
既然找到了症结,就该着手解决,一般认为DPC的延迟都来自不兼容的硬件及其驱动(hardware driver),所以我把PC上的各种硬件都拔下来,就剩“CPU/主板MB/内存MEM/显卡VGA/硬盘HD”了,但DPC还是不减少,我几乎计划要换主板了。但是,这时我看到“LatencyMon"推荐我更新下BIOS,不过我这块技嘉主板的BIOS只有一个版本,我就开始查询一些PCHIFI(PC高保真)主题的论坛BBS对BIOS的看法,发现很多PCHIFI爱好者推荐把所有的“CPU节能技术”手动在BIOS的CMOS设置里关闭,以取得高音质。(由于没有仪器得出数据,对此我持保留意见。)
解决
我检查了主板的CMOS设置里可开关的“CPU节能技术”,发现我的主板支持3种节能技术(其实只有C-state和P-state两类节能技术,在C-state里有C0~C6的多个级别)。
C1E(C-state)
C2E(C-state)
EIST(P-state)
Win7下解决声卡发出爆音的一种方法
我就在这三种技术上反复尝试开关(Enabled/Disabled),终于发现了只要关闭EIST节能技术,DPC延迟就能大幅减少到正常!
after Disabled CPU EIST Function!
Win7下解决声卡发出爆音的一种方法
这回终于把DPC降下来了!而且用potplayer以外的软件听音乐时也没有爆音了!看在线视音频也没有爆音了!我已经测试一天了。
总结
虽然问题解决了,但是还是很难解释EIST这种调节CPU主频和电压的技术会造成DPC延迟的情况,而且C1E也是能调节CPU主频和电压的技术,但是对DPC延迟毫无影响。所以需要更多的技术分析和尝试才能得出结论。而现在我们能知道的是:关闭节能技术未见得能提高回放的音质,但是有可能把你的PC的过高的DPC降低!
后话
然后我查询了各个Windows系统的DPC,据各种PC的HIFI友的尝试情况,Windows7下的DPC延迟比WindowsXP和Windows8/10都高!所以Windows7最不合适听HIFI。而且可能在win7下爆音的系统设置换在winXp下就没有爆音。
我所关闭的EIST技术原本是Intel公司在笔记本PC上推出的节能省电技术,一般技术上称为P-state。除此外还有C-state(例如C1E、C2E等等)、T-state,这三种技术就现在的CPU节能技术主流了。
附件
(不知道出处)
C1E(c-state的一种)与EIST
很多人分不清C1E与EIST或者根本不了解这两种技术,C1E的全称是C1E enhanced halt
stat:在Pentium 4 5xxJ系列处理器中增加了C1E halt state,它取代了以前的Pentium 4
处理器和其它大部分x86处理器中的所常用的C1 halt state。C1 halt state由操作系统
idel进行发出的HLT命令触发,然后处理器就会进入到低功耗的挂起状态(halt state)。
最新的C1E halt state也是由HLT命令触发的,它是通过调节倍频来逐级的降低处理器的主
频,同时还可以降低电压。显然C1E halt state比原来的C1 state具有更强大的功能。C1E
halt State可以把C2D系列CPU的倍频降低到6X,对于E6600来说主频可以从原来的2.4GHz降
低到1.6GHz。
EIST即SpeedStep,是一个根据处理器负载来调节主频和电压的模块,不过它的触发机
制同C1E halt state是不同的。操作系统、BIOS的支持是必需的,操作系统通过ACPI进行调
节。SpeedStep提供了更多的CPU频率和电压调节级别,因此可以比C1E halt更加精确的调节
处理器的状态。
那么这两项选项是否影响超频呢?
很多人的印象中开启C1E与EIST户影响超频幅度,实际上C1E与EIST对超频几乎没有影响
。那么为什么会出现开启C1E与EIST超频极限下降呢的情况呢?因为绝大多数主板风扇都支
持温控,也就是说开启C1E与EIST以后由于CPU功耗减少,风扇转速降低,影响了散热,最终
因散热问题导致了超频能力的下降。因此只要在BIOS中关闭温控选项开启EIST即SpeedStep
是不会影响超频的。喜欢静音的用户在开启这个选项前不妨适当提升CPU电压,这样就不用
关于风扇温控选项。
电源状态 执行 唤醒时间 CPU功耗 平台 核心电压 缓存收缩 内容丢失
C0 是 0 大 正常 正常 否 否
C1 否 10ns 30% 正常 正常 否 否
C2 否 100ns 30% 无I/O缓冲 正常 否 否
C3 否 50000ns 30% I/O,无监控 正常 否 否
C4 否 160000ns 2% I/0,无监控 C4_VID 是 否
C5 否 200000ns 待定 待定 C4_VID L2=0KB 否
C6 否 待定 待定 待定 C6_VID L2=0KB 是
C0状态(激活)
·这是CPU最大工作状态,在此状态下可以接收指令和处理数据
·所有现代处理器必须支持这一功耗状态
C1状态(挂起)
·可以通过执行汇编指令“HLT(挂起)”进入这一状态
·唤醒时间超快!(快到只需10纳秒!)
·可以节省70%的CPU功耗
·所有现代处理器都必须支持这一功耗状态
C2状态(停止允许)
·处理器时钟频率和I/O缓冲被停止
·换言之,处理器执行引擎和I/0缓冲已经没有时钟频率
·在C2状态下也可以节约70%的CPU和平台能耗
·从C2切换到C0状态需要100纳秒以上
C3状态(深度睡眠)
·总线频率和PLL均被锁定
·在多核心系统下,缓存无效
·在单核心系统下,内存被关闭,但缓存仍有效
·可以节省70%的CPU功耗,但平台功耗比C2状态下大一些
·唤醒时间需要50微妙
C4状态(更深度睡眠)
·与C3相似,但有两大区别
·一是核心电压低于1.0V
·二是二级缓存内的数据存储将有所减少
·可以节约98%的CPU最大功耗
·唤醒时间比较慢,但不超过1秒
C5状态
·二级缓存的数据被减为零
·唤醒时间超过200微妙
C6状态
·这是Penryn处理器中新增的功耗管理模式
·二级缓存减至零后,CPU的核心电压更低
·不保存CPU context
·功耗未知,应该接近零
·唤醒时间未知
参考
有关USB声卡、数字界面和DAC接电脑出现爆音的解决经验
http://www.erji.net/read.php?tid=1768460
Empro-排除音質問題
http://www.empro10001.com/troubleshoot-tc.htm
如何解决烦人的声卡爆音(转自MIDIFAN)
http://blog.sina.com.cn/s/blog_655efe510100k5zf.html
DPC 延迟过程调用
http://blog.csdn.net/imquestion/article/details/1286641
三板斧,”剁”台PC做音源
http://bbs.hifidiy.net/thread-917289-1-1.html