Athlon 节电 HOWTO

Daniel Nofftz

2007-06-06

修订历史
修订版 1.2.32007-06-06修订者:dn
修正了 1.2.3 版本的修正 (感谢 Rajeev V. Pillai)
修订版 1.2.22007-05-30修订者:dn
修正了 nforce 禁用命令中的一个错别字
修订版 1.2.12007-05-13修订者:dn
修正了新的版权声明,修正了免责声明
修订版 1.22007-05-10修订者:dn
添加了 coolrun,新的(巴西)葡萄牙语版本 URL,许可证更改(GNU FDL 改为 GNU GPL),一些小的可访问性相关更改
修订版 1.1.122006-04-06修订者:dn
修正了错别字

如何在某些主板/芯片组上启用 Athlon/Duron/AthlonXP 处理器的节电功能。这对于节省电力和降低 CPU 和系统的温度非常有用。(如果您在机箱/CPU 散热器中使用温控风扇,它还可以降低噪音)。


目录
1. 简介
1.1. Athlon 节电模式基础知识
1.2. 版权和许可
1.3. 免责声明
1.4. 反馈/问题/支持
1.5. 本文档的新版本
2. 不同的方法
2.1. 命令行技巧(推荐)
2.2. coolrun shell 脚本(推荐)
2.3. Athcool 程序(推荐)
2.4. BIOS 更新
2.5. 内核补丁
2.6. LVCool 解决方案
2.7. FVCool 程序
2.8. AMD 760MP 节电
3. 还有什么?
3.1. 如何测试它是否工作
3.2. 已知错误/问题
3.3. 解决声音跳过和其他问题的方法
3.4. 另一种解决声音跳过和其他问题的方法(在某些 Via 芯片组上)
3.5. 待办事项
3.6. 翻译

1. 简介

1.1. Athlon 节电模式基础知识

Linux 内核的正常空闲循环使用的 HLT 信号通常不会为 Athlon/Duron 系列处理器(以下简称 Athlon 处理器)带来任何显着的节电效果。 要在 Athlon 处理器上实现真正的节电,您必须将处理器置于 STPGNT 模式(停止授权模式)。 在此模式下,处理器与前端总线 (FSB) 断开连接,并且可以关闭 CPU 的某些部分并降低时钟速度以节省电量。

一些现代主板/芯片组还支持在检测到 HLT 信号时发出 STPGNT 的功能。


1.2. 版权和许可

本文档,Athlon 节电 HOWTO,版权归 Daniel Nofftz 所有,© 2003-2007 年。

本作品是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证第 2 版的条款重新发布和/或修改它。

许可证副本可在 http://www.daniel.nofftz.net/linux/gpl_v2.txt 获取。

Linux 是 Linus Torvalds 的注册商标。


1.3. 免责声明

本作品的发布是希望它有用,但不提供任何担保; 甚至不包含对适销性或特定用途适用性的暗示担保。 有关详细信息,请参阅 GNU 通用公共许可证。

所有版权均归其各自所有者所有,除非另有明确说明。 本文档中术语的使用不应被视为影响任何商标或服务标志的有效性。 特定产品或品牌的命名不应被视为认可。


1.4. 反馈/问题/支持

反馈对于本文档至关重要。 特别需要针对新芯片组的新解决方案,以及关于所提供的解决方案是否有效的评论。 如果您发现拼写错误,也请报告,因为我不是英语母语人士。 请将您的补充、评论、批评和问题发送至以下电子邮件地址您可以用德语或英语给我发电子邮件!

如果您想支持我,您可以通过 Paypal(发送到相同的电子邮件地址)捐款,或给我发送一些新硬件来玩玩。 ;)


1.5. 本文档的新版本

本 HOWTO 的最新版本将始终首先在以下网址提供: http://www.daniel.nofftz.net/linux/

本 HOWTO 的源代码托管在 Linux 文档项目,也可以向我索取。


2. 不同的方法

