8.14.2012

AGPM

最近开始比较多人在修改 AGPM 了,有兴趣的人,有几个帖子可以交流学习下。
坛内帖 关于黑苹果在机型设定时对GPU电源管理的一点见解
坛内帖 [交流] 讨论一下 Y450 的显卡降频问题,求交流。。
坛内帖 GPU(显卡)变频的一些探讨,欢迎大家测试,拍砖= =
国外帖 http://www.projectosx.com/forum/index.php?showtopic=1246
国外帖 http://www.insanelymac.com/forum/index.php?showtopic=254053
国外帖 http://www.insanelymac.com/forum/index.php?showtopic=266036


前言:

黑苹果,从 PC 开始安装 Mac OS X 之后,就注定的无止境的折腾。

但是,最终目的,不外乎是希望,这个历尽千辛万苦搞上手的黑苹果,可以当作主要的开机系统,处理居家休闲,游戏娱乐,联网爬文,专业工作的所有应用。相信很多熟手,高手都已经把 Mac 当成主系统了。

运用 dsdt 修改而成的完美黑苹果,有一定的难度,不是人人可以完成,但是要当主系统,个人以为,除了主板可以安装,显卡,声卡,网卡,USB 等可以驱动外,最重要的关键应该是降频与降温的达成。无法做到降频降温的黑苹果,长期使用产生的高热问题,恐怕对台式机或笔记本而言,都不是一个好现象。

CPU 降频,可以用很复杂的方式修改使用原生电源管理 AppleIntelCPUPowerManagement.kext,也可以用简单的 VoodooPState.kext 来完成,还可以搭配变色龙参数,总而言之,其实效用应该是差不多的。黑猫白猫,会抓老鼠的就是好猫。

        GenerateCStates
        Yes
        GeneratePStates
        Yes


        CSTUsingSystemIO
        Yes
        GeneratePStates
        Yes


CPU 降频的结果,也可以用 iStat Menus+Updater.v.3.17 或 iStat_pro.wdgt 或 smcK-Stat-i 或 SMC_Monitor 来监看温度与降频的变化成果。
AGPM-00.png 
 iStat_pro.wdgt+SMC_Monitor+smcK-Stat-i.zip (1.06 MB, 下载次数: 532) 


显卡 GPU 的降频,目前看似只有修改 AppleGraphicsPowerManagement.kext(AGPM)这条路可以进行了。

写这个帖子的用意是,希望藉由更容易上手的方式,让更多人一起讨论 AGPM 的详细设置,让 AGPM 的各项设置更加的清楚明瞭。


真的有必要手动修改 AGPM 来加载显卡的变频吗???
可以使用 OpenGL Extensions Viewer 作全屏测试,查看测试的帧率是否有从低帧率,变高帧率。也可以与 Window 的测试作比较。如果确认显卡已经自动变频,达到个人使用需求,则无须多此一举的修改 AGPM 了。(zhouyang 67F)
至于,如何决定是否要手动修改加载 AGPM ?
有些人的显卡,未加载 AGPM 时,画面容易 lag 或是有帧率过低的状况发生,或是时常发生鼠标卡吨的状况,可以采用以下提供的显卡测试软件,按个人需求,决定是否进行 AGPM 的修改。


接下来,就简单的对 AGPM 的修改,做个内容有限的说明与交流。


认识你的显卡:
可以在 Windows 里面,使用 GPU-Z 及 GPU Shark,取得显卡的主要参数。以下用我的台式机的 N 卡 9300GE 及 笔记本的 A 卡 4330m 来作简单的介绍。
在 GPU Shark 可以发现 4330m 具有降频的档位功能,但是 9300GE 并没降频档位。 

从变频的角度来看,
具有三个变频档位的 4330m,正确的修改 AGPM 设置之后,应该可以发挥 AGPM 的变频管理功能
只有一个频率档位的 9300GE,修改 AGPM ,只具有加载的功能,完全没有变频的意义吧!
AGPM-01-4330m.GIF AGPM-02-9300m.GIF 
另外,GPU-Z 也可以设置高频与低频的参数显示。
AGPM-03GPU.png AGPM-04GPU.png 
(Nvidia 显卡专用)也可以在 Mac 里面,使用 nvclock 0.8b5_7 来取得显卡的重要资料。不过,因为是旧软件了,只有部分显卡有支持,新的显卡应该都没有支持,无法正确显示吧。
先将解压缩的 nvclock0.8b5_7-bin-universal 文件夹放到桌面,再于终端键入以下命令,确认查有 nvclock 的文件。
  1. cd Desktop/nvclock0.8b5_7-bin-universal/
  2. ls -la
