进一步优化deepin(深度)操作系统的续航和性能——TLP电源管理来了!
<p><img src="https://storage.deepin.org/thread/202311291643189267_0.png" alt="" width="900" height="383" /></p><p>上一篇关于电源配置优化(浅析 linux 电源配置)之后,我们一直在探索如何进一步优化 deepin(深度)操作系统的续航和性能表现,今天它来了:</p>
<section>TLP 是适用于 Linux 的功能丰富的命令行实用程序,无需深入研究技术细节即可节省笔记本电脑电池电量。比如 TLP 脚本是被动唤醒,可以以较小的开销完成电源管理相关内容。而且 TLP 文档支持非常完善,所以可以方便用户自行调整相关配置。</section>
<h2><span data-copy-origin="https://doc.uniontech.com"><strong>工作原理</strong></span></h2>
<ul class="list-paddingleft-1">
<li>TLP 所做的是调整影响功耗的内核设置,内核态的配置文件存储在 RAM 中,所以并不具备持久性。TLP 将配置存储在用户态中,在内核启动时对其进行配置;</li>
<li>TLP 处理的大多数内核设置都作为 sysfs 节点导出到用户空间,即 /sys/ 下的文件。tlp-<span class="code-snippet__keyword">stat</span>的输出将显示路径;</li>
<li>TLP 提供两组独立的设置,称为配置文件,一组用于电池(BAT),另一组用于交流操作。这意味着 TLP 在每次电源更改时都必须应用适当的配置文件(可以据此实现 AC BT 切换电源调度状态)。</li>
</ul>
<h2><span data-copy-origin="https://doc.uniontech.com"><strong>TLP触发事件(信号)</strong></span></h2>
<ul class="list-paddingleft-1">
<li>
<section>充电器插入(交流供电):应用 AC 配置文件;</section>
</li>
<li>
<section>充电器已拔下(电池供电):应用 BAT 配置文件;</section>
</li>
<li>
<section>已插入 USB 设备:激活设备的 USB 自动挂起模式(可以在配置文件设置例外或拒绝连接);</section>
</li>
<li>
<section>系统启动(boot):应用于当前电源 AC/BAT 相对应的设置配置文件。应用充电阈值并根据您的个人设置切换蓝牙、Wi-Fi 和 WWAN 设备(在默认配置中禁用);</section>
</li>
<li>
<section>系统关机 (power off):保存或切换蓝牙、Wi-Fi 和 WWAN 设备状态,并根据你的个人设置禁用 USB 自动挂起(在默认配置中禁用);</section>
</li>
<li>
<section>系统重启:相当于关机再启动;</section>
</li>
<li>
<section>系统挂起到 ACPI 睡眠状态 S0ix(空闲待机)、S3(挂起到 RAM)或 S4(挂起到磁盘):保存蓝牙、Wi-Fi 和 WWAN 设备状态,并根据你的个人设置关闭可移动光盘驱动器的电源(在默认配置中禁用);</section>
</li>
<li>
<section>系统从 ACPI 睡眠状态 S0ix(空闲待机)、S3(挂起到 RAM)或 S4(挂起到磁盘)恢复:应用于当前电源 AC/BAT 相对应的设置配置文件。恢复充电阈值以及蓝牙、Wi-Fi 和 WWAN 设备状态,具体取决于你的个人设置(在默认配置中禁用);</section>
</li>
<li>LAN、Wi-Fi、WWAN 连接/断开连接或笔记本电脑插接/未插接:根据你的个人设置启用或禁用内置蓝牙、Wi-Fi 和 WWAN 设备(在默认配置中禁用)。</li>
</ul>
<p><span data-copy-origin="https://doc.uniontech.com">除了上述事件之外,TLP 不会对设置进行动态或自适应更改。特别是,TLP 绝不会因 CPU 负载、电池电量或其他原因而调整设置(如果需要实现这一部分,则可以通过添加一个信号的方式来实现)。</span></p>
<h2 data-fold-block-container=""><strong>安装</strong></h2>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> apt install tlp</span></em></p>
<h2><span data-copy-origin="https://doc.uniontech.com"><strong>使用</strong></span></h2>
<p><strong>1、启动</strong></p>
<p>安装后 TLP 将在系统启动的时候自动启动,如果你不想重启系统,可以使用 <em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp start </span></em>来启动 TLP,也可以使用此命令来应用更改。</p>
<p><strong>2、状态</strong></p>
<p><em><span style="color: #0000ff;">tlp-<span class="code-snippet__keyword">stat</span> -<span class="code-snippet__keyword">s</span> TLP</span></em> 是 bash 脚本,所以不存于 daemon 进程。</p>
<p><strong>3、命令行</strong></p>
<p><strong>TLP:</strong></p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp bat</span></em> # 应用电池配置文件并进入手动模式 手动模式意味着对电源的更改将被忽略,直到下一次重新启动或发出 tlp start 以恢复自动模式。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp bat </span></em> # 应用电池配置文件并进入手动模式 手动模式意味着对电源的更改将被忽略,直到下一次重新启动或发出 tlp start 以恢复自动模式。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp ac</span></em> # 应用交流配置文件并进入手动模式。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp usb</span></em> # 对所有的ubs设备应用自动挂起。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp bayoff</span></em> # 关闭 MediaBay/Ultrabay 中的光驱电源。</p>
<p><em><span style="color: #0000ff;">sudo tlp setcharge [<span class="code-snippet__tag"><<span class="code-snippet__name">START_CHARGE_THRESH</span>></span> <span class="code-snippet__tag"><<span class="code-snippet__name">STOP_CHARGE_THRESH</span>></span>] </span></em> #可以设定对指定电池开始充电百分比和结束充电的百分比,以达到养护电池的目的(如果不带参数会重置电池管理方案。命令只能暂时更改,如果需要持久化更改需要修改配置文件)。</p>
<section></section>
<p><em><span style="color: #0000ff;">sudo tlp fullcharge </span></em> # 设定电池充满。</p>
<p><em><span class="code-snippet__attribute" style="color: #0000ff;">tlp</span><span style="color: #0000ff;"> dis</span><span style="color: #0000ff;">kid</span></em> # 显示已经配置驱动器的磁盘ID。</p>
<p>以下部分为 ThinkPad 专属:</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp chargeonce</span></em><span class="code-snippet__meta"><em><span style="color: #0000ff;"> </span> </em> # </span>将电池充电至停止充电阈值一次,这个阈值是使用 setcharge 设置的。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__selector-tag">sudo</span> <span class="code-snippet__selector-tag">tlp</span> <span class="code-snippet__selector-tag">discharge</span> <span class="code-snippet__selector-attr"></span> </span> </em> # 让电池在交流电源下完全放电。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__selector-tag">sudo</span> <span class="code-snippet__selector-tag">tlp</span> <span class="code-snippet__selector-tag">recalibrate</span> <span class="code-snippet__selector-attr"></span> </span> </em> # 校准电池。</p>
<p><strong>TLP-RDW</strong></p>
<p><span style="color: #0000ff;"><em>sudo tlp-rdw [</em> <span class="code-snippet__built_in">enable</span> | <span class="code-snippet__built_in">disable</span> ] </span> # 启用或关闭无线电管理功能</p>
<p><em><span style="color: #0000ff;">bluetooth [ on | off | toggle ]</span></em><br />
<em><span style="color: #0000ff;">nfc [ on | off | toggle ]</span></em><br />
<em><span style="color: #0000ff;">wifi [ on | off | toggle ]</span></em><br />
<em><span style="color: #0000ff;">wwan [ on | off | toggle ]</span></em></p>
<p>启用、禁用、切换或检查内置蓝牙、NFC、Wi-Fi 和 WWAN(3G/UMTS、4G/LTE 或 5G)无线电的状态,如果不带参数则为当前硬件状态(硬件需要支持 rfkill)。</p>
<p><strong>TLP-STAT</strong></p>
<section><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp-stat </span></em> # 查看TLP配置信息,系统信息和内核省电设置以及电池数据。</section>
<section><em><span style="color: #0000ff;"><span class="code-snippet__selector-tag">sudo</span> <span class="code-snippet__selector-tag">tlp-stat</span> <span class="code-snippet__selector-attr">[-b /--battery]</span> </span> </em> # 查看电池信息,部分电池加-v参数可以查看电压。</section>
<section><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp-stat<span class="code-snippet__meta"> [-c /--config]</span> </span></em> # 查看配置信息。</section>
<section><em><span style="color: #0000ff;"><span class="code-snippet__attribute">sudo</span> tlp-stat --cdiff </span> </em> # 查看默认配置和用户配置之间的差异。</section>
<section><em><span style="color: #0000ff;"><span class="code-snippet__selector-tag">sudo</span> <span class="code-snippet__selector-tag">tlp-stat</span> <span class="code-snippet__selector-attr">[-d /--disk]</span> </span></em> # 查看硬盘配置信息。</section>
<section><em><span style="color: #0000ff;"><span class="code-snippet__selector-tag">sudo</span> <span class="code-snippet__selector-tag">tlp-stat</span> <span class="code-snippet__selector-attr">[-e/ --pcie]</span> </span> </em> # 查看Pcie配置信息。 </section>
<p> </p>
<h2><span data-copy-origin="https://doc.uniontech.com"><strong>配置</strong></span></h2>
<p>TLP 最重要的就是其配置文件,可以说,TLP是否节电的关键。TLP 使用两个根据电源自动应用的设置配置文件:</p>
<ul class="list-paddingleft-1">
<li>以_AC结尾的参数在连接交流电源的时候生效</li>
<li>以_BAT结尾的参数在使用电池的时候有效</li>
<li>既不以 _AC 结尾也不以 _BAT 结尾的参数适用于这两个配置文件</li>
</ul>
<p><strong>1、配置文件</strong></p>
<section>按指定顺序从以下文件中读取设置:</section>
<ul class="list-paddingleft-1">
<li>
<section><em><span style="color: #0000ff;">Intrinsic defaults </span> </em> # 固有默认值(这个配置为TLP自带,不可被更改);</section>
</li>
<li>
<section><em><span style="color: #0000ff;">/etc/tlp.d/*.conf </span></em> # 插入式自定义片段,按词法(字母顺序)顺序读取,不过建议可以使用一般配置命名方法(00_xxxx.conf);</section>
</li>
<li><em><span style="color: #0000ff;">/etc/tlp.d/*.conf </span></em> # 用户配置。</li>
</ul>
<section>如果多个参数相同,但在同一文件中也存在相同的参数,则最后一个匹配项优先,这也意味着,/etc/tlp.conf 中的参数将覆盖其他任何内容,因为它是最后读取的。</section>
<section>默认的 /etc/tlp.conf 中的所有参数都被禁用,删除前导 # 以激活你的更改。</section>
<section>/etc/tlp.d/ 目录中的配置文件由用户创建:</section>
<section>* 文件名必须以 .conf 结尾,否则文件将被忽略;</section>
<section>* 00-template.conf 作为示例提供。</section>
<section></section>
<p><strong>2、参数默认值</strong></p>
<p>配置中有两种参数,一种是具有默认值的,会在本文档中说明,并且在 /etc/tlp.conf 中有 <span class="code-snippet__attribute">Default</span> 前缀。还有一种没有默认值的。</p>
<p><strong>3、参数语法</strong></p>
<p>配置文件由参数和注释行组成。</p>
<p><strong>4、参数行</strong></p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attr">PARAMETER</span>=value</span></em></p>
<p>如果 value 包含空格,则需要使用双引号。</p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attr">key</span>=<span class="code-snippet__string">"111 1111 1111"</span></span></em></p>
<p><strong>5、注释行</strong></p>
<p>以#开头,在 1.6 版本后可以在参数行后接#作为注释。</p>
<p><strong>6、禁用功能</strong></p>
<p>没有默认值:使用注释或者删除即可。</p>
<p>有默认值:赋空值即可 eg:<span class="code-snippet__attr">key</span>=<span class="code-snippet__string">""</span></p>
<p><strong>7、使用</strong>+=<strong>追加配置</strong></p>
<p>和 bash 的环境变量一样,支持使用+=作为追加配置。</p>
<p>使用 root 权限编辑配置文件,在保存更改后可以使用重启,拔插 AC 电源或者使用<span class="code-snippet__attribute">sudo</span> tlp start 命令激活配置。</p>
<h2><span data-copy-origin="https://doc.uniontech.com"><strong>配置详解</strong></span></h2>
<p><strong><span data-copy-origin="https://doc.uniontech.com">1、基础操作</span></strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291630377425_1.png" alt="" width="936" height="605" /></p>
<p><strong>2、音频</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291630461351_2.png" alt="" width="1008" height="303" /></p>
<p><strong>3、电池保养</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291630531515_3.png" alt="" width="1008" height="302" /></p>
<p>这些参数用于设置笔记本电脑主/内部电池(BAT0)和辅助电池(BAT1)的充电阈值。启动充电阈值表示在连接充电器时,电池充电水平低于该值时将开始充电。停止充电阈值表示在充电器连接时,电池充电水平超过该值时将停止充电。这些阈值始终具有较低的可用电池容量,因此默认情况下禁用这些设置,并且必须通过删除前导 # 来显式启用这些设置。</p>
<p><strong>4、光驱</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291635109757_4.png" alt="" width="1008" height="303" /></p>
<p><strong>5、硬盘</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291635428010_5.png" alt="" width="1080" height="1070" /></p>
<p>注释:DISK_IOSCHED 如果使用是NVME设备时,最好使用无 IO 调度程序来减少 CPU 开销(none和noop)。</p>
<p><strong>6、文件系统</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291636283410_6.png" alt="" width="1080" height="278" /></p>
<p><strong>7、图形显卡</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291636375285_7.png" alt="" width="1080" height="646" /></p>
<p>这些参数允许用户调整 Intel GPU 和 AMD GPU 在交流电和电池模式下的性能和电源管理行为。在配置这些参数时,建议参考硬件规格和运行 tlp-<span class="code-snippet__keyword">stat</span> -g 查看可用频率。</p>
<p><strong>8、kernel</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291637168590_8.png" alt="" width="1080" height="185" /></p>
<p>不建议关闭 watchdog,否则可能导致内核崩溃后无法自动重启和内核调试。</p>
<p><strong>9、网络</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291637243632_9.png" alt="" width="1080" height="370" /></p>
<p>这些参数允许用户配置 Wi-Fi 的电源保存模式和控制 Wake-on-LAN(LAN唤醒)功能。</p>
<p><strong>10、平台</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291638073098_10.png" alt="" width="1080" height="287" /></p>
<p><strong>11、处理器</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291638188553_11.png" alt="" width="1080" height="695" /></p>
<p>这些参数允许用户配置 CPU 的性能和功耗特性,包括缩放驱动程序操作模式、调节器、频率范围、能耗/性能策略、P 状态范围、提升功能以及 HWP 动态提升功能。部分电脑的 BIOS 会干预 PState,所以需要检查 CPU 是否支持。</p>
<p><strong>12、无线设备</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291639068591_12.png" alt="" width="1080" height="652" /></p>
<p><span data-docs-delta="[,,,,]" data-copy-origin="https://doc.uniontech.com">这些参数允许用户配置在系统启动、关闭或更改电源状态时如何处理内置的蓝牙、Wi-Fi 和 WWAN 设备。可通过设置禁用或启用这些设备,以及在何种条件下执行这些操作。</span></p>
<p><strong>13、无线配置向导(自动化配置)</strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291639308582_13.png" alt="" width="1080" height="1009" /></p>
<p>这些参数允许用户配置在特定事件触发时如何处理内置的蓝牙、Wi-Fi 和 WWAN 设备。用户可以根据 LAN、Wi-Fi 或 WWAN 的连接状态、对接或取消对接等事件来启用或禁用这些设备。</p>
<p><strong>14、PCIE电源配置 </strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291640035384_14.png" alt="" width="1080" height="825" /></p>
<p><span data-docs-delta="[]" data-copy-origin="https://doc.uniontech.com">这些参数允许用户配置与 PCIe 设备相关的运行时电源管理和 ASPM 等功能。用户可以根据电源来源、设备地址、驱动程序等来调整这些设置,以实现更好的功耗管理。(建议不要对 NVIDIA 驱动进行调整,可能会引发意外)。</span></p>
<p><strong>15、USB </strong></p>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202311291640331297_15.png" alt="" width="1080" height="917" /></p>
<p><strong>16、Trace Mode</strong></p>
<p><em><span style="color: #0000ff;"><span class="code-snippet__attr">TLP_DEBUG</span>=<span class="code-snippet__string">"arg bat disk lock nm path pm ps rf run sysfs udev usb"</span></span></em></p>
<h2><strong>结语</strong></h2>
<section><span data-docs-delta="[]" data-copy-origin="https://doc.uniontech.com">我们对于系统的优化不仅于此,现阶段 TLP 的配置策略仅对于部分有能力的用户公开,后续经过充分的测试和调优之后,会提供几份默认的配置给普通用户使用。并将来将这些配置文件 GUI 化,集成于深度定制项目中,为用户提供更为方便直观的操作体验。</span><span data-docs-delta="[]" data-copy-origin="https://doc.uniontech.com">从这一阶段对于电源优化的探索可以看出,deepin(深度)操作系统的电源管理方案优化不仅是为了解决用户反馈的问题,更是一种对用户需求的回应和尊重。未来,deepin(深度)操作系统将继续秉持用户至上的原则,不断提升系统的性能和用户体验,为广大用户提供更加优秀的开源操作系统产品。</span></section>
<p> </p>
<p style="text-align: right;">内容来源:deepin 社区</p>
<p style="text-align: right;">转载请注明出处</p>
</div>
頁:
[1]