在以下部分中,我将介绍实现同一目标的不同方法:在基于 Athlon/Athlon-XP 的系统上节电。 我目前推荐的方法是使用 “命令行技巧” 或 athcool 程序(内核补丁已过时,将不再进一步开发,而 LVCool 补丁仅支持一个芯片组系列。)

几乎所有这些方法都将在芯片组的北桥中设置 “检测到 STPGNT 时断开连接使能” 位。 所有其他工作都由内核的 ACPI 子系统完成,当处理器进入 acpi-c2 空闲模式时,它会向处理器发送 STPGNT 信号。

如果您尚未获得支持 ACPI 的内核,则必须在内核设置中启用它,然后重新编译新内核。 您将在 常规设置+电源管理设置->ACPI 下找到 ACPI 选项。 您必须至少具有以下选项:ACPI 总线管理器系统处理器

或者对于新的 2.4.22 内核:常规设置+ACPI 支持。 您必须至少具有以下选项:处理器

2.6.x 内核:电源管理选项+ACPI。 您必须至少启用 处理器 选项。 您不应启用 Thermal Zone !!

一些芯片组还支持在检测到 HLT 信号时发出 STPGNT。 这些主板/芯片组不需要启用 ACPI! 目前,我正在寻找关于哪些芯片组无需 ACPI 即可工作以及哪些芯片组需要 ACPI 的反馈。 也许您可以在您的主板上测试一下并给我发送邮件。(请参阅 第 3.1 节


2.1. 命令行技巧(推荐)

要使用命令行技巧,您通常需要在内核中启用 ACPI,否则会提到。 启用节电无需重启。 您可以使用以下命令从命令行启用/禁用它

在 KT133/133A、KX133、KL/KLE133、KM/KN133 等上:(绝对需要启用 acpi)

启用: setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) | 0x80)))

禁用: setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) & 0x7f)))

在 KT266/266A/333、KM266/266A/333 等上

启用

setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) | 0x80)))

setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) | 0x02)))

禁用

setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) & 0x7f)))

setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) & 0xfd)))

在 KT333CF/KT400/KT400A/KM400/KM400A/KT600 上

启用

setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) | 0x80)))

setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) | 0x02)))

禁用

setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) & 0x7f)))

setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) & 0xfd)))

在 KT880 上

启用

setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) | 0x80)))

setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) | 0x02)))

禁用

setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) & 0x7f)))

setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) & 0xfd)))

在 SIS730/733 上

启用: setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) | 0x01)))

禁用: setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) & 0xfe)))

在 SIS735/740/745/755 上

启用: setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) | 0x0003)))

禁用: setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffc)))

在 SIS741/741GX/746/748 上

setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) | 0x0003)))

禁用

setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) & 0xfffc)))

在 Nforce 上

启用

setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) | 0x06)))

禁用

setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9)))

在 Nforce2 上:(无需启用 acpi 即可工作)

启用: setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) | 0x10)))

禁用: setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) & 0xef)))

在 AMD751 和 AMD760/761 上:(不适用于 760MP!!!)(无需启用 acpi 即可工作)

启用: setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) | 0x06)))

禁用: setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) & 0xf9)))


2.2. coolrun shell 脚本(推荐)

coolrun 是一个小型的 shell 脚本,它使用命令行技巧并为您完成所有工作。 它由 Grozdan Nikolov 开发/维护,基于本 HOWTO。

您可以在此处阅读更多相关信息(并下载它): https://sourceforge.net/projects/coolrun/


2.3. Athcool 程序(推荐)

Athcool 是一个小程序,它执行与上面的 setpci 命令相同的任务。 它支持相同的芯片组,并检测您拥有的芯片组,发出正确的设置以使节电功能正常工作。

您可以在此处阅读更多相关信息(并下载它): http://members.jcom.home.ne.jp/jacobi/linux/softwares.html 我不是这个程序的作者!


2.4. BIOS 更新

在一些较新的主板上,制造商提供了 BIOS 更新,该更新在主板的芯片组中设置了需要的位/位(或让您在 BIOS 设置中选择是否应启用它)。 请参阅您的主板制造商的主页,以查看是否有此类 BIOS 更新可用。