复制代码
AGPM-05-1.png 
确认查有 nvclock 的文件后,继续加载 mapMemoryDriver.kext
  1. sudo chown -R 0:0 mapMemoryDriver.kext/
  2. sudo kextload mapMemoryDriver.kext/
  3. ./mapMemoryDriverClient
复制代码
再使用 nvclock 取得N卡参数
  1. sudo ./nvclock -f -i
复制代码
AGPM-05.png 
透过上面的图示里面,就可以看到显卡的详细参数。

另外,还可以透过 atMonitor 来监看显卡 GPU 的负载,温度,显卡内存,与帧率的使用变化。(weizh126 71F)有安装 Xcode 的人,还可以利用 /Developer/Applications/Graphics Tools/OpenGL Driver Monitor 显卡监测工具查看相关信息。
AGPM-05-2.png 
AGPM-05-3.png 
 GPU-Z+GPUShark(Win)+nvclock0.8b5_7+atMonitor.v2.7b(Mac).zip (2.14 MB, 下载次数: 512) 
透过以上几种工具软件,取得足够的显卡信息后,再依个人需求判断,是否需要进行 AGPM 的变频修改及加载了。


接下来,可以开始进行修改 AGPM

一、安装变色龙 pkg,选用合适的机型的 SMBios.plist。或使用 Chameleon Wizard 设置合适的机型的 SMBios.plist。选用的机型,原则上,必须是 AppleGraphicsPowerManagement.kext/Contents/Info.plist 里面支持的机型。
AGPM-06.png PlistEdit Pro.png

二、选用安装 pcj 的 FakeSMC.kext 自动修改 SMC 版本号 及 smc-compatible。或自行手动修改 FakeSMC.kext 的 SMC 版本号 及 smc-compatible 。

三、开始准备修改 AGPM 文件

修改文件:
/System/Library/Extensions/AppleGraphicsPowerManagement.kext/Contents/Info.plist

统计结果:
在 Info.plist 提供了所有 AGPM 有支持的 SMBios 机型,以及显卡类型,这边做个简单的分类。

IGPU  为 Integrated GPU 集显(应属于 Intel 的显卡为主,或许也称为 Intel GPU,尚未查证)
GFX0 应为白苹果默认的独立显卡,可能为 N 卡或 A 卡,可直接由参数内容判断。
Vendor10deDevice0a29  为 N 卡独立显卡
Vendor1002Device6720  为 A 卡独立显卡

目前主流的修改方式,都是以 Vendor10deDevice0a29 及 Vendor1002Device6720 分别作为 N 卡及 A 卡的修改。
也就是说,原则上,你只要将 Vendor10deDevice0a29 放置于 Info.plist 里面任何的 SMBios 机型中,就可以顺利配合 SMBios.plist 的机型来加载 AGPM,不用局限在特定的 SMBios 机型,当然也可能会有例外无法加载的情况发生。
AGPM-07.png 
设置 AGPM 加载纪录 log:
将使用机型中的 LogControl 从 0 改为 1,即可以显示 AGPM 的加载纪录 。
AGPM-08.pngAGPM-12N.png 
显卡种类:
从统计的结果得到 16, 17, 18 等三种 control-id 类型,分别如下。
control-id=16 只出现在 IGPU 集显 ( MacMini, MacBook, MacBookPro, MacBookAir, iMac )
                                        control-id
                                        16
control-id=17 只出现在一体机内建独立显卡 ( MacMini, MacBook, MacBookPro, MacBookAir, iMac )
                                        control-id
                                        17
control-id=18 只出现在台式机独立插卡显卡 ( MacPro 及 Xserve )
                                        control-id
                                        18
因此,黑苹果中,笔记本的独立显卡采用 control-id=17 ,台式机的独立显卡采用 control-id=18,应该是比较合理的选择。目前尚未得知其中有无实质差异。
AGPM-09.png

