You are not logged in.

#1 2014-04-28 06:17:47

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Indicator-powersave & throttle

Thanks to some very useful advice here in the thread and a lot of time on google, this is shaping up into something worthwhile!

indicator-powersave is a fork of indicator-cpufreq with additional toggles for system-wide powersaving. It is not a detailed reporting tool like powertop (see throttle check), but enables more comprehensive powersaving than powertop checks for. It is not as multi-purpose as tlp but should be as effective for anything other than a Thinkpad.

The frontend is an indicator:
indicator_powersave.jpg

The backend is a bash script: /usr/bin/throttle

#!/bin/bash
# throttle - user discrection power management utility

while (( "$#" )); do
  #Find the number of physical cores (for hyperthreading control)
  CORES="$(grep "^core id" /proc/cpuinfo | sort -u | wc -l)"
  case "$1" in
    full|performance|cut|powersave)
      case "${1}" in
        full|performance)
          HYPERTHREADS="1"
          GOVERNOR="performance"
          XPSTURBO="0"
          ENERGYPERF="0"
          BACKLIGHT="2" # Higher?
          LAPTOP="0"
          DIRTYWBC="500"
          NMIDOG="0" # Always off
          POLICY="max_performance"
          APM="255"
          AAM="254"
          CONTROL="on"
          AUTOSUSPEND="-1"
          POWERSAVE="0"
          CONTROLLER="N"
          WLPOWERSAVE="off"
          WOLA="g"
          WOLB="enabled"
          LEDBRIGHT="255"
          NVPM="1"
        ;;
        cut|powersave)
          HYPERTHREADS="0"
          GOVERNOR="powersave"
          XPSTURBO="1" 
          ENERGYPERF="15"
          BACKLIGHT="0"
          LAPTOP="5"
          DIRTYWBC="1500"
          NMIDOG="0"
          POLICY="min_power"
          APM="1"
          AAM="128"
          CONTROL="auto"
          AUTOSUSPEND="1"
          POWERSAVE="1"
          CONTROLLER="Y"
          WLPOWERSAVE="on"
          WOLA="d"
          WOLB="disabled"
          LEDBRIGHT="0"
          NVPM="0"
        ;;
      esac

      # Hyperthreads
      for i in /sys/devices/system/cpu/cpu*/online; do  [[ -f "${i}" ]] && \
      [[ "$(printf "${i}" | tr -cd [:digit:])" -ge "${CORES}" ]] && \
        printf "${HYPERTHREADS}" > "${i}" & done &

      # CPU Governor
      for i in /sys/bus/cpu/drivers/processor/cpu*/cpufreq/scaling_governor; do [[ -f "${i}" ]] && \
      [[ "${HYPERTHREADS}" == "0" && \
      "$(printf "${i}" | tr -cd [:digit:])" -ge "${CORES}" ]] && \
        continue ; printf "${GOVERNOR}" > "${i}" & done &

      # Disable Intel P-State Turbo
      [[ -f /sys/devices/system/cpu/intel_pstate/no_turbo ]] && \
        printf "${XPSTURBO}" > /sys/devices/system/cpu/intel_pstate/no_turbo &

      # ENERGY_PERF_BIAS
      [[ -n "$(command -v x86_energy_perf_policy)" ]] && \
        x86_energy_perf_policy "${ENERGYPERF}" &

      # Backlight
      for i in /sys/class/backlight/acpi_video*/brightness; do [[ -f "${i}" ]] && \
        printf $BACKLIGHT > "${i}" & done &

      # Virtual Memory (Swap)
      printf "${LAPTOP}" > /proc/sys/vm/laptop_mode &
      printf "${DIRTYWBC}" > /proc/sys/vm/dirty_writeback_centisecs &
      printf "${DIRTYWBC}" > /proc/sys/vm/dirty_expire_centisecs &

      # NMI watchdog
      [[ -f /proc/sys/kernel/watchdog ]] && \
        printf "${NMIDOG}" > /proc/sys/kernel/watchdog &

      # SATA link power management
      for i in /sys/class/scsi_host/host*/link_power_management_policy; do [[ -f "${i}" ]] && \
        printf "${POLICY}" > "${i}" & done &

      # Hard drives
      [[ -n "$(command -v hdparm)" ]] && \
        hdparm -qB "${APM}" -qM "${AAM}" /dev/[hs]d[a-z] 2> /dev/null &

      # Runtime power management for devices (with exceptions for devices by VID:PID)
      for i in /sys/{class/*,bus/*/devices}/*/power/control; do [[ -f "${i}" ]]  && \
      [[ "${CONTROL}" == "auto" && \
      -n "$(ls "$(printf "${i}" | sed 's|power.*||g')"/*/ | grep "046D:C52B")" || \
      -n "$(ls "$(printf "${i}" | sed 's|power.*||g')"/*/ | grep "054C:0268")" || \
      -f "$(printf "${i}" | sed 's|/power.*|/id|g')"* && \
      "$(cat "$(printf "${i}" | sed 's|/power.*|/idVendor|g')")" == "0424" && \
      "$(cat "$(printf "${i}" | sed 's|/power.*|/idProduct|g')")" == "a700" ]] && \
        continue ; \
      [[ "${HYPERTHREADS}" == "0" && \
      -n "$(printf "${i}" | grep machinecheck)" && \
      "$(printf "${i}" | tr -cd [:digit:])" -ge "${CORES}" ]] && \
        continue ; printf "${CONTROL}" > "${i}" & done &

      # USB Autosuspend (with exceptions for devices by VID:PID)
      for i in /sys/bus/usb/devices/*/power/autosuspend{,_delay_ms}; do [[ -f "${i}" ]] && \
      [[ "${AUTOSUSPEND}" == "1" && \
      -n "$(ls "$(printf "${i}" | sed 's|power.*||g')"/*/ | grep "046D:C52B")" || \
      -n "$(ls "$(printf "${i}" | sed 's|power.*||g')"/*/ | grep "054C:0268")" || \
      -f "$(printf "${i}" | sed 's|/power.*|/id|g')"* && \
      "$(cat "$(printf "${i}" | sed 's|/power.*|/idVendor|g')")" == "0424" && \
      "$(cat "$(printf "${i}" | sed 's|/power.*|/idProduct|g')")" == "a700" ]] && \
        continue ; printf -- "${AUTOSUSPEND}" > "${i}" & done &

      # Powersaving for modules
      for i in /sys/module/*/parameters/power_save; do \
        printf "${POWERSAVE}" > "${i}" & done &
      for i in /sys/module/*/parameters/power_save_controller; do \
        printf "${CONTROLLER}" > "${i}" & done &

      # Network powersaving
      for i in /sys/class/net/wl*; do [[ -d "${i}" ]] && \
        [[ -n "$(command -v iw)" ]] && \
          iw dev "$(printf "${i}" | sed 's/^.*wl/wl/')" set power_save "${WLPOWERSAVE}" 2> /dev/null & done &
      for i in /sys/class/net/e*; do [[ -d "${i}" ]] && \
        [[ -n "$(command -v ethtool)" ]] && \
          ethtool -s "$(printf "${i}" | sed 's/^.*e/e/')" wol "${WOLA}" 2> /dev/null & done &
      for i in /sys/class/net/*/device/power/wakeup; do [[ -f "${i}" ]] && \
        printf "${WOLB}" > "${i}" & done &

      # LEDs
      for i in /sys/class/leds/*/brightness; do [[ -f "${i}" ]] && \
        printf "${LEDBRIGHT}" > "${i}" & done &

      # Nvidia PowerMizer
      [[ -n "$(command -v nvidia-settings)" ]] && \
        DISPLAY=":0.0" nvidia-settings -a [gpu:0]/GPUPowerMizerMode="${NVPM}" > /dev/null &

      wait # Hey, let's stop! :) *stops* ... YAY! =D
      shift
      unset GOVERNOR XPSTURBO HYPERTHREADS ENERGYPERF BACKLIGHT LAPTOP DIRTYWBC NMIDOG \
            POLICY APM AAM CONTROL AUTOSUSPEND POWERSAVE CONTROLLER \
            WLPOWERSAVE WOLA WOLB LEDBRIGHT NVPM
    ;;
    ht*)
      case "${1}" in \
        ht-on) HYPERTHREADS="1" ;; \
        ht-off) HYPERTHREADS="0" ;; esac
      [[ -z "${HYPERTHREADS}" ]] && \
        case "${2}" in \
          on|performance) HYPERTHREADS="1";  SHIFT="2" ;; \
          off|powersave) HYPERTHREADS="0"; SHIFT="2" ;; esac
      [[ -z "${HYPERTHREADS}" ]] && \
        printf "${0} ht {on,off} - Hyperthreads\n" || \
      for i in /sys/devices/system/cpu/cpu*/online; do  [[ -f "${i}" ]] && \
        [[ "$(printf "${i}" | tr -cd [:digit:])" -ge "${CORES}" ]] && \
          printf "${HYPERTHREADS}" > "${i}" & done &
      [[ -n "${SHIFT}" ]] && shift "${SHIFT}" || shift
      wait
      unset HYPERTHREADS SHIFT
    ;;
    gov*)
      case "${1}" in \
        gov-full) GOVERNOR="performance" ;; \
        gov-cut) GOVERNOR="powersave" ;; esac
      [[ -z "${GOVERNOR}" ]] && \
        case "${2}" in \
          full|performance) GOVERNOR="performance"; SHIFT="2" ;; \
          cut|powersave) GOVERNOR="powersave"; SHIFT="2" ;; esac
      [[ -z "${GOVERNOR}" ]] && \
        printf "${0} gov {cut,full} - CPU Governor\n" || \
      for i in /sys/bus/cpu/drivers/processor/cpu*/cpufreq/scaling_governor; do [[ -f "${i}" ]] && \
        printf "${GOVERNOR}" > "${i}" & done &
      [[ -n "${SHIFT}" ]] && shift "${SHIFT}" || shift
      wait
      unset GOVERNOR SHIFT
    ;;
    turbo*)
      case "${1}" in \
        turbo-on) XPSTURBO="0" ;; \
        turbo-off) XPSTURBO="1" ;; esac
      [[ -z "${XPSTURBO}" ]] && \
        case "${2}" in \
          on|performance) XPSTURBO="0"; SHIFT="2" ;; \
          off|powersave) XPSTURBO="1"; SHIFT="2" ;; esac
      [[ -z "${XPSTURBO}" ]] && \
        printf "${0} turbo {on,off} - Intel P-State Turbo\n" || \
      [[ -f /sys/devices/system/cpu/intel_pstate/no_turbo ]] && \
        printf "${XPSTURBO}" > /sys/devices/system/cpu/intel_pstate/no_turbo &
      [[ -n "${SHIFT}" ]] && shift "${SHIFT}" || shift
      wait
      unset XPSTURBO SHIFT
    ;;
    backlight)
      case "${2}" in \
       0|powersave) BACKLIGHT="0"; SHIFT="2" ;; \
       1) BACKLIGHT="1"; SHIFT="2" ;; \
       2|performance) BACKLIGHT="2"; SHIFT="2" ;; esac
      [[ -z "${BACKLIGHT}" ]] && \
        printf "${0} backlight {0,1,2} - Backlight brightness\n" || \
        for i in /sys/class/backlight/acpi_video*/brightness; do [[ -f "${i}" ]] && \
          printf "${BACKLIGHT}" > "${i}" & done &
      [[ -n "${SHIFT}" ]] && shift "${SHIFT}" || shift
      wait
      unset BACKLIGHT SHIFT
    ;;
    gpu*)
      case "${1}" in \
        gpu-full) NVPM="1" ;; \
        gpu-cut) NVPM="0" ;; esac
      [[ -z "${NVPM}" ]] && \
        case "${2}" in \
          full|performance) NVPM="1"; SHIFT="2" ;; \
          cut|powersave) NVPM="0"; SHIFT="2" ;; esac
      [[ -z "${NVPM}" ]] && \
        printf "${0} gpu {cut,full} - GPU runtime powersaving (only Nvidia ATM)\n" || \
      [[ -z "$(command -v nvidia-settings)" ]] && \
        printf "nvidia-settings not found; only nvidia currently supported" || \
      DISPLAY=":0.0" nvidia-settings -a [gpu:0]/GPUPowerMizerMode="${NVPM}" > /dev/null &
      [[ -n "${SHIFT}" ]] && shift "${SHIFT}" || shift
      wait
      unset NVPM SHIFT
    ;;
    check)
      printf "\nHyperthreads\n/sys/devices/system/cpu/cpu*/online\n"
      for i in /sys/devices/system/cpu/cpu*/online; do [[ -f "${i}" ]] && \
        [[ $(printf "${i}" | tr -cd [:digit:]) -ge "$CORES" ]] && \
          printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/devices/system/cpu/||g; s|/.*||g; N;s|\n|\t|'

      printf "\nCPU Governor\n/sys/bus/cpu/drivers/processor/cpu*/cpufreq/scaling_governor\n"
      for i in /sys/bus/cpu/drivers/processor/cpu*/cpufreq/scaling_governor; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/bus/cpu/drivers/processor/||g; s|/.*||g; N;s|\n|\t|'

      [[ -f /sys/devices/system/cpu/intel_pstate/no_turbo ]] && \
        echo -e "\nDisable Intel P-State Turbo\n/sys/devices/system/cpu/intel_pstate/\n"\
                "no_turbo\t$(cat /sys/devices/system/cpu/intel_pstate/no_turbo)"

      [[ -n "$(command -v x86_energy_perf_policy)" ]] && \
        printf "\nEnergy Perf Bias\n" && \
        x86_energy_perf_policy -r #SUID

      printf "\nBacklight\n/sys/class/backlight/\n"
      for i in /sys/class/backlight/acpi_video*/brightness; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/class/backlight/||g; s|/.*||g; N;s|\n|\t|'

      echo -e "\nVirtual Memory (Swap)\n/proc/sys/vm/\n"\
              "laptop_mode\t\t\t$(cat /proc/sys/vm/laptop_mode)\n"\
              "dirty_writeback_centisecs\t$(cat /proc/sys/vm/dirty_writeback_centisecs)\n"\
              "dirty_expire_centisecs\t\t$(cat /proc/sys/vm/dirty_expire_centisecs)"

      [[ -f /proc/sys/kernel/watchdog ]] && \
        echo -e "\nNMI watchdog\n"\
                "/proc/sys/kernel/watchdog\t$(cat /proc/sys/kernel/watchdog)"

      printf "\nSATA link power management\n/sys/class/scsi_host/host*/link_power_management_policy\n"
      for i in /sys/class/scsi_host/host*/link_power_management_policy; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/class/scsi_host/||g; s|/.*||g; N;s|\n|\t|'

      [[ -n "$(command -v hdparm)" ]] && \
        printf "\nHard drives\n/dev/[hs]d[a-z]\n" && \
        hdparm -B -M /dev/[hs]d[a-z] 2> /dev/null | sed 'N;s|\n||g; s|/dev/||g; s|\t| |g;' #SUID

      printf "\nRuntime power management\n/sys/{class,bus}/*/{*,devices/*}/power/control\n"
      for i in /sys/{class,bus}/*/{*,devices/*}/power/control; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/class/||g; s|/sys/bus/||g; s|/devices||g; s|/power/control||g; N;s|\n|\t|'

      printf "\nUSB Autosuspend\n/sys/bus/usb/devices/*/power/autosuspend{,_delay_ms}\n"
      for i in /sys/bus/usb/devices/*/power/autosuspend{,_delay_ms}; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/bus/usb/devices/||g; s|/.*||g; N;s|\n|\t|'

      printf "\nPower saving for modules\n/sys/module/*/parameters/power_save{,_controller}\n"
      for i in /sys/module/*/parameters/power_save{,_controller}; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/module/||g; s|/parameters/.*||g; s|/.*||g; N;s|\n|\t|'

      printf "\nNetwork device powersaving\n/sys/class/net/{wl*,e*,*/device/power/wakeup}\n";
      [[ -n "$(command -v iw)" ]] && \
        for i in /sys/class/net/wl*; do [[ -d "${i}" ]] && \
        printf " ${i}\n$(iw dev $(printf ${i} | sed 's/^.*wl/wl/') get power_save)"; done | sed 's|^\t|  |g;s|/sys/class/net/||g; s|/.*||g'
      [[ -n "$(command -v ethtool)" ]] && \
        for i in /sys/class/net/e*; do [[ -d "${i}" ]] && \
        printf " ${i}\n$(ethtool $(printf ${i} | sed 's/^.*e/e/') | grep Wake-on)"; done | sed 's|^\t|  |g;s|/sys/class/net/||g; s|/.*||g'
      for i in /sys/class/net/*/device/power/wakeup; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/class/net/||g; s|/device/power/wakeup||g; s|/.*||g; N;s|\n|\t|'

      printf "\nLEDs\n/sys/class/leds/*/brightness\n"
      for i in /sys/class/leds/*/brightness; do [[ -f "${i}" ]] && \
        printf " ${i}\n$(cat ${i})\n"; done | sed 's|/sys/class/leds/||g; s|/brightness||g; s|/.*||g; N;s|\n|\t|'

      [[ -n "$(command -v nvidia-settings)" ]] && \
        printf "\nNvidia PowerMizer\n " && \
        DISPLAY=":0.0" nvidia-settings -q [gpu:0]/GPUPowerMizerMode | grep "Attribute" | sed 's|.*\[||g;s|\]):||g;s| |\t|g;s|\.$||g'
      shift
    ;;
    *|help)
      [[ ! "${1}" == "help" ]] && \
        printf "Invalid input: ${@}\n"
      echo -e "\nRuntime power management:\n"\
              "${0} {cut,full} - system-wide runtime powersaving\n"\
              "${0} check - inspect runtime powersaving\n"\
              "\nExtras:\n" \
              "${0} gov {cut,full} - CPU Governor\n"\
              "${0} turbo {on,off} - Intel P-State Turbo\n"\
              "${0} ht {on,off} - Hyperthreads\n"\
              "${0} backlight {0,1,2} -backlight brightness\n" \
              "${0} gpu {cut,full} - GPU runtime powersaving (only Nvidia ATM)\n"\
              "\nOptions can take {performace,powersave} and are stackable:\n"\
              "\n${0} powersave gov full turbo on gpu full ht on check"
      exit
    ;;
  esac
done

Some external tools are needed for ENERGY_PERF_BIAS (x86_energy_perf_policy), HDD (hdparm), LAN (ethtool), WLAN (iw), and GPU (nvidia-settings) toggles, which will be skipped if they are not installed. Settings that cannot be done on-the-fly and on/off only switches (bluetooth) are intentionally omitted. Settings for proprietary and OEM device drivers are being added as needed (any reccomendations for AMD, ATI, ARM, etc?).

There is also a systemd service: /etc/systemd/system/throttle-cut.service

[Unit]
Description=Throttle Cut

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/bash "/usr/local/sbin/throttle cut"
StandardOutput=null
StandardError=journal

[Install]
WantedBy=multi-user.target

Make exceptions before enabling this service if your hardware does not function properly with powersaving.

Bonus UDEV rules: /etc/udev/rules.d/runtime-pm.rules

### Throttle - Runtime management udev rules.
## Whitelisted Actions
ACTION!="add", GOTO="runtime_pm_rules_end"

## Blacklisted Devices (USB Keyboard/Mouse, etc.)
# Logitec Unifying Reciever (occasionally disabled ?)
ATTR{idVendor}=="046d", ATTR{idProduct}=="c52b", GOTO="runtime_pm_rules_end"
# Standard Microsystems Corp. 2 Port Hub (doesn't charge with runtime pm ?)
ATTR{idVendor}=="0424", ATTR{idProduct}=="a700", GOTO="runtime_pm_rules_end"
# Sixaxis/Dualshock 3 (disconnect or charge too slowly with runtime pm ?)
ATTR{idVendor}=="054c", ATTR{idProduct}=="0268", GOTO="runtime_pm_rules_end"

# Asynchronous power transitions
SUBSYSTEMS=="*" ATTR{power/async}=="disabled", ATTR{power/async}="enabled"

# Backlight
SUBSYSTEM=="backlight", TEST=="brightness", ATTR{brightness}="0"

# Hard disk power saving
SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"
KERNEL=="[hs]d[a-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 1 -M 128 /dev/%k"

# Various subsystems runtime power management
SUBSYSTEMS=="*", ATTR{power/control}=="on", ATTR{power/control}="auto"

# USB autosuspend devices after 1 sec (may disable some old devices!)
SUBSYSTEM=="usb", TEST=="power/autosuspend", ATTR{power/autosuspend}="1"
SUBSYSTEM=="usb", TEST=="power/autosuspend_delay_ms", ATTR{power/autosuspend_delay_ms}="1"

# Various subsystems power saving
SUBSYSTEMS=="*", TEST=="parameters/power_save", ATTR{parameters/power_save}="1"
SUBSYSTEMS=="*", ATTR{parameters/power_save_controller}=="N", ATTR{parameters/power_save_controller}="Y"

# Universally enable D3 Cold
DRIVER=="*", ATTR{d3cold_allowed}=="0", ATTR{d3cold_allowed}="1"

# Network Powersaving
SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev %k set power_save on"
SUBSYSTEM=="net", KERNEL=="e*", RUN+="/usr/sbin/ethtool -s %k wol d"
SUBSYSTEM=="net", TEST=="device/power/wakeup", ATTR{device/power/wakeup}="disabled"

# Reduce LED Brightness
SUBSYSTEM=="leds", TEST=="brightness", ATTR{brightness}="0"

# Exit
LABEL="runtime_pm_rules_end"

For maximum effectivenes, udev can apply these settings at boot and for all newly connected devices. I'm not quite satisfied with these rules, so they aren't currently packaged with indicator-powersave.

::UPDATES::

  • Backlight support (laptops only?) in both throttle and udev rules.

  • New udev rule: asynchronous power transitions. This may reduce peak voltage.

  • Someone already got the package in AUR4, but I need to get some updates in.

  • Fixed some errors from looking for settings that vanish while turning off hyperthreads.

::Notes::

  • Indicator-powersave's "GPU Throttle" menu still, mysteriously, does not work.

Last edited by quequotion (2015-09-07 00:31:08)

Offline

#2 2014-04-28 06:41:38

ooo
Member
Registered: 2013-04-10
Posts: 1,019

Re: Indicator-powersave & throttle

you can use udev rules, sysctl.d, tmpfiles.d and/or modprobe.d to enable all of those settings. Then you wouldn't need to write any additional systemd services.
Then use a script if you need to disable some of the settings to maximize performance when needed.
or you can write systemd service that simply runs the powersaving script.

Heres what I have in /etc/udev/rules.d/powersave.rules, I think it applies most of the settings you have on the script and some extra:

# wireless powersaving
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*", RUN+="/usr/bin/iw dev %k set power_save on"

# SATA active link power management
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"

# various subsystems
ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="i2c", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="spi", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"

# disable autosuspend for wireless keyboard/mouse
#ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="24ae", ATTR{idProduct}=="2000", TEST=="power/control", ATTR{power/control}="on"
# autosuspend wireless keyboard mouse after 10min
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="24ae", ATTR{idProduct}=="2000", TEST=="power/autosuspend", ATTR{power/autosuspend}="600"

# enable some power saving sattings only on battery via script
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/local/bin/powersave on"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/local/bin/powersave off"

you can disable nmi watchdog via sysctl or kernel command line, and enable audio power saving either via tmpfiles or modprobe options.
It may also be a good idea to blacklist every module for devices you don't need and could draw power. Also try to enable every possible power saving option for your gfx card.

There are also some additional power saving possibilities for your HD, although they may not be best suited for desktop hard drives.

Last edited by ooo (2014-04-28 06:55:32)

Offline

#3 2014-04-28 07:10:38

Head_on_a_Stick
Member
From: Asteroid B-612
Registered: 2014-02-20
Posts: 3,767
Website

Re: Indicator-powersave & throttle

Have you seen powertop?
I think it does most of the things you have scripted & can be enabled as a systemd .service, as outlined in  the link... wink


_0_
__0
000

Offline

#4 2014-04-28 07:12:27

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

ooo wrote:

you can use udev rules, sysctl.d, tmpfiles.d and/or modprobe.d to enable all of those settings. Then you wouldn't need to write any additional systemd services.

Thanks! This will be best for making sure the system starts up in low power mode (udev rules probably take effect earlier than my systemd service would). Still need to work on a way to toggle all of them on and off. Something like "systemctl start/stop runtime-pm"... Maybe I can have it toggle the powersave mode through udev?

Then use a script if you need to disable some of the settings to maximize performance when needed.
or you can write systemd service that simply runs the powersaving script.

This may be what I'm looking for.

you can disable nmi watchdog via sysctl or kernel command line

These days I compile the kernel without watchdog support, but a good idea no less.

There are also some additional power saving possibilities for your HD, although they may not be best suited for desktop hard drives.

I have four SATA II drives in a 2TB RAID:0 array... if they have powersaving options I'll give them a shot.

Also, PowerTOP HTML report:

<!DOCTYPE html>
<html lang='en'>
<head>
<title>PowerTOP report</title>
<meta http-equiv='content-type' content='text/html;charset=utf-8'>

<script type='text/javascript'>

var powertop = {
 blocks: {
  summary: 'Summary',
  cpuidle: 'CPU Idle',
  cpufreq: 'CPU Frequency',
  software: 'Software Info',
  devinfo: 'Device Info',
  tuning: 'Tuning',
  ahci: 'AHCI'
 },
 cadd: function(idx, c){
   var el = document.getElementById(idx);
   if (el) {
      var cn = el.className;
      if (cn.indexOf(c) != -1)
         return;
      cn += ' ' + c;
      el.className = cn;
   }
 },
 crm: function(id, c){
   var el = document.getElementById(id);
   if (el) {
      var cn = el.className
      while (cn.indexOf(' ' + c) != -1)
         cn = cn.replace(' ' + c,'');
      el.className = cn;
   }
 },
 newbutton: function(id, txt) {
  var x = document.createElement('div');
  x.id = id + '_button';
  x.className = 'nav_button';
  x.textContent = txt;
  x.innerText = txt;
  x.onclick = function() { powertop.toggle(id); };
  return x;
 },
 setupbuttons: function() {
   var t = document.getElementById('main_menu');
   if (t) {
     for (var b in powertop.blocks) {
       t.appendChild(powertop.newbutton(b, powertop.blocks[b]));
     }
    t.appendChild(powertop.newbutton('all', 'All'));
   }
 },
 toggle: function(b) {
   powertop.baseall();
   if (b == 'all') {
      for (var c in powertop.blocks) {
        powertop.crm(c, 'hide');
      }
   } else {
      powertop.crm(b, 'hide');
   }
   powertop.cadd(b + '_button', 'pressed');
 },
 baseall: function() {
   for (var b in powertop.blocks) {
     powertop.cadd(b, 'hide');
     powertop.crm(b + '_button', 'pressed');
   }
   powertop.cadd('all', 'hide');
   powertop.crm('all_button', 'pressed');
 },
 onload: function() {
   powertop.setupbuttons();
   powertop.toggle('summary');
 }
}
</script>

<style type='text/css'>
/* General CSS */
*{
	margin:0px;
	padding:0px;
}