2.5. 内核补丁

该补丁基于我在 Newsnet 上找到的另一个补丁(来自 Jan Niehusmann)。 我修改了该补丁以也支持 KT266/266A 芯片组。 顺便说一句,我的补丁与命令行技巧执行相同的操作,只是补丁是从内核内部完成的。 这就是为什么我建议使用命令行技巧的原因,它真的很容易使用,而且您不必修改内核。

好的... 现在逐步进行,以下是如何应用补丁

  1. 首先,您必须下载补丁

    用于 2.4.17 的内核补丁

    用于 2.4.21 的内核补丁 (感谢 Thomas Reinhardt 将其移植到 2.4.21)

    用于 2.6.5 的内核补丁,它支持所有 Via 芯片组,最高到 KT600(感谢 Sebastian Droege 将其移植到 2.6.5 并添加了其他芯片组)

    用于 2.6.9 的内核补丁,它支持所有 Via 芯片组,最高到 KT600(感谢 Alexander Hug 将其从 2.6.5 移植到 2.6.9)

  2. 以 root 用户身份登录

  3. cd /usr/src

  4. 应用补丁: cat $path-to-patch/amd_cool.diff | patch -p0 (新的 2.6.5 补丁:cd 到 linux 并 patch -p1)

  5. cd linux

  6. 编译新内核

  7. 重启,并在内核启动提示符下,输入语句amd_disconnect=yes。 这是因为 Athlon 处理器中存在已知错误,这可能会在某些主板上引起问题。 您应该测试该补丁,如果它有效,您可以将语句附加到文件amd_disconnect=yes到文件/etc/lilo.conf.


2.6. LVCool 解决方案

LVCool 是 Windows 程序 VCool 的一个小型端口。 它仅支持 KT133/133A 和 KX133 芯片组,我无法为其提供支持。 您可以在 此处 下载它。 此解决方案不需要在内核中编译 ACPI。


2.7. FVCool 程序

此处 是另一个节电程序,它支持多种芯片组。 我自己没有测试过它,但我听说它有效。 看看它... 还有一个程序,您可以使用它来使用某些主板上的板载监控芯片(例如 lm-sensors 软件包)。


2.8. AMD 760MP 节电

有一个内核模块可以在 760MP 多处理器芯片组上启用节电。 您可以在 此处 找到它。 我不知道它的效果如何,但我至少收到了一封邮件,有人说它对他有效。 所以看看它。


3. 还有什么?

3.1. 如何测试它是否工作

好的... 您使用了描述的节电可能性之一,并且您想验证它是否有效。 这里有两种检查方法

如果您的 CPU 散热器上有温控风扇,您可以检查风扇的噪音水平,以查看它是否工作。 空闲几分钟后,您可以让 CPU 做一些事情。

我通常这样做

  1. 获取超级用户 (root)
  2. cd /usr/src/linux
  3. 让计算机做一些事情: while true; do make clean; make bzImage; done
大约 20 或 30 秒后,您应该注意到风扇的噪音越来越大,同时风扇转速越来越快。 别忘了在一段时间(几分钟)后用 STRG-C 结束 while 循环。

与上述相同的过程也适用于 CPU 温度监控程序(例如 lm-sensorsxmbmonrtsensors)。


3.2. 已知错误/问题

Athlon/Duron 处理器中存在两个已知错误。 这是 AMD Athlon 处理器修订指南 中的第 11 和第 14 号错误。 看起来 Athlon XP 受这些错误的影响明显较少。 因此,如果您有 Athlon XP,您就很幸运了(像我一样)。

可能存在以下问题(由错误引起)

  • 声音播放期间跳过

  • 视频播放期间跳过和减速

  • 超 DMA 硬盘传输速度减慢

  • 系统挂起

  • USB 问题

  • 有人报告了高频尖叫声

有时 BIOS 更新会有所帮助(它作为错误 11 的解决方法而存在,BIOS 可以完成)。 但据我所知,只有少数主板在 BIOS 中具有此解决方法。