模板选用:N 卡
在 Info.plist 中,不同机型的 N 卡模板都不同,如下图,不过,按实际硬件的组成,黑苹果中,笔记本 N 卡应属采用 MacBookPro 的模板,台式机 N 卡应属采用 MacPro 的模板,这样应该也是比较合理的选择。另外,在 MacBookPro 的 N 卡模板中,还多了两个参数项 Threshold_Low_v 与 Threshold_High_v,目前尚无法完全确认实际参数的设置来源与作用,可先移除参数,不在 AGPM 中加载。当然,如果你已经知道如何设置的话,也可以自行修改为合适的参数。
AGPM-10N.png 
参数设置:N 卡
笔记本较台式机的模板多了 BoostPState 与 BoostTime,大部份的机型只有设置 BoostPState =0~3 及 4 个 BoostTime =3,估计是显卡的降频档数,或许可依显卡增加或删减来修改。另外,Mac-942C5DF58193131B 及 Mac-942452F5819B1C1B 的机型则设置有更多的 BoostPState 与 BoostTime。
AGPM 中也有几个不同的参数,目前尚未找到完全合理的解释,暂时也无法说明,不过,最主要的参数是 Threshold_High 及 Threshold_Low 分别有四个档次的 G-state ,可以依照自定的临界值来控制显卡的降频方式,一般修改降频来控制显卡的电源管理,都是修改这个为主。
在第一次加载 AGPM 的时候,可以直接套用模板的参数,只要修改 Vendor10deDevice0a29 为自己的显卡 ID 即可。
(MacBookPro 还有 Threshold_High_v 及 Threshold_Low_v,更为细腻的控制参数,暂时不讨论)

据国外论坛的讨论发现以下可能的定义:
SensorOption =1,应为启用 AGPM 中的该项显卡参数设置功能,取消 =1 将无法加载 AGPM。
Threshold_High_v 及 Threshold_Low_v 可能是与 电压 Volts 有关的参数。 
Threshold_High 单位应为 GPU Idle 的百分比 % ,即 GPU Idle 低于设定值,将升频进入该 G State 。
Threshold_Low 单位应为 GPU Idle 的百分比 % ,即 GPU Idle 超过设定值,将降频进入该 G State 。

修改结果:N 卡
以修改 N 卡的 9300GE 为台式机 MacPro5,1 的 Vendor10deDevice06e0 为例 。虽然这边将 MacPro5,1 的独立显卡模板设置在 MacBookPro8,1 来使用,并不会造成无法加载的问题。相反的,AGPM 仍然正常的加载。
AGPM-11N-81.png

模板选用:A 卡
而在 Info.plist 中,不同机型的 A 卡模板貌似都相同,如下图,可自由选择即可。不过,须注意的是,除了 qscOnTime 的设置有所不同之外,max-power-state 也可能出现 8 或 2 的设置。
AGPM-10A.png 
参数设置:A 卡
只有 Enabled, Mode, hwPState 及 qscOnTime 等参数,没有 N 卡的参数。实际上,并不清楚这些参数的主要设置方式。
修改结果:A 卡
这边是用我的 ATI 4330m 的两个档次来作修改实验。不过,目前结果是失败的,可见 qscOnTime 的参数设置方式是错误的。
AGPM-11A-82.png

实际加载 AGPM 的结果:以 N 卡的 9300GE 及 A 卡的 4330m 为例。
将修改过的 AppleGraphicsPowerManagement.kext 用 Kext Wizard 安装 kext,重建cache、mkext等即可。
可以用以下指令,查询 AGPM 是否已经加载。
  1. ioreg -lw0 | grep attached-gpu
复制代码
AGPM-12T.png 
另外,开启<应用程序><实用工具><控制台>后,选用所有信息,键入 AGPM 也可看见 GPU 的 G-state 不断的在 0~3 的档次做切换的动作。
N 卡的 9300GE,台式机独立显卡 control-id=18
AGPM-12N.png 
A 卡的 4330m,笔记本独立显卡 control-id=17(原先尚未设置时,自动加载为 control-id=16)
AGPM-12A.png 
或是,开启 IORegistryExplorer  软件,键入 AGPM 也可以看见 AGPM 已经成功的加载了,其中,我的台式机 9300GE 的 N 卡,并没有选用 MacPro4,1 或 MacPro5,1,而是选用 MacBookPro8,1,但是 AGPM 一样是正常的加载了,不过我是选用 MacPro 的 AGPM 模板来修改的。
N 卡的 9300GE
AGPM-13N.png 
A 卡的 4330m
AGPM-13A.png 
这边顺便说明一下,之前的帖子说到可用 IORegistryExplorer 查看 AGPM,其实只是在查看 AppleGraphicsPowerManagement.kext 中 Info.plist 的加载内容,并无其他意义。
另外,在 IORegistryExplorer 中显示的都是 16位 数字,因此 control-id = 16 = 0x10,control-id = 17 = 0x11,control-id = 18 = 0x12,在 AGPM 的加载都是正确的,并未发生任何错误。
 IORegistryExplorer+NovaBench.zip (658.49 KB, 下载次数: 91) 