body {
	background-color: #eee; /* Background color */
	color: #222;            /* Font color */
	font-family: Helvetica;
	font-size: 14px;
}

#main_container{
	width: 960px;
	margin: 2px auto;
}

/* Top logo & system table css */
#main_header{
	min-width: 960px;
	display:block;
}

img.pwtop_logo{
	float:left;
	height:40%;
	width: 40%;
	padding:20px;
}

.sys_info
{
	float: left;
	height:116px;
	width:450px;
	font-size: 12px;
	display: inline;
	position relative;
	text-align: left;
}

th{
	text-align: left;
}

/* CSS Main Content */

.content_title
{
	color: #296629;
	padding:0px;
	margin:2px;
}

#chart_div{
	float: left;
}

.small
{
	font-size: 10px;
}

table.emphasis2
{
	font-size: 13px;
	max-width:95%;
}


th.emph_title {
	padding:5px;
}

tr.emph1:nth-child(odd) {
	background: #ffffff;
}

tr.emph1:nth-child(even) {
	background: #ebebeb;
}

tr.tune:nth-child(odd) {
	background: #fffcfc;
}
tr.tune:nth-child(even) {
	background: #fff0f0;
}

td.no_wrap:first-child {
	white-space:nowrap;
}

.side_by_side_left{
	float:left;
}
.side_by_side_right{
	float:right;
}