对于 Asus A7V133-C,已知 BIOS 选项PCI 主设备读取缓存在启用时将解决大多数问题。 因此,请查看您的 BIOS,看看它是否具有此功能。

众所周知,在某些主板上,BIOS 选项延迟事务可以解决一些问题。 您可能也想尝试一下此选项。

警告:在 KT133A 主板上,这可能会启用著名的 VIA 南桥错误!

来自 Newsnet 的帖子,关于 Asus A7V

  • 不使用延迟事务:声音跳过和电视跳过

  • 使用延迟事务:没有声音跳过,只有轻微的电视问题

  • 使用延迟事务和主设备读取缓存:几乎没有电视问题,也没有声音跳过

还有其他导致问题的原因

  • PSU 的功率不足以处理处理器/主板功耗的波动

  • 一些主板稳压器可能与 PSU 有相同的问题 ;)

  • 您拥有 K7S5A(据我所知,启用节电后,此主板可能会非常奇怪)

如果您在启用节电的情况下遇到小问题,但仍然想使用节电功能,您可以默认启用节电,并在想要播放音乐、观看电视等时将其关闭。


3.3. 解决声音跳过和其他问题的方法

感谢 Michael Hamilton 向我提交了关于其工作原理的想法。

两位人士证实了此修复程序的工作原理,因此它看起来有效,但它可能不适用于所有人。 请随时提交更多经验!

开始:看起来至少可以通过最大化设备的 pci 延迟计时器来治愈声音跳过。

首先,您必须找到声卡的“pci 地址”。 这可以使用 lspci 完成。 您必须查找类似“多媒体音频控制器”或“AudioPCI”的内容。 获取设备的“pci 地址”(看起来像这样:01:06.0 -> 它代表:总线:插槽.功能),并最大化其延迟计时器。 这是通过 setpci 完成的

setpci -v -s "pci-address" latency_timer=ff

有关延迟计时器的更多信息,您可以 此处 查看。

也许这也适用于其他问题,例如 USB 问题和硬盘传输速度减慢,但这尚未经过测试。 请随时测试它(但如果它不起作用或使一切变得更糟,请不要责怪我),并报告它是否有效。 问题是,我没有这些问题,因此无法自己测试。

如果它有效,您必须在每次启动/重启计算机时执行此 setpci 命令。 因此,最好将其放在其中一个 init 脚本中(在驱动程序模块加载之后!)。


3.4. 另一种解决声音跳过和其他问题的方法(在某些 Via 芯片组上)

感谢 Wijatmoko Prayitno 提交此信息!

KT266、KT/KM333 和 KT/KM400 芯片组证实了此修复程序的工作原理。 它也可能适用于其他 Via 芯片组。 如果它在其他 Via 芯片组上有效,请报告!

这非常容易,并且像用于启用节电的命令行技巧一样工作

KT/KM333 和 KT/KM400 芯片组上的声音修复

启用: setpci -v -H1 -s 0:0.0 70=$(printf %x $((0x$(setpci -H1 -s 0:0.0 70) | 0x08)))

禁用: setpci -v -H1 -s 0:0.0 70=$(printf %x $((0x$(setpci -H1 -s 0:0.0 70) & 0xf7)))

如果它有效,您必须在每次启动/重启计算机时执行此 setpci 命令。 因此,最好将其放在其中一个 init 脚本中(在驱动程序模块加载之后!)。


3.5. 待办事项

向本文档添加更多芯片组和更多信息。

添加有关 Athlon64 和 Opteron CPU 的节电系统的一些信息。

添加有关笔记本电脑和节电的一些信息。


3.6. 翻译

还存在其他语言的翻译。 目前,其中一些不是最新的。

匈牙利语,作者:Zsolt Mocza

西班牙语,作者:Carlos Mayo(非常过时)

巴西葡萄牙语/葡萄牙语,作者:Bruno Buys

法语,作者:Mathieu Pillard(非常过时)

意大利语,作者:Maurizio Fantino(非常过时)

德语(仅部分),作者:Fabian Mohren

日语,作者:Seiji Kaneko