加载后的显卡测试:
前面提到,可以设置不同的机型,所以可以在 Info.plist 中,将显卡的参数复制到所有的机型中,以便随时可以采用不同的机型作测试。修改过的 Info.plist 必须透过 Kext Wizard 修复权限、重建cache、mkext等
AGPM-14.png 
另外也可以采用 LegacyAGPM.kext 的方式存放在 /Extra/Extensions/ 中,可避免升级后,还要重新修改 AppleGraphicsPowerManagement.kext 的困扰。附件提供三个 LegacyAGPM 分别如下,请自行修改显卡 ID 及参数内容。
A 卡 独显模板专用的  LegacyAGPMATI.kext 。
N 卡 NB 独显模板专用的  LegacyAGPMNNB.kext 及 N 卡 PC 独显模板专用的  LegacyAGPMNPC.kext 。

使用方式:三选一修改后,放置于 /Extra/Extensions/ ,必须透过 Kext Wizard 重建 /Extra/Extensions.mkext 才可以使用 LegacyAGPMNNB.kext 或 LegacyAGPMNPC.kext 或 LegacyAGPMATI.kext 正常加载 AGPM 。
 LegacyAGPM(NNB+NPC+ATI).zip (5.27 KB, 下载次数: 139) 
AGPM-15.png 

另外,可以藉由一些显卡测试软件,来验证 AGPM 修改加载的效果,当然,AGPM 是显卡的电源管理,也就是说,正确的参数设置,可以让显卡发挥最高效能,同时也较为耗能,但也可以让显卡不会永远维持在最耗能的频率,可在平时节省电源。不过,错误的设置也会降低显卡的效能,造成 lag 的延迟状况。
但是,要让显卡达到 AGPM 真正变频的效果,有一个最重要的关键点,就是,在 Windows 里面,使用 GPU Shark 取得的显卡参数,必须具有变频的档位。
NovaBench
AGPM-NovaBench.png 
OpenGL Extensions Viewer
http://itunes.apple.com/us/app/o ... -viewer/id444052073
AGPM-OpenGL.png 
CineBench
http://www.maxon.net/cn/downloads/cinebench.html
AGPM-CineBench.png 
GeekBench
http://115.com/file/e6eiudnw
AGPM-GeekBench.png 
LuxMark (Win+Mac版)
http://www.luxrender.net/wiki/LuxMark
AGPM-LuxMark.jpg 


目前 AGPM 已知存在未解的问题:
1. A 卡的参数设置,尚无所悉,希望如果知道的朋友,可以提供参考。
2. N 卡的国内外讨论比较多些。但是针对部份参数的细节,仍须按照个人的显卡,自行测试找到最适用的参数设置。


问题与讨论:

以上讨论的,都只是暂时沿用 系统内置的 AGPM 参数,直接启用 AppleGraphicsPowerManagement.kext,并未针对个人的显卡,作最佳化或个人偏好的变频设置。

目前对 AGPM 的各项参数的取得与设置作用,所知有限,希望藉由这帖子的交流,可以透过不同机型与显卡的设置,让这些参数功能更加的清晰,设置更加的简单明瞭。

目前就 A 卡的部份,可说是,毫无所悉。N 卡的讨论比较多些。
1. Threshold_High_v 及 Threshold_Low_v 的设置错误,可能会造成鼠标及动画在某些 G-state 时,发生 lag 的状况 。因此在无法确知的状况下,最好先拿掉。
2. AGPM 的设置错误,无法加载时,可能会造成关机不断电或重启不断电的状况发生。
3. 笔记本显卡 9300m GS 观察的情况,使用交流电源,只在 state 0 和 1 之间切换,只要拔掉电源,不管此刻显卡处于何种状态,立刻变成 state 3 ,然后再根据情况跳到 state 0、1 或 2 。(weizh126 62F)
4. LogControl 这个选项,在测试完之后,最好还是改回 0 。因为如果是 1 的话,会使得蓝牙鼠标有顿挫的感觉。(gcafrk 118F)
5. AGPM 里面 state 3 是显卡最节能的一级,容易卡吨,state 3 跳到 state 2 或其他等级的时候容易造成鼠标来回飘,也就是国外论坛常说的laggy,卡两下就会跳到 state 2 或 1 或 0,这三个等级下自然就顺滑了, 一般情况下避免 state 3 就 ok 了。(whitegerry 15F) 对笔记本来说,长时间维持在 state 2 上,显卡温度变化弹性比较大且能维持较低的温度,台式机散热好的话可以维持在 state 0 或 state 1。(whitegerry 99F)