====== FreeBSD - Power-Management ====== ===== FreeBSD 4 ===== ==== APM und ACPI ==== **Die APM- und ACPI-Module schliessen sich gegenseitig aus!** Es kann also entweder das APM-Modul oder das ACPI-Modul geladen werden. Das bedeutet, es kann nur einen geben... === Advanced Power Management (APM) === Im eigenen Kernel muss APM durch einen Eintrag wie folgt aktiviert werden: Intel: device apm0 VIA: (VIA VT82C586B,596,686A and VT8233 SMBus controllers) device viapm Der Standard-Kernel (GENERIC) kennt APM, es muss aber erst aktiviert werden. In der GENERIC-Datei ist der APM-Eintrag deaktiviert (device apm0 at nexus? disable flags 0x20). Das APM wird mit dem Standeard-Kernel (ohne einen eigenen zu bauen) in der Datei "/boot/kernel.conf" mit dem Eintrag: enable apm0 sowie in der Datei "/etc/rc.conf" mit dem Eintrag: apm_enable="YES" aktiviert. Jetzt lässt sich der Rechner mit # /sbin/halt -p ausschalten oder mit # apm -z in den Suspend-Modus versetzen. Siehe "man apm" === Advanced Configuration and Power Interface (ACPI) === * [[http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/acpi-overview.html]] == Konfiguration == Es wird dringend emfohlen, die ACPI-Unterstützung nicht in den Kernel einzukompilieren. (Normalerweise bevorzuge ich immer das einkompilieren!) Also laden wir das Modul "acpi.ko". Das hinzuladen des Modul's im laufenden Betrieb ist gefährlich, da dies sogar manchmal fatale Folgen haben kann. Also laden wir es mit dem Kernel zusammen durch den "loader": # vi /boot/loader.conf.local acpi_load="YES" Alternativ kann man auch bei jedem Rechnerstart im Loader-Menü mit dem Menüpunkt "2" starten, der lädt das ACPI-Modul auch... Aber wer sitzt schon beim Startvorgang IMMER vor der Kiste? ;-) APM sollte abgeschaltet sein, und auch nicht im Kernel mit einkompiliert sein. # vi /etc/rc.conf apm_enable="NO" apmd_enable="NO" Ob das ACPI-Modul geladen ist, findet man mit "dmesg" raus. z.B. so: # dmesg | grep -i acpi Preloaded elf module "/boot/kernel/acpi.ko" at 0xc08791f4. acpi0: on motherboard acpi0: Power Button (fixed) Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1008-0x100b on acpi0 acpi_cpu0: port 0x530-0x537 on acpi0 acpi_tz0: port 0x530-0x537 on acpi0 ... Jetzt funktioniert zum Beispiel "//halt -p//", der Rechner sollte mit diesem Kommando nicht nur runter fahren sondern auch den Strom abschalten. Weitere Einstellungen können, als root, auf der Kommandozeile mit "acpiconf" vorgenommen werden. Dieses Kommando zeigt die vom System unterstützten ACPI-Funktionen an: # sysctl -a | grep hw.acpi. hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.power_button_state: S5 hw.acpi.sleep_button_state: S1 hw.acpi.lid_switch_state: S1 hw.acpi.standby_state: S1 hw.acpi.suspend_state: S3 hw.acpi.sleep_delay: 5 hw.acpi.s4bios: 0 hw.acpi.verbose: 0 hw.acpi.disable_on_poweroff: 1 hw.acpi.reset_video: 1 hw.acpi.cpu.cx_supported: C1/0 C2/90 hw.acpi.cpu.cx_lowest: 0 hw.acpi.cpu.cx_history: 38027/0 0/0 hw.acpi.thermal.min_runtime: 0 hw.acpi.thermal.polling_rate: 30 hw.acpi.thermal.tz0.temperature: 3182 hw.acpi.thermal.tz0.active: -1 hw.acpi.thermal.tz0.thermal_flags: 0 hw.acpi.thermal.tz0._PSV: -1 hw.acpi.thermal.tz0._HOT: -1 hw.acpi.thermal.tz0._CRT: -1 hw.acpi.thermal.tz0._ACx: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 hw.acpi.acline: 1 hw.acpi.battery.life: 98 hw.acpi.battery.time: -1 hw.acpi.battery.state: 0 hw.acpi.battery.units: 1 hw.acpi.battery.info_expire: 5 ===== FreeBSD 9 ===== Möglicherweise funktioniert dieses Vorgehen auch schon bei //FreeBSD 8.2// oder älter... * [[http://wiki.bsdforen.de/howto/cpu_stepping]] * [[http://www.fixmbr.de/freebsd-energie-sparen/]] ==== Taktfrequenz skalieren ==== # sysctl dev.cpu | fgrep freq_levels # sysctl dev.cpu | fgrep cx # sysctl debug.cpufreq ### "-a" -> AC ### "-b" -> Batterie # # mögliche Werte für "-a" und "-b": # minimum - immer auf niedrigste Leistung # adaptive - gleichmäßige Anpassung an die Lastverhältnisse # hiadaptive - schaltet bei Bedarf sehr schnell hoch # maximum - immer auf volle Leistung # # powerd_flags="-a hiadaptive -b adaptive" # Standardeinstellung/Grundeinstellung # powerd_flags="-a adaptive" # powerd_flags="-a maximum -b adaptive -i 85 -r 60 -p 100" # powerd_flags="-a adaptive -b adaptive -i 90 -r 50 -p 100" Beispiel: # echo 'powerd_enable="YES"' >> /etc/rc.conf # echo 'powerd_flags="-a adaptive -b adaptive"' >> /etc/rc.conf # /etc/rc.d/powerd start aber eigentlich reichen schon diese Einstellungen, "powerd_flags" braucht man nicht zu verändern: # echo 'powerd_enable="YES"' >> /etc/rc.conf # /etc/rc.d/powerd start ==== CPU-Temperatur ==== Es gibt die Möglichkeit, den Temperaturfühler auf dem Mainboard zu verwenden, allerdings hat nicht jedes Board einen. Deshalb zeige ich hier, wie man den Temperaturfühler in der CPU nutzen kann. Intel-CPU: # echo 'coretemp_load="YES"' >> /etc/rc.config # kldload coretemp AMD-CPU: # echo 'amdtemp_load="YES"' >> /etc/rc.config # kldload amdtemp CPU-Temperatur anzeigen: # sysctl hw.acpi.thermal | grep temperature ==== Abfragescript ==== #!/bin/sh speed="$(sysctl dev.cpu.0.freq | cut -f2 -d":")" possibles="$(sysctl dev.cpu.0.freq_levels | cut -f2 -d":" | sed "s/\/[-0-9]*/MHz/g")" echo "" echo "aktueller Taktgeschwindigkeit: ${speed}MHz echo "mögliche Werte: ${possibles}" echo "" sysctl hw.acpi.thermal | grep temperature