#device{
	display: inline-block;
}
.clear_block{
	clear:both;
}

td.package{
	background-color: #e0ddfa; /*purple*/
}

td.core{
	background-color: #d1ddff; /*ccebff; /*blue*/
}

td.cpu{
	background-color: #ffffeb; /* yellow */
}

th.title{
	text-align: center;
	/*border-bottom: 1px solid #666;*/
}


li.summary_list
{
	display: inline;
	padding: 5px;
	background-color: #f6f6f9;
	font-size: 12px;
}



/* main menu css*/
#main_menu {
	display: inline-block;
	font-weight: bold;
	padding: 5px 0;
	text-align: center;
	background-image: -webkit-gradient(linear, left top, left bottom,
		from(#aaa), to(#eee));
	background: -moz-linear-gradient(top,  #aaa,  #eee);
}


#main_menu div {
	font-size: 12px;
	font-weight: bold;
	color: white;
}

#main_menu div.nav_button {
	margin: 0 0.2em;
	display: inline;
	cursor: pointer;
	color: #223232;
	font-size: 13px;
	font-weight: bold;
	padding: 5px;
	text-align: center;
	text-decoration: none;
}

div.pressed {
	border: -webkit-gradient(linear, left top, left bottom,
		from(#b2ffb2), to(#e0ffe0));
	border-width:0px 8px 0px 8px;
	background: #999;
	background-image: -webkit-gradient(linear, left top, left bottom,
		from(#b2ffb2), to(#e0ffe0));
	background: -moz-linear-gradient(top,  #b2ffb2,  #e0ffe0);
}

div.hide {
	display: none;
}
</style>
</head>

<body onload='powertop.onload();'>
<div id="main_container">
<header id="main_header">
<img alt="PowerTop" class="pwtop_logo" src="./PowerTop.png"><div class="sys_info">
<h2 class="content_title"> System Information </h2>
<table class="emphasis1">
<tr> <th class="table_sysinfo"> PowerTOP Version </th> <td > v2.6 </td> </tr>
<tr> <th class="table_sysinfo"> Kernel Version </th> <td > Linux version 3.13.6-2-ck </td> </tr>
<tr> <th class="table_sysinfo"> System Name </th> <td > ASRockZ68 Extreme4 Gen3To Be Filled By O.E.M. </td> </tr>
<tr> <th class="table_sysinfo"> CPU Information </th> <td >  Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz </td> </tr>
<tr> <th class="table_sysinfo"> OS Information </th> <td > Arch Linux </td> </tr>
</table>
</div>
</header>

<br/><div id="main_menu"> </div>
<div><br/> <ul>
<li class="summary_list"> <b> Target: </b> 1 units/s </li><li class="summary_list"> <b> System:  </b> 845.8 wakeup/s </li><li class="summary_list"> <b> CPU:  </b> 37.8% usage </li><li class="summary_list"> <b> GPU: </b> 0 ops/s </li><li class="summary_list"> <b> GFX: </b> 226.6 wakeups/s </li><li class="summary_list"> <b> VFS: </b> 0 ops/s </li></ul> </div> <br />
<div id="summary">
<h2 class="content_title"> Top 10 Power Consumers </h2>
<table class="emphasis2">
<tr class="emph1"> <th class="emph_title"> Usage </th> <th class="emph_title"> Events/s </th> <th class="emph_title"> Category </th> <th class="emph_title"> Description </th> </tr>
<tr class="emph1"> <td >  33.4% </td> <td > 332.5 </td> <td > Process </td> <td > /usr/bin/vlc --started-from-file  </td> </tr>
<tr class="emph1"> <td >   0.9% </td> <td > 189.6 </td> <td > Process </td> <td > /usr/lib/firefox/firefox  </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td >  </td> <td > Device </td> <td > Audio codec hwC0D0: Realtek </td> </tr>
<tr class="emph1"> <td >   0.1% </td> <td >  83.1 </td> <td > Timer </td> <td > tick_sched_timer </td> </tr>
<tr class="emph1"> <td >   0.1% </td> <td >  57.6 </td> <td > Process </td> <td > compton --dbus  </td> </tr>
<tr class="emph1"> <td >   0.1% </td> <td >  56.3 </td> <td > Timer </td> <td > hrtimer_wakeup </td> </tr>
<tr class="emph1"> <td >   0.9% </td> <td >  47.2 </td> <td > Process </td> <td > /usr/bin/pulseaudio --start  </td> </tr>
<tr class="emph1"> <td >   0.3% </td> <td >  27.2 </td> <td > Interrupt </td> <td > [6] tasklet(softirq) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td >   8.9 </td> <td > Interrupt </td> <td > [58] snd_hda_intel </td> </tr>
<tr class="emph1"> <td >   0.1% </td> <td >   8.1 </td> <td > kWork </td> <td > os_execute_work_item </td> </tr>
</table>
</div>
<div class="clear_block" id="cpuidle">
<h2 class="content_title"> Processor Idle State Report </h2>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title"> Package </th> <th class="title"> 0 </th> </tr>
<tr> <td class="package"> &nbsp; </td> <td class="package"> &nbsp; </td> </tr>
<tr> <td class="package"> &nbsp; </td> <td class="package"> &nbsp; </td> </tr>
<tr> <td class="package"> &nbsp; </td> <td class="package"> &nbsp; </td> </tr>
<tr> <td class="package"> C2 (pc2) </td> <td class="package">   0.0% </td> </tr>
<tr> <td class="package"> C3 (pc3) </td> <td class="package">   0.0% </td> </tr>
<tr> <td class="package"> C6 (pc6) </td> <td class="package">   0.0% </td> </tr>
<tr> <td class="package"> C7 (pc7) </td> <td class="package">   0.0% </td> </tr>
</table>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title">  </th> <th class="title"> Core 0 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> C3 (cc3) </td> <td class="core">   2.4% </td> </tr>
<tr> <td class="core"> C6 (cc6) </td> <td class="core">  61.3% </td> </tr>
<tr> <td class="core"> C7 (cc7) </td> <td class="core">   0.0% </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 1 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> C3 (cc3) </td> <td class="core">   1.1% </td> </tr>
<tr> <td class="core"> C6 (cc6) </td> <td class="core">  54.1% </td> </tr>
<tr> <td class="core"> C7 (cc7) </td> <td class="core">   0.0% </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 2 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> C3 (cc3) </td> <td class="core">   2.2% </td> </tr>
<tr> <td class="core"> C6 (cc6) </td> <td class="core">  76.9% </td> </tr>
<tr> <td class="core"> C7 (cc7) </td> <td class="core">   0.0% </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 3 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> C3 (cc3) </td> <td class="core">   1.8% </td> </tr>
<tr> <td class="core"> C6 (cc6) </td> <td class="core">  85.9% </td> </tr>
<tr> <td class="core"> C7 (cc7) </td> <td class="core">   0.0% </td> </tr>
</table>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU </th> <th class="title"> 0 </th> <th class="title"> CPU </th> <th class="title"> 4 </th> </tr>
<tr> <th class="title"> C0 active </th> <td class="cpu">  25.1% </td> <td class="cpu"> &nbsp; </td> <td class="cpu">   9.2% </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> POLL </th> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> </tr>
<tr> <th class="title"> C1E-SNB </th> <td class="cpu">   6.6% </td> <td class="cpu">    1.1 ms </td> <td class="cpu">   0.9% </td> <td class="cpu">    1.3 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> C3-SNB </th> <td class="cpu">   1.6% </td> <td class="cpu">    0.7 ms </td> <td class="cpu">   0.2% </td> <td class="cpu">    0.8 ms </td> </tr>
<tr> <th class="title"> C6-SNB </th> <td class="cpu">  67.9% </td> <td class="cpu">    2.0 ms </td> <td class="cpu">  89.1% </td> <td class="cpu">   10.5 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU </th> <th class="title"> 1 </th> <th class="title"> CPU </th> <th class="title"> 5 </th> </tr>
<tr> <th class="title"> C0 active </th> <td class="cpu">  25.4% </td> <td class="cpu"> &nbsp; </td> <td class="cpu">   8.1% </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> POLL </th> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> </tr>
<tr> <th class="title"> C1E-SNB </th> <td class="cpu">   9.8% </td> <td class="cpu">    2.0 ms </td> <td class="cpu">   3.4% </td> <td class="cpu">    5.5 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> C3-SNB </th> <td class="cpu">   0.9% </td> <td class="cpu">    0.6 ms </td> <td class="cpu">   0.1% </td> <td class="cpu">    0.5 ms </td> </tr>
<tr> <th class="title"> C6-SNB </th> <td class="cpu">  59.8% </td> <td class="cpu">    2.1 ms </td> <td class="cpu">  88.9% </td> <td class="cpu">   13.5 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU </th> <th class="title"> 2 </th> <th class="title"> CPU </th> <th class="title"> 6 </th> </tr>
<tr> <th class="title"> C0 active </th> <td class="cpu">  15.4% </td> <td class="cpu"> &nbsp; </td> <td class="cpu">   4.6% </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> POLL </th> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> </tr>
<tr> <th class="title"> C1E-SNB </th> <td class="cpu">   1.8% </td> <td class="cpu">    1.0 ms </td> <td class="cpu">   0.4% </td> <td class="cpu">    1.1 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> C3-SNB </th> <td class="cpu">   0.7% </td> <td class="cpu">    0.7 ms </td> <td class="cpu">   0.7% </td> <td class="cpu">   13.5 ms </td> </tr>
<tr> <th class="title"> C6-SNB </th> <td class="cpu">  82.7% </td> <td class="cpu">    4.0 ms </td> <td class="cpu">  92.5% </td> <td class="cpu">   20.9 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU </th> <th class="title"> 3 </th> <th class="title"> CPU </th> <th class="title"> 7 </th> </tr>
<tr> <th class="title"> C0 active </th> <td class="cpu">   8.7% </td> <td class="cpu"> &nbsp; </td> <td class="cpu">   2.5% </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> POLL </th> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> <td class="cpu">   0.0% </td> <td class="cpu">    0.0 ms </td> </tr>
<tr> <th class="title"> C1E-SNB </th> <td class="cpu">   0.8% </td> <td class="cpu">    0.8 ms </td> <td class="cpu">   0.2% </td> <td class="cpu">    1.4 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
<tr> <th class="title"> C3-SNB </th> <td class="cpu">   0.8% </td> <td class="cpu">    1.0 ms </td> <td class="cpu">   0.2% </td> <td class="cpu">    8.6 ms </td> </tr>
<tr> <th class="title"> C6-SNB </th> <td class="cpu">  88.2% </td> <td class="cpu">    7.6 ms </td> <td class="cpu">  97.8% </td> <td class="cpu">   28.3 ms </td> </tr>
<tr> <th class="title">  </th> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> <td class="cpu"> &nbsp; </td> </tr>
</table>
</div>
<div class="clear_block" id="cpufreq">
<h2 class="content_title"> Processor Frequency Report </h2>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title"> Package </th> <th class="title"> 0 </th> </tr>
<tr> <td class="package"> &nbsp; </td> <td class="package"> &nbsp; </td> </tr>
<tr> <td class="package"> Idle </td> <td class="package">  100.0%  </td> </tr>
</table>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title">  </th> <th class="title"> Core 0 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> Idle </td> <td class="core">  100.0%  </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 1 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> Idle </td> <td class="core">  100.0%  </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 2 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> Idle </td> <td class="core">  100.0%  </td> </tr>
<tr> <th class="title">  </th> <th class="title"> Core 3 </th> </tr>
<tr> <td class="core"> &nbsp; </td> <td class="core"> &nbsp; </td> </tr>
<tr> <td class="core"> Idle </td> <td class="core">  100.0%  </td> </tr>
</table>
<table class="emphasis2 side_by_side_left">
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU 0 </th> <th class="title"> CPU 4 </th> </tr>
<tr> <th class="title"> Actual </th> <td class="cpu"> 4.7 GHz </td> <td class="cpu"> 4.8 GHz </td> </tr>
<tr> <th class="title"> Idle </th> <td class="cpu">  100.0%  </td> <td class="cpu">  100.0%  </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU 1 </th> <th class="title"> CPU 5 </th> </tr>
<tr> <th class="title"> Actual </th> <td class="cpu"> 4.8 GHz </td> <td class="cpu"> 4.8 GHz </td> </tr>
<tr> <th class="title"> Idle </th> <td class="cpu">  100.0%  </td> <td class="cpu">  100.0%  </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU 2 </th> <th class="title"> CPU 6 </th> </tr>
<tr> <th class="title"> Actual </th> <td class="cpu"> 4.8 GHz </td> <td class="cpu"> 4.8 GHz </td> </tr>
<tr> <th class="title"> Idle </th> <td class="cpu">  100.0%  </td> <td class="cpu">  100.0%  </td> </tr>
<tr> <th class="title"> &nbsp; </th> <th class="title"> CPU 3 </th> <th class="title"> CPU 7 </th> </tr>
<tr> <th class="title"> Actual </th> <td class="cpu"> 4.8 GHz </td> <td class="cpu"> 4.8 GHz </td> </tr>
<tr> <th class="title"> Idle </th> <td class="cpu">  100.0%  </td> <td class="cpu">  100.0%  </td> </tr>
<tr> <th class="title">  </th> <th class="title">  </th> <th class="title">  </th> </tr>
<tr> <th class="title">  </th> <td class="cpu">  </td> <td class="cpu">  </td> </tr>
<tr> <th class="title">  </th> <td class="cpu">  </td> <td class="cpu">  </td> </tr>
<tr> <th class="title">  </th> <th class="title">  </th> <th class="title">  </th> </tr>
</table>
</div>
<div class="clear_block" id="software">
<h2 class="content_title"> Overview of Software Power Consumers </h2>
<table class="emphasis2">
<tr class="emph1"> <th class="emph_title"> Usage </th> <th class="emph_title"> Wakeups/s </th> <th class="emph_title"> GPU ops/s </th> <th class="emph_title"> Disk IO/s </th> <th class="emph_title"> GFX Wakeups/s </th> <th class="emph_title"> Category </th> <th class="emph_title"> Description </th> </tr>
<tr class="emph1"> <td class="no_wrap"> 334.2 ms/s </td> <td class="no_wrap"> 332.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  11.3 </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/vlc --started-from-file  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   9.4 ms/s </td> <td class="no_wrap"> 189.6 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> 154.8 </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/firefox/firefox  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.9 ms/s </td> <td class="no_wrap">  83.1 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> tick_sched_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.5 ms/s </td> <td class="no_wrap">  57.6 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  60.3 </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> compton --dbus  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 550.5 us/s </td> <td class="no_wrap">  56.3 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> hrtimer_wakeup </td> </tr>
<tr class="emph1"> <td class="no_wrap">   9.0 ms/s </td> <td class="no_wrap">  47.2 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/pulseaudio --start  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   3.4 ms/s </td> <td class="no_wrap">  27.2 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [6] tasklet(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 303.4 us/s </td> <td class="no_wrap">   8.9 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [58] snd_hda_intel </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 643.7 us/s </td> <td class="no_wrap">   8.1 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> os_execute_work_item </td> </tr>
<tr class="emph1"> <td class="no_wrap">  24.7 us/s </td> <td class="no_wrap">   5.6 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [pt1] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  12.8 ms/s </td> <td class="no_wrap">   0.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/sbin/X :0 -auth /run/lightdm/root/:0 -nolisten tcp vt1 -novtswitch  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 102.4 us/s </td> <td class="no_wrap">   5.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/tor -f /etc/tor/torrc  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  12.9 us/s </td> <td class="no_wrap">   4.9 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [usb-storage] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  72.1 us/s </td> <td class="no_wrap">   2.8 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [4] block(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap">  12.0 us/s </td> <td class="no_wrap">   2.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [rcu_preempt] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  25.0 us/s </td> <td class="no_wrap">   2.0 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> mono /usr/lib/glippy/glippy.exe  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 109.7 us/s </td> <td class="no_wrap">   1.4 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> pantheon-files  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 194.3 us/s </td> <td class="no_wrap">   1.4 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/indicator-sound/indicator-sound-service  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 220.8 us/s </td> <td class="no_wrap">   1.3 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/gnome-settings-daemon/gnome-settings-daemon  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 564.6 us/s </td> <td class="no_wrap">   0.7 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> disk_events_workfn </td> </tr>
<tr class="emph1"> <td class="no_wrap">  39.9 us/s </td> <td class="no_wrap">   0.8 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [16] ehci_hcd:usb3 </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.7 ms/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [64] nvidia </td> </tr>
<tr class="emph1"> <td class="no_wrap">   5.3 us/s </td> <td class="no_wrap">   0.7 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> ehci_hrtimer_func </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.2 us/s </td> <td class="no_wrap">   0.7 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> blk_delay_work </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 361.3 us/s </td> <td class="no_wrap">   0.4 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> indicator-sensors  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  14.7 us/s </td> <td class="no_wrap">   0.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> pci_pme_list_scan </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.7 us/s </td> <td class="no_wrap">   0.5 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/sixad-bin 0 0 0  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  73.0 us/s </td> <td class="no_wrap">   0.4 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/python2 /usr/bin/indicator-cpufreq  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   5.1 us/s </td> <td class="no_wrap">   0.4 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/httpd -f /usr/share/gnome-user-share/dav_user_2.4.conf -C Listen 49076  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  62.0 us/s </td> <td class="no_wrap">   0.3 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [9] RCU(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap">  35.5 us/s </td> <td class="no_wrap">  0.25 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/sbin/thermald --no-daemon --dbus-enable  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   5.3 us/s </td> <td class="no_wrap">  0.25 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/contractor  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 535.4 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [1] timer(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap">   7.9 us/s </td> <td class="no_wrap">  0.15 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">   0.2 </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> xscreensaver -no-splash  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   6.5 us/s </td> <td class="no_wrap">  0.20 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> slingshot-launcher --silent  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  89.9 us/s </td> <td class="no_wrap">  0.15 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  40.2 us/s </td> <td class="no_wrap">  0.15 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">   0.1 </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> pantheon-terminal  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   5.8 us/s </td> <td class="no_wrap">  0.15 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/NetworkManager --no-daemon  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.9 us/s </td> <td class="no_wrap">  0.15 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> openbox  </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 147.8 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/bin/preload --foreground --verbose 1  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   8.4 us/s </td> <td class="no_wrap">  0.10 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/0] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   2.9 us/s </td> <td class="no_wrap">  0.10 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> zeitgeist-datahub  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.0 us/s </td> <td class="no_wrap">  0.10 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> push_to_pool </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.9 us/s </td> <td class="no_wrap">  0.10 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [khugepaged] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.2 us/s </td> <td class="no_wrap">  0.10 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> neigh_periodic_work </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 230.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> intel_pstate_timer_func </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 222.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> powertop --html=runtime-pm.html  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  21.2 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/4] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  16.0 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/2] </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 142.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [8] hrtimer(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap">  12.9 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> bdi_writeback_workfn </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.1 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [jbd2/md126p2-8] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.8 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/systemd/systemd-hostnamed  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.6 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/accountsservice/accounts-daemon  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   1.4 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/indicator-datetime/indicator-datetime-service  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> check_corruption </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.7 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/GConf/gconfd-2  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.6 us/s </td> <td class="no_wrap">  0.05 </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> submit_flushes </td> </tr>
<tr class="emph1"> <td class="no_wrap"> 117.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> tg3_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">  37.1 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [16] ivtv0 </td> </tr>
<tr class="emph1"> <td class="no_wrap">  33.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [56] SATA controller </td> </tr>
<tr class="emph1"> <td class="no_wrap">  30.6 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> delayed_work_timer_fn </td> </tr>
<tr class="emph1"> <td class="no_wrap">  30.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> process_timeout </td> </tr>
<tr class="emph1"> <td class="no_wrap">  26.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> nvidia_rc_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">  25.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/3] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  20.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/0:2] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  19.9 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> vmstat_update </td> </tr>
<tr class="emph1"> <td class="no_wrap">  17.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/5] </td> </tr>
<tr class="emph1"> <td class="no_wrap">  16.9 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> super-wingpanel  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  13.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/6] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   9.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/7] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   8.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /usr/lib/bamf/bamf/bamfdaemon  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   6.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/2:3] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   6.4 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> bfq_idle_slice_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">   6.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [ksoftirqd/1] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   5.6 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> clocksource_watchdog </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.6 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/4:2] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/3:0] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> /sbin/init  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/2:1] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   4.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/5:1] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   3.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/6:0] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   3.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/7:2] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   3.0 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/2:2] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   2.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/2:4] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   2.1 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> plank  </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.9 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/2:1H] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> kWork </td> <td class="no_wrap"> md_submit_flush_data </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> dev_watchdog </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/1:1] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> it_real_fn </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.8 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/0:1H] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.6 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> writeout_period </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.5 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Interrupt </td> <td class="no_wrap"> [2] net tx(softirq) </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.4 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> __prandom_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.3 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> blk_rq_timed_out_timer </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.2 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Process </td> <td class="no_wrap"> [kworker/u16:0] </td> </tr>
<tr class="emph1"> <td class="no_wrap">   0.1 us/s </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap"> Timer </td> <td class="no_wrap"> commit_timeout </td> </tr>
<tr class="emph1"> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> </tr>
<tr class="emph1"> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> <td class="no_wrap">  </td> </tr>
</table>
</div>
<div id="devinfo">
<h2 class="content_title"> Device Power Report </h2>
<table class="emphasis2 side_by_side_left">
<tr class="emph1"> <th class="emph_title"> Usage </th> <th class="emph_title"> Device Name </th> </tr>
<tr class="emph1"> <td >  37.8% </td> <td > CPU core </td> </tr>
<tr class="emph1"> <td >  37.8% </td> <td > CPU misc </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > Audio codec hwC0D0: Realtek </td> </tr>
<tr class="emph1"> <td >   0.0 ops/s </td> <td > GPU core </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > Display backlight </td> </tr>
<tr class="emph1"> <td >   0.0 ops/s </td> <td > GPU misc </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Internext Compression Inc iTVC16 (CX23416) Video Decoder </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Xilinx Corporation Device 222a </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: EHCI Host Controller </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: Mass Storage Device (Generic ) </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: F-01F (Fujitsu) </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: USB Receiver (Logitech) </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: usb-device-0a12-0001 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: EHCI Host Controller </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > Radio device: btusb </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: usb-device-8087-0024 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > USB device: usb-device-8087-0024 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 82801 SATA Controller [RAID mode] </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation Z68 Express Chipset Family LPC Controller </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 8 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 7 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Broadcom Corporation NetLink BCM57781 Gigabit Ethernet PCIe </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: NVIDIA Corporation GK208 [GeForce GT 630 Rev. 2] </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: NVIDIA Corporation Device 0e0f </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Marvell Technology Group Ltd. 88SE9120 SATA 6Gb/s Controller </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > 100.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: PLAYSTATION(R)3 Controller (Sony) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: PLAYSTATION(R)3 Controller (Sony) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: PLAYSTATION(R)3 Controller (Sony) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: PLAYSTATION(R)3 Controller (Sony) </td> </tr>
<tr class="emph1"> <td >   0.0 pkts/s </td> <td > Network interface: enp12s0 (tg3) </td> </tr>
<tr class="emph1"> <td >   0.0 pkts/s </td> <td > Network interface: enp0s26u1u2 (rndis_host) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Intel Corporation 2nd Generation Core Processor Family DRAM Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Etron Technology, Inc. EJ168 USB 3.0 Host Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > PCI Device: Etron Technology, Inc. EJ168 USB 3.0 Host Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: SCR3310-NTTCom USB SmartCard Reader (NTT Communications Corp.) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: usb-device-0424-a700 </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: xHCI Host Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: xHCI Host Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: xHCI Host Controller </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: USB2.0 Camera (Etron Technology, Inc.) </td> </tr>
<tr class="emph1"> <td >   0.0% </td> <td > USB device: xHCI Host Controller </td> </tr>
</table>
<h2 class="content_title"> Process Device Activity </h2>
<table class="emphasis2">
<tr class="emph1"> <th class="emph_title"> Process </th> <th class="emph_title"> Device </th> </tr>
<tr class="emph1"> <td > systemd </td> <td > /dev/autofs </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/kmsg </td> </tr>
<tr class="emph1"> <td > systemd-journal </td> <td > /dev/kmsg </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/kmsg </td> </tr>
<tr class="emph1"> <td > systemd-logind </td> <td > /dev/input/event1 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event2 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event3 </td> </tr>
<tr class="emph1"> <td > X </td> <td > /dev/dri/card0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event1 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event11 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event12 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event13 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event2 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/input/event3 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidiactl </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidiactl </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/vga_arbiter </td> </tr>
<tr class="emph1"> <td > pulseaudio </td> <td > /dev/snd/controlC0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/snd/controlC0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/snd/controlC0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/snd/controlC1 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/snd/controlC1 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/snd/pcmC0D1p </td> </tr>
<tr class="emph1"> <td > upowerd </td> <td > /dev/hidraw0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/hidraw0 </td> </tr>
<tr class="emph1"> <td > gvfsd-fuse </td> <td > /dev/fuse </td> </tr>
<tr class="emph1"> <td > gnome-settings- </td> <td > /dev/rfkill </td> </tr>
<tr class="emph1"> <td > python2 </td> <td > /dev/rfkill </td> </tr>
<tr class="emph1"> <td > compton </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidiactl </td> </tr>
<tr class="emph1"> <td > bluetoothd </td> <td > /dev/rfkill </td> </tr>
<tr class="emph1"> <td > vlc </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidia0 </td> </tr>
<tr class="emph1"> <td >  </td> <td > /dev/nvidiactl </td> </tr>
</table>
</div>
<div id="ahci">
<h2 class="content_title"> AHCI ALPM Residency Statistics - Not supported on this macine </h2>
</div>
<div class="clear_block" id="tuning">
<h2 class="content_title"> Untunable Software Issues </h2>
<table class="emphasis2">
<tr class="tune"> <th class="emph_title"> Description </th> </tr>
</table>
<h2 class="content_title"> Optimal Tuned Software Settings </h2>
<table class="emphasis2">
<tr class="emph1"> <th class="emph_title"> Description </th> </tr>
<tr class="emph1"> <td > Bluetooth device interface status </td> </tr>
<tr class="emph1"> <td > VM writeback timeout </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host3 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host0 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host1 </td> </tr>
<tr class="emph1"> <td > Enable Audio codec power management </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host2 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host4 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host5 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host6 </td> </tr>
<tr class="emph1"> <td > Enable SATA link power management for host7 </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device xHCI Host Controller [usb1] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device xHCI Host Controller [usb5] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device EHCI Host Controller [usb3] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device EHCI Host Controller [usb6] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device F-01F [Fujitsu] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device xHCI Host Controller [usb4] </td> </tr>
<tr class="emph1"> <td > Autosuspend for unknown USB device 6-1 (8087:0024) </td> </tr>
<tr class="emph1"> <td > Autosuspend for unknown USB device 3-1 (8087:0024) </td> </tr>
<tr class="emph1"> <td > Autosuspend for unknown USB device 3-1.1 (0424:a700) </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device USB2.0 Camera [Etron Technology, Inc.] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device SCR3310-NTTCom USB SmartCard Reader [NTT Communications Corp.] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device PLAYSTATION(R)3 Controller [Sony] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device PLAYSTATION(R)3 Controller [Sony] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device PLAYSTATION(R)3 Controller [Sony] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device PLAYSTATION(R)3 Controller [Sony] </td> </tr>
<tr class="emph1"> <td > Autosuspend for unknown USB device 6-1.4 (0a12:0001) </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device xHCI Host Controller [usb2] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device Mass Storage Device [Generic ] </td> </tr>
<tr class="emph1"> <td > Autosuspend for USB device USB Receiver [Logitech] </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device NVIDIA Corporation Device 0e0f </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 7 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 8 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation Z68 Express Chipset Family LPC Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 82801 SATA Controller [RAID mode] </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device NVIDIA Corporation GK208 [GeForce GT 630 Rev. 2] </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Xilinx Corporation Device 222a </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Broadcom Corporation NetLink BCM57781 Gigabit Ethernet PCIe </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Internext Compression Inc iTVC16 (CX23416) Video Decoder </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Etron Technology, Inc. EJ168 USB 3.0 Host Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Etron Technology, Inc. EJ168 USB 3.0 Host Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Marvell Technology Group Ltd. 88SE9120 SATA 6Gb/s Controller </td> </tr>
<tr class="emph1"> <td > Runtime PM for PCI Device Intel Corporation 2nd Generation Core Processor Family DRAM Controller </td> </tr>
<tr class="emph1"> <td > Wake-on-lan status for device enp0s26u1u2 </td> </tr>
<tr class="emph1"> <td > Wake-on-lan status for device enp12s0 </td> </tr>
</table>
</div>
</div>
</body>
</html>

I was actually trying to get Powertop to output the commands needed to enable extra powersave options, but that doesn't seem to happen.

Offline

#5 2014-04-28 07:44:48

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

Head_on_a_Stick wrote:

Have you seen powertop?
I think it does most of the things you have scripted & can be enabled as a systemd .service, as outlined in  the link... wink

Done, in combination with the udev rules above. I wonder if it's not too hard to write similar udev rules for the sound modules:

	# Runtime power-management for digital audio
	for i in /sys/module/snd_*/parameters/power_save
	do
		echo 0 > ${i} &
	done

To be revised ala:

ACTION=="add", SUBSYSTEM=="snd_*",  TEST=="parameters/power_save", ATTR{parameters/power_save}="0"

Does that look sane?

Offline

#6 2014-04-28 14:35:32

Head_on_a_Stick
Member
From: Asteroid B-612
Registered: 2014-02-20
Posts: 3,767
Website

Re: Indicator-powersave & throttle

If you have an intel sound card create a /etc/modprobe.d/audio_powersave.conf file:

options snd_hda_intel power_save=1

As outlined here wink


_0_
__0
000

Offline

#7 2014-04-28 14:39:42

ooo
Member
Registered: 2013-04-10
Posts: 1,019

Re: Indicator-powersave & throttle

Not sure, I'm not an expert with udev rules tbh, but somehow that doesn't seem right to me.
It would probably be simpler to use the modprobe.d method from the wiki

edit. oh man you beat me to it

Last edited by ooo (2014-04-28 14:40:43)

Offline

#8 2014-04-29 00:55:40

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

Head_on_a_Stick wrote:

If you have an intel sound card create a /etc/modprobe.d/audio_powersave.conf file:

options snd_hda_intel power_save=1

As outlined here wink

Already done wink I've already employed most of the wiki's recommendations. I also put in the udev rules, which appear to be working (need to look closely over the logs), and powertop systemd service (effective, but overkill; would rather replace with a script that runs just the needed commands).

Last edited by quequotion (2014-12-28 09:06:22)

Offline

#9 2014-04-29 01:10:40

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

EDIT: I'll have some new powersaving reports soon; the previous ones are irrelevant.

Last edited by quequotion (2014-05-12 14:40:42)

Offline

#10 2014-05-11 03:40:55

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

Progress!

There may be a few more optimizations out there and I'm open to suggestions. My intention is for the system to boot with all possible (automatic) power saving policies in place. An exception is the cpu governor, which gets set to powersave after boot anyway and is better off in performance during boot (so I'm not doing anything about that). I'm also leaving backlight out of it, which isn't effective on my system anyway, because I'd never be able to decide on an appropriately low but not too low setting and when I do use a laptop I set the brightness up and down for reasons that have nothing to do with performance or power saving (sunlight, watching movies, etc) using some software tool. Another one I'm not going to bother with is bluetooth because the only options seems to be on or off; I'm not adding little switches for each device and it's ridiculous to turn everything on full power just to get bluetooth functionality (on it stays). The wiki has strong warnings about pcie_aspm so I'll leave that alone too.

I made a few changes to the udev rules ooo suggested. These are effective across several extra subsystems, with some overlap to more specific rules already in place in Arch. USB autosuspend may be problematic, particularly with older devices.
/etc/udev/rules.d/runtime-pm.rules

See first post for latest release

EDIT: Setting USB autosuspend to 0 in udev proved unsafe; 1 seems fine. Setting autosuspend_delay_ms to 1 in udev also proved to be a bad idea; dropping that. Setting either by script seems fine.
EDIT: USB autosuspend{,_delay_ms} are not dangerous on their own; specific devices have poor implementation that may leave them disabled or behaving badly.
EDIT: Not sure if changing LED brightness actually works; the udev rule works but the LED looks the same; only have one (very cheap) device with to test this with.
EDIT: Wireless powersaving depends on an external tool, iw. Also, adjusted for being agnostic of running before or after devices get renamed (looks like Arch keeps "wl" at least).
EDIT: Same story for ethernet wake-on-lan (sort of); some devices may respond to setting the power/wakeup parameter, but most need to be set by ethtool. Again, agnostic for device renaming.

I wrote a script to handle the switch:
/usr/bin/throttle

See first post for latest release

EDIT: Reconsidering the cpu governor; in fact I usually handle this with indicator-cpufreq and I like the idea of having everything except the cpu running on minimal power for certain tasks.
EDIT: More informative output for check and massively multi-threaded setting application.

Last edited by quequotion (2015-02-22 18:24:51)

Offline

#11 2014-05-11 05:32:34

WonderWoofy
Member
From: Los Gatos, CA
Registered: 2012-05-19
Posts: 8,412

Re: Indicator-powersave & throttle

quequotion wrote:

The only other exception is the cpu governor, which gets set to powersave after boot anyway.

This probably isn't actually ideal for power savings actually.

See here for an explanation.

Offline

#12 2014-05-11 06:50:37

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

WonderWoofy wrote:

This probably isn't actually ideal for power savings actually.

See here for an explanation.

What sets the cpu to powersave after boot anyway? (this is not me nor any of my scripts or settings, it is the default policy)

I wonder if this article is still relevant with the Intel P-states drivers. Is the new powersave (which is scalable) any better than the old powersave (that used to lock the cpu to the minimal frequency)?

Last edited by quequotion (2014-05-11 06:54:19)

Offline

#13 2014-05-11 15:36:53

WonderWoofy
Member
From: Los Gatos, CA
Registered: 2012-05-19
Posts: 8,412

Re: Indicator-powersave & throttle

If the Intel P-state driver is in use then the situation is entirely different.  So you can ignore my link above.

Offline

#14 2014-05-11 16:45:05

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

WonderWoofy wrote:

If the Intel P-state driver is in use then the situation is entirely different.  So you can ignore my link above.

It seems this has been default for arch since some time before I joined, but in fact I was using it with custom kernels even before I saw the light smile

Offline

#15 2014-05-11 19:06:55

WonderWoofy
Member
From: Los Gatos, CA
Registered: 2012-05-19
Posts: 8,412

Re: Indicator-powersave & throttle

It only applies to Sandy Bridge and newer Intel processors though.  So for many users, there is still a good chance that they are using ondemand.

Offline

#16 2014-05-11 21:07:53

orschiro
Member
Registered: 2009-06-04
Posts: 2,136
Website

Re: Indicator-powersave & throttle

@quequotion

I am wondering why you do not make any use of TLP which already provides a lot of your intended functionality?

Offline

#17 2014-05-12 04:46:44

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

WonderWoofy wrote:

It only applies to Sandy Bridge and newer Intel processors though.  So for many users, there is still a good chance that they are using ondemand.

Unfortunately true...

Offline

#18 2014-05-12 05:36:41

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

orschiro wrote:

@quequotion

I am wondering why you do not make any use of TLP which already provides a lot of your intended functionality?

Mostly because I didn't know about it and anyway I'd rather do this with built-in functionality than rely on tools that may or may not do precisely what I expect. I even removed the powertop systemd service! That said, it's obviously more comprehensive and I'm looking through the code now to see if there's anything I can borrow (anything that can be applied to systems generally, doesn't overtly risk data loss, and preferably can be done with module or device configuration and without additional software tools).

