获取当前总电量

Raj*_*ajS 4 battery command-line power-management

我在 ARM 板(aarch64)上运行 Ubuntu 20.04。我想每 5 秒记录一次总功耗。我尝试了几种工具。

\n

动力顶

\n

我尝试运行 powertop 命令。它输出如下内容:

\n
PowerTOP v2.11    Overview   Idle stats   Frequency stats   Device stats   Devic\n\nSummary: 432.8 wakeups/second,  0.0 GPU ops/seconds, 0.0 VFS ops/sec and 14.7% C\n\nPower est.              Usage       Events/s    Category       Description\n  322 mW     16.0 ms/s      75.2        Process        [PID 1202] weston --idle-\n  239 mW      0.9 ms/s      60.1        kWork          kernfs_notify_workfn\n  210 mW      9.7 ms/s      49.4        kWork          memlat_monitor_work\n  146 mW      2.2 ms/s      36.0        Process        [PID 11] [rcu_preempt]\n  121 mW     12.4 ms/s      25.8        Process        [PID 1160] weston --idle-\n 91.4 mW      2.3 ms/s      22.2        Process        [PID 12] [rcuog/0]\n 73.0 mW     12.8 ms/s      13.4        Interrupt      [407] msm_drm\n 68.9 mW    237.3 \xc2\xb5s/s      17.3        kWork          def_work_fn\n 56.6 mW      2.4 ms/s      13.4        Timer          tick_sched_timer\n 55.0 mW      1.7 ms/s      13.3        Timer          hrtimer_wakeup\n 50.6 mW    120.4 \xc2\xb5s/s      12.8        Timer          histtimer_fn\n 46.7 mW      4.3 ms/s      10.1        Process        [PID 2547] /home/ideaforg\n 29.6 mW      0.7 ms/s       7.2        Interrupt      [31] apps_rsc\n 24.3 mW      1.1 ms/s       5.7        Process        [PID 949] /usr/sbin/rsysl\n 23.0 mW     10.0 ms/s       1.9        Process        [PID 462] /lib/systemd/sy\n 21.8 mW      1.9 ms/s       4.8        Process        [PID 2571] /home/ideaforg\n 20.1 mW      6.6 ms/s       2.5        Process        [PID 1] /sbin/init\n
Run Code Online (Sandbox Code Playgroud)\n

但似乎没有给出总功耗的单个数字。

\n

功率统计

\n

我还尝试使用 powerstat 命令记录功耗:

\n
# powerstat\nRunning for 300.0 seconds (30 samples at 10.0 second intervals).\nPower measurements will start in 180 seconds time.\n\n  Time    User  Nice   Sys  Idle    IO  Run Ctxt/s  IRQ/s  Watts\n08:55:57   0.3   0.0   0.8  98.9   0.0    2   1162    716   0.00\n08:56:07   0.3   0.0   0.9  98.8   0.0    1   1220    784   0.00\n08:56:17   0.3   0.0   1.1  98.6   0.0    1   1148    755   0.00\n08:56:27   0.3   0.0   1.1  98.6   0.0    1   1272    804   0.00\n^C-------- ----- ----- ----- ----- ----- ---- ------ ------ ------\n Average   0.3   0.0   1.0  98.7   0.0  1.2 1200.5  764.8   0.00\n GeoMean   0.3   0.0   1.0  98.7   0.0  1.2 1199.5  764.1   0.00\n  StdDev   0.0   0.0   0.1   0.1   0.0  0.4   49.5   32.9   0.00\n-------- ----- ----- ----- ----- ----- ---- ------ ------ ------\n Minimum   0.3   0.0   0.8  98.6   0.0  1.0 1148.0  716.4   0.00\n Maximum   0.3   0.0   1.1  98.9   0.0  2.0 1272.0  803.7   0.00\n-------- ----- ----- ----- ----- ----- ---- ------ ------ ------\nSummary:\nSystem:   0.00 Watts on average with standard deviation 0.00\nNote: Power calculated from battery capacity drain, may not be accurate.\n
Run Code Online (Sandbox Code Playgroud)\n

不知何故,它一直输出 0 瓦。

\n

/sys/class/power_supply从子目录中获取:

\n

参考

\n

我开始查看各个子目录/sys/class/power_supply。我已将此设备连接到直流电源(它不使用电池运行)。所以,我首先看了一下sys/class/power_supply/dc目录:

