歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> 為筆記本電腦用戶配置cpufreqd

為筆記本電腦用戶配置cpufreqd

日期:2017/3/2 10:38:24   编辑:Linux維護

用 notebook 如果不配好 speedstep, 風扇的聲音會很煩, 電池時間當然也會減少 ---- 不過我倒不在意它, 因為基本不用電池.
  


  常用的 speedstep 軟件, 有 cpudyn, cpufreqd, powernowd, 而新版的 kernel 裡面的 cpufreq_ondemand, 也能夠按照系統負荷來調整 cpu 頻率.
  
  那為什麼不直接用 cpufreq_ondemand 呢 ? 舉個例子, 有些網站有些糟糕的 javascript, 會讓 cpu 利用率到 100%, 我可不想為這些網站讓 cpu 跑全速, 我希望cpu 只是跑 gcc/g++/make, 或者加上 bzip2, gzip 等時候, 才跑全速, 其他時候, 涼快一點好. 這就需要 cpufreqd 了, 核心自己, cpudyn 和 powernowd 做不到.
  
  需要使用 speedstep, kernel 配置,
  
  代碼:
  
  1. 提供操作 speedstep 的 api
  例如 speedstep_smi, speedstep_ich, speedstep_centrino 之類的, 核心配置的地方有說明, 根據自己機器的具體情況選擇正確的就好了,
  基本上是
  centrino 當然是 名字都對應的 speedstep_centrino
  圖拉丁 PIII-M 和 P4-M 的機器, 可以用 speedstep-ich 模塊 來訪問 speedstep
  銅礦 PIII 用 speedstep_smi
  
  台式機 P4 也有一個 X86_P4_CLOCKMOD 接口
  
  2. cpufreq governor
  cpu 頻率的控制者
  
  如果 speedstep 那邊已經加載了合適的模塊, 那麼加載 cpufreq_perfermance 這個 gover, 那麼
  cpu 會一直跑高速, 如果加載 cpufreq_powersafe 這個gover, 就會一直跑低速, 如果加載
  cpufreq_ondemand 就讓核心根據 cpu 負荷自動調整, 如果加載 cpufreq_userspace, 那麼用戶
  級代碼可以直接通過 /sys/devices/system/cpu/cpu0/cpufreq 來控制頻率.
  
  cpudyn, cpufreqd, powernowd 他們除了需要有合適的 speedstep 接口, 相關的 gover, 還需要
  /proc 或者 /sys 裡面的用戶級代碼和核心代碼的通信接口, 每個軟件需要的不太一樣,我懶得細細
  檢查, 編譯核心的時候將每個接口選了, 包括這三個過時接口 /proc/cpufreq, /proc/sys/cpu/
  /proc/acpi/processor/../performance, 反正這也不會增大多少開銷.
  
  cpufreqd 不會自動 load module, 所以, 用到的 cpufreq_gov, 就是 cpufreq_performance,
  cpufreq_powersave, cpufreq_ondemand 那幾個, 要麼編譯到內核裡, 要麼在 modules 中進行
  裝載.
  
  我是讓 cpufreqd 使用 acpi 而不是 apm 來工作的, 因此, 系統必須安裝 acpid
  
  我的 /etc/modules 如下
  
  代碼:
  
  speedstep-ich
  cpufreq_powersave
  cpufreq_performance
  
  我的 cpufreqd.conf 是為編譯提供高速 cpu, 其他時候低速的, 如下
  
  代碼:
  
  # 這裡省略掉了 profile 的定義, 用回缺省的就好.
  
  [General]
  pidfile=/var/run/cpufreqd.pid
  poll_interval=4
  pm_type=acpi #(acpi, apm or pmu)
  # Uncomment the following line to enable ACPI workaround (see cpufreqd.conf(5))
  # acpi_workaround=1
  verbosity=4 #(if you want a minimal logging set to 5)
  
  #非編譯 ac
  [Rule]
  name=not_important
  ac=on # (on/off)
  battery_interval=0-100
  cpu_interval=0-100
  profile=lo_power
  
  
  #非編譯 電池
  [Rule]
  name=not_important_bat
  ac=off # (on/off)
  battery_interval=0-100
  cpu_interval=0-100
  profile=lo_power
  
  
  #這兩個, 即使 programs 沒有匹配, 也會得到 14 分, 因此放在後面, 使得program不匹配的時候, 上面兩個同分, 使用上面兩個
  #gcc 編譯, ac
  [Rule]
  name=important
  ac=on # (on/off)
  battery_interval=0-100
  programs=cc1,cc1plus,make
  cpu_interval=80-100
  profile=hi_boost
  
  #gcc 編譯, 電池
  [Rule]
  name=important_bat
  ac=off # (on/off)
  battery_interval=0-100
  programs=cc1,cc1plus,make
  cpu_interval=80-100
  profile=hi_boost
  
  然後 killall -SIGHUP cpufreqd, cpufreqd 就能夠正常工作了, 這樣靈活的配置, windows 下面好象也只有 ibm/sony/toshiba 三家的程序可以做到http://sourceforge.net/projects/bioswriter/
  在LINUX讀寫BOIS的工具'

Copyright © Linux教程網 All Rights Reserved