Since I use a desktop, the automatic switching between battery and AC  modes is unnecessary. I need a switch that's effective for going full throttle during intensive system load (by switching everything on) and cutting back at idle (with automatic settings that allow things to power up as needed). I've not yet automated this since I don't know what method of monitoring the system load would be least obtrusive and a manual switch serves this purpose fairly well (though it could use a more switch-like interface, ala indicator-cpufreq).

I'd rather not reinvent the wheel actually, but it seems like my objective is a bit different.

Last edited by quequotion (2014-05-12 05:40:36)

Offline

#19 2014-05-12 06:15:18

WonderWoofy
Member
From: Los Gatos, CA
Registered: 2012-05-19
Posts: 8,412

Re: Indicator-powersave & throttle

Honestly, I have just about everything set into "low" power mode (my wifi is shitty with it on) and things work just fine.  At first, like most people, I tried to make things switch depending on my AC state.  But after I while I realized that I just didn't really need to have it switch at all.  The most CPU intensive thing I do is compile things, so I guess there would probably be some use cases where having things switch might make sense.  But just not for me.  Maybe you should try just running with everything in powertop reported as "good" and see if things are okay.

As far as your particular desire for switching upon load, that is kind of a tricky thing.  The CPU portion of things is actually already taken care of by the governor (that is what it is for after all).  But then the other things like SATA link power management and PCI runtime power management... I don't even know how you would poll for load in those areas.  You would almost certainly have to write something to do that, and would thus end up running a process all the time that is essentially just keeping your CPU from idling.

