• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Startskript für SATA LPM : /etc/init.d/boot.local ?

josef-wien

Ultimate Guru
Du solltest in /etc/systemd/system einen systemd service anlegen und aktivieren, der Dein Skript aufruft. Als Muster kannst Du /usr/lib/systemd/system/rc-local.service oder after-local.service verwenden.

Ich würde das mit einer udev-Regel in /etc/udev/rules.d/99-local.rules lösen:
Code:
KERNEL=="host?*", SUBSYSTEM=="scsi_host", ACTION=="add", TEST=="link_power_management_policy", ATTR{link_power_management_policy}="min_power"
Die aktuellen Werte können mit
Code:
find /sys/devices/ -name link_power_management_policy  | while read dateiname ; do grep -H . $dateiname ; done
angezeigt werden. "power/control" ist standardmäßig ohnehin auf "auto" gesetzt.
 
OP
A

Anonymous

Gast
Prima! SATA LPM steht nun auf min_power.

Bei mir liefert desweiteren:
$ find /sys/bus/pci/devices/????\:??\:??.?/power/ -name control | while read dateiname ; do grep -H . $dateiname ; done
Code:
/sys/bus/pci/devices/0000:00:00.0/power/control:on
/sys/bus/pci/devices/0000:00:02.0/power/control:on
/sys/bus/pci/devices/0000:00:03.0/power/control:on
/sys/bus/pci/devices/0000:00:14.0/power/control:on
/sys/bus/pci/devices/0000:00:16.0/power/control:on
/sys/bus/pci/devices/0000:00:19.0/power/control:on
/sys/bus/pci/devices/0000:00:1a.0/power/control:on
/sys/bus/pci/devices/0000:00:1b.0/power/control:on
/sys/bus/pci/devices/0000:00:1c.0/power/control:on
/sys/bus/pci/devices/0000:00:1c.1/power/control:on
/sys/bus/pci/devices/0000:00:1d.0/power/control:on
/sys/bus/pci/devices/0000:00:1f.0/power/control:on
/sys/bus/pci/devices/0000:00:1f.2/power/control:on
/sys/bus/pci/devices/0000:00:1f.3/power/control:on
/sys/bus/pci/devices/0000:02:00.0/power/control:on
Wie wird nun bei /sys/bus/pci/devices eine Änderung auf "auto" gesetzt?

Soll man für diesen Zweck einen systemd service also gar nicht anlegen?
 

spoensche

Moderator
Teammitglied
rolandb schrieb:
Prima! SATA LPM steht nun auf min_power.

Bei mir liefert desweiteren:

Wie wird nun bei /sys/bus/pci/devices eine Änderung auf "auto" gesetzt?

Unter /sys/bus/pci/devices wird nichts auf auto gesetzt. Du findest dort alle PCI Geräte und power/control on bedeutet das die diversen Stromsparmodi verwendet werden.

rolandb schrieb:
Soll man für diesen Zweck einen systemd service also gar nicht anlegen?

Richtig. Powertop per systemd beim Systemstart autom. zu starten bringt nichts. Powertop ist dem Tool top ähnlich (Live Monitoring). Der Unterschied ist, dass Powertop statt Prozesse und deren CPU Nutzung eben die einzelnen ACPI Powerstates überwacht und somit den "Übeltäter" ermitteln kann, der einzelne Geräte unnötigerweise aus dem Schlafzustand weckt.
 
OP
A

Anonymous

Gast
powertop habe ich nur in die Überschriftszeile gesetzt, um die Thematik deutlicher zu machen. powertop selbst kann die gemachten Einstellungen nicht speichern. Daher kam im c't-Forum der Vorschlag mit einem Startskript, welches die Einstellungen quasi "zu Fuß" vornimmt: Einmal für SATA LPM und dann noch für die PCI(e) Devices. Diese Einstellungen wurden von der c't-Redaktion gutgeheißen und gelten vermutlich nur für das Intel DH87RL Mainboard. Die Auswirkungen diverser Einstellungen sind hier z.B. zusehen.
Dieses Skript hat aber rein gar nichts mit powertop zu tun.

josef-wiens Lösung per udev-Regel sieht sehr schön aus, aber leider verstehe ich von udev viel zu wenig, um solche eine (einfache) Regel für PCI(e) und einzelne USB-Geräte selbst zu schreiben.
 

josef-wien