\n
# cd /sys/class/power_supply/\n\n# ls\nbattery  dc  pc_port  usb\n\n# cd dc\n\n# ls\ncurrent_max  input_current_limit  present    uevent       waiting_for_supplier\ndevice       online               subsystem  voltage_max  wakeup24\nhwmon0       power                type       voltage_now\n\n# cd power/\n# ls\nautosuspend_delay_ms    wakeup               wakeup_expire_count\ncontrol                 wakeup_abort_count   wakeup_last_time_ms\nruntime_active_time     wakeup_active        wakeup_max_time_ms\nruntime_status          wakeup_active_count  wakeup_prevent_sleep_time_ms\nruntime_suspended_time  wakeup_count         wakeup_total_time_ms\n
Run Code Online (Sandbox Code Playgroud)\n

但我没有找到任何可能包含当前功耗的文件。然后我尝试在目录中查找pc_port

\n
# cd /sys/class/power_supply/pc_port\n\n# ls\ncurrent_max  hwmon2  power      type    voltage_max           wakeup26\ndevice       online  subsystem  uevent  waiting_for_supplier\n\n# cd power/\n# ls\nautosuspend_delay_ms    wakeup               wakeup_expire_count\ncontrol                 wakeup_abort_count   wakeup_last_time_ms\nruntime_active_time     wakeup_active        wakeup_max_time_ms\nruntime_status          wakeup_active_count  wakeup_prevent_sleep_time_ms\nruntime_suspended_time  wakeup_count         wakeup_total_time_ms\n
Run Code Online (Sandbox Code Playgroud)\n

我仍然没有找到任何可能表明包含当前功耗的合理文件名。

\n

如何获取当前总耗电量?

\n

Raf*_*ffa 6

就功率设备内置统计报告功能级别而言,并非所有设备都支持提供统计数据...使用UPowerupower命令列出功率设备,其选项如下(这是测试系统上的演示):-e

$ upower -e
/org/freedesktop/UPower/devices/line_power_ADP0
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/DisplayDevice
Run Code Online (Sandbox Code Playgroud)

然后使用选项检查所需设备的信息-i...名称非常具有描述性,因此直接电源线:

$ upower -i /org/freedesktop/UPower/devices/line_power_ADP0
  native-path:          ADP0
  power supply:         yes
  updated:              Fri 11 Aug 2023 03:45:32 PM +03 (68 seconds ago)
  has history:          no
  has statistics:       no
  line-power
    warning-level:       none
    online:              yes
    icon-name:          'ac-adapter-symbolic'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它没有统计数据......因此,无法从该设备中获取有关当前功耗的信息(以及其他信息)。

而电池:

$ upower -i /org/freedesktop/UPower/devices/battery_BAT0
  native-path:          BAT0
  vendor:               LGC
  model:                L16L2PB2
  serial:               5545
  power supply:         yes
  updated:              Fri 11 Aug 2023 03:47:33 PM +03 (2 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               charging
    warning-level:       none
    energy:              5.06 Wh
    energy-empty:        0 Wh
    energy-full:         17.99 Wh
    energy-full-design:  30 Wh
    energy-rate:         9.238 W
    voltage:             7.744 V
    charge-cycles:       N/A
    time to full:        1.4 hours
    percentage:          28%
    capacity:            59.9667%
    technology:          lithium-polymer
    icon-name:          'battery-low-charging-symbolic'
  History (charge):
    1691758053  28.000  charging
  History (rate):
    1691758053  9.238   charging
Run Code Online (Sandbox Code Playgroud)

确实有统计数据,其中energy-rate:您可以使用如下内容隔离和格式化以进行打印:

$ upower --show-info /org/freedesktop/UPower/devices/battery_BAT0 |
awk '/energy-rate:/{print $2}'
10.828 # <--- output
Run Code Online (Sandbox Code Playgroud)

但是,统计信息更新间隔可能会有所不同,并updated:显示统计信息上次更新的时间,但您可以强制刷新特定设备的统计信息,例如:

busctl call org.freedesktop.UPower \
/org/freedesktop/UPower/devices/battery_BAT0 \
org.freedesktop.UPower.Device Refresh
Run Code Online (Sandbox Code Playgroud)

你可以energy-rate像这样每隔三秒拉一次:

$ upower -e
/org/freedesktop/UPower/devices/line_power_ADP0
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/DisplayDevice
Run Code Online (Sandbox Code Playgroud)

  • @ArchismanPanigrahi …看起来它的 line_power 设备没有统计数据.,。然而,我的答案中的电池示例只是一个示例,示例电池设备可以更改为任何其他电源设备,只要它有统计数据......重点是电源设备的统计数据,如果有的话,可以从多个中提取来源包括问题中提到的一些来源,但如果设备没有它们,那么它们很可能肯定不会在任何地方可用......在设备上说话报告了准确的水平,而不是外部工具的估计。 (2认同)