Oh and BTW, I have a Thinkpad E430 with an Intel i5 3210M.  That with all the powersaving stuffs in place cause me no issues.

Offline

#20 2014-05-12 07:30:55

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

WonderWoofy wrote:

I don't even know how you would poll for load in those areas.  You would almost certainly have to write something to do that, and would thus end up running a process all the time that is essentially just keeping your CPU from idling.

Yeah, that's a problem. No clue where to start on that myself.

For now I'm focusing on starting up with the lowest power settings and having a switch to turn everything all the way on when needed, which I'll have to determine by myself for the time being.

EDIT: Had an idea: A manual switch seems more and more like the best way to go here. I have in mind forking indicator-cpufreq in one of two ways: plug this into the existing indicator or create a separate indicator. Either way, I think I'll leave the cpu governor up to the original tool and make a secondary switch for devices & subsystems.

Mockup of option A (excuse the jumbled look of this, just sort of slapped it together):
throttle_indicator.jpg

I know there are a ton of things that provide similar functionality; but then this has a specific focus: provide simple switches to comprehensively manage power at the user's discretion. At most the could be two switches: CPU, Devices with two options each: full power or powersave.

EDIT: Actually I don't think I could ever make up my mind what an appropriately low but not too low setting would be for backlight powersaving, so I'll not bother with that.