Ultimate Guru
rolandb schrieb:
dann noch für die PCI(e) Devices
Das hat mit dem von Dir beabsichtigten Setzen des Attributs power/control von /sys/devices/pci0000:00/* bzw. /sys/devices/pci0000:00/*/* (Du verwendest die Verknüpfungen /sys/bus/pci/devices/*) für einzelne Geräte nichts zu tun. Es handelt sich hier um die jeweils oberste Hierarchie-Ebene.
 
OP
A

Anonymous

Gast
Am besten zeige ich es mal mit powertop.
Code:
PowerTOP 2.6.1    Overview   Idle stats   Frequency stats   Device stats   Tunables                                     


   Bad           VM writeback timeout
   Bad           Enable Audio codec power management
   Bad           NMI watchdog should be turned off
   Bad           Autosuspend for USB device Mass Storage Device [Generic]
   Bad           Autosuspend for USB device Wireless Keyboard & Mouse [MOSART Semi.]
   Bad           Autosuspend for USB device WinTV HVR-930C [3-12]
   Bad           Autosuspend for unknown USB device 3-13 (8087:07dc)
   Bad           Runtime PM for PCI Device Intel Corporation H87 Express LPC Controller
   Bad           Runtime PM for PCI Device Intel Corporation Wireless 7260
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #1
   Bad           Runtime PM for PCI Device Intel Corporation Ethernet Connection I217-V
   Bad           Runtime PM for PCI Device Intel Corporation 4th Gen Core Processor DRAM Controller
>> Good          Runtime PM for PCI Device Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller 
   Bad           Runtime PM for PCI Device Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #2
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2
   Bad           Wake-on-lan status for device enp0s25
   Good          Enable SATA link power management for host4
   Good          Enable SATA link power management for host0
   Good          Enable SATA link power management for host2
   Good          Enable SATA link power management for host3
   Good          Enable SATA link power management for host1
   Good          Bluetooth device interface status
   Good          Autosuspend for USB device xHCI Host Controller [usb3]
   Good          Autosuspend for USB device xHCI Host Controller [usb4]
   Good          Autosuspend for USB device EHCI Host Controller [usb1]
   Good          Autosuspend for USB device EHCI Host Controller [usb2]
   Good          Autosuspend for USB device Webcam C170 [ ]
   Good          Autosuspend for unknown USB device 1-1 (8087:8008)
   Good          Autosuspend for unknown USB device 2-1 (8087:8000)
   Good          Wake-on-lan status for device wlp2s0


<ESC> Exit | <Enter> Toggle tunable | <r> Window refresh
Ich habe 4th Gen Core Processor HD Audio Controller auf "Good" umgestellt.
Wenn ich anschließend in […] power/control nachsehe, ist ein Wert auf "auto" gesetzt.

$ find /sys/bus/pci/devices/????\:??\:??.?/power/ -name control | while read dateiname ; do grep -H . $dateiname ; done
Code:
/sys/bus/pci/devices/0000:00:00.0/power/control:on
/sys/bus/pci/devices/0000:00:02.0/power/control:on
/sys/bus/pci/devices/0000:00:03.0/power/control:auto
/sys/bus/pci/devices/0000:00:14.0/power/control:on
/sys/bus/pci/devices/0000:00:16.0/power/control:on
/sys/bus/pci/devices/0000:00:19.0/power/control:on
/sys/bus/pci/devices/0000:00:1a.0/power/control:on
/sys/bus/pci/devices/0000:00:1b.0/power/control:on
/sys/bus/pci/devices/0000:00:1c.0/power/control:on
/sys/bus/pci/devices/0000:00:1c.1/power/control:on
/sys/bus/pci/devices/0000:00:1d.0/power/control:on
/sys/bus/pci/devices/0000:00:1f.0/power/control:on
/sys/bus/pci/devices/0000:00:1f.2/power/control:on
/sys/bus/pci/devices/0000:00:1f.3/power/control:on
/sys/bus/pci/devices/0000:02:00.0/power/control:on

Ich bin mir aber nicht sicher, ob es eine gute Idee ist, gar alle PCI- und USB-Geräte auf "auto" zu setzen. Wahrscheinlich schreibe ich mir für jedes Device besser eine separate Regel, die ich nur dann einbaue, wenn das System weiterhin stabil bleibt und die Stromaufnahme im Leerlauf tatsächlich nach etwas unten geht.
Könnte ich bitte nochmal ein Beispiel für so eine explizite udev-Regel bekommen?
Oder besser, wenn's keine Umstände macht, bitte noch ein zweites Beispiel für alle pci-devices auf einmal, so wie ganz oben bei SATA-LPM?
Im Forum lesen noch andere Leute mit, die sich -wie ich auch- über eine so elegante Lösung sehr freuen werden.

lspci -v liefert (für das Beispiel oben):
Code:
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
        Subsystem: Intel Corporation Device 2010
        Flags: bus master, fast devsel, latency 0, IRQ 48
        Memory at f7d34000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [50] Power Management version 2
        Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit-
        Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel
 

josef-wien

Ultimate Guru
Generell:
Code:
ACTION=="add", SUBSYSTEM=="pci", TEST=="power/control", ATTR{power/control}="auto"
Individuell (2 Beispiele):
Code:
ACTION=="add", SUBSYSTEM=="pci", KERNEL=="0000:00:1f.3", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", ATTR{device}=="0x3a30", TEST=="power/control", ATTR{power/control}="auto"
Die zur individuellen Auswahl möglichen Attribute kannst Du jeweils mit
Code:
/sbin/udevadm info -a -p /sys/devices/pci0000:00/0000:00:1f.3
anzeigen (wenn Du -a wegläßt, werden die Umgebungsvariablen aus der udev-Datenbank angezeigt, die mit ENV{PCI_SLOT_NAME}=="0000:00:1f.3" abgefragt werden können). Mit einem Hinweis auf die manpages von udev und udevadm beende ich den Kurz-Unterricht.

Klar ist mir nicht, was auf der höchsten Hierarchie-Ebene eingespart werden könnte, aber ich habe mich schon lange nicht mit dem Thema befaßt. Du kannst dann ja berichten.
 
Oben