Last edited by quequotion (2014-05-12 14:45:15)

Offline

#21 2014-05-12 18:29:54

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

These are the kind of risky settings I'm nervous about including, although they do offer substantial power savings or performance optimization:

Power saving:

# echo 5 > /proc/sys/vm/laptop_mode # Known to risk data loss, often suggested
# echo 1500 > /proc/sys/vm/dirty_writeback_centisecs # Known to risk data loss, often suggested
# hdparm -B 1 -S 12 -M 128 /dev/[hs]d[a-z] # Known to reduce drive lifespan
# -B 1 = most aggressive APM (known to reduce drive lifespan); -S 12 = idle 1min to spindown (5*12=60sec) (known to reduce drive lifespan); -M 128 = Most quiet operation

Performance:

# echo 0 > /proc/sys/vm/laptop_mode # Default / Performance
# echo 500 > /proc/sys/vm/dirty_writeback_centisecs # Default / Lower numbers may reduce drive lifespan and decrease throughput
# hdparm -B 255 -S 240 -M 254 /dev/[hs]d[a-z] # Performance / -S may be ineffective with -B 255 / There is no default or means to revert -S?.
# -B 255 = no APM (Performance / Default?); -S 240 = idle 20min to spindown (5*240=1200sec) (for lack of known default); -M 254 = Fastest operation / Default?

Any thoughts? Are any of these worth the risk?
EDIT: Got a little more info from hdparm... the range for -M is 128-254, and although the man page says "most modern harddisk drives" support it, Wikipedia points out that "AAM is no longer available for Seagate and Western Digital drives". There's no information regarding a possible default setting for -S anywhere, but the man page does say it's "VERY DANGEROUS" which is too bad because it might save a lot of power if it were safe to use (and didn't reduce drive lifespan by years)...

Last edited by quequotion (2014-05-14 03:51:12)

Offline

#22 2014-05-12 20:02:08

ooo
Member
Registered: 2013-04-10
Posts: 1,019

Re: Indicator-powersave & throttle

afaik hdparm -B should already spin down your drive with values below 128, at least with most laptops where HDDs should sustain more spindowns than desktop HDDs. So you could just omit the -S setting.
I'm not sure if acoustic management or -M would save much power really, as it is designed to reduce disk noise, not power consumption.

The sysctl setting may cause the loss of several seconds of work if your system freezes or loses power. You should value yourself if some power saving is worth the risk.

Offline

#23 2014-05-14 02:07:49

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

off topic: why are hdparm's options so weird anyway?

Offline

#24 2014-05-14 03:10:35

WonderWoofy
Member
From: Los Gatos, CA
Registered: 2012-05-19
Posts: 8,412

Re: Indicator-powersave & throttle

quequotion wrote:

off topic: why are hdparm's options so weird anyway?

Because it is simply allowing you to change vendor specific options.  Some of them are standardized and others are just a given manufacturer's specific custom quirks.

Offline

#25 2014-05-14 03:49:20

quequotion
Member
From: Oita, Japan
Registered: 2013-07-29
Posts: 492
Website

Re: Indicator-powersave & throttle

ooo wrote:

afaik hdparm -B should already spin down your drive with values below 128, at least with most laptops where HDDs should sustain more spindowns than desktop HDDs. So you could just omit the -S setting.
I'm not sure if acoustic management or -M would save much power really, as it is designed to reduce disk noise, not power consumption.

The sysctl setting may cause the loss of several seconds of work if your system freezes or loses power. You should value yourself if some power saving is worth the risk.

I haven't found any documentation that clarifies exactly how long it will take for the drive to spin down with any given value of -B, but -S can allow the drive to spin down much earlier than that. The good side of that is getting down to the lowest power idle as fast as possible; the drawbacks are more cases of delayed response due to spinning up and marked increase in wear and tear due to more frequent spin down/up cycles. In fact, I'll bet it actually wastes power if the disk is going in and out of idle too often. As for -M, it reduces noise by running the drive (heads?) at a lower speed, which should require less power; how much less is another mystery.

Last edited by quequotion (2014-05-14 13:33:48)

Offline

Board footer

Powered by FluxBB