Raj*_*ajS 4 battery command-line power-management
我在 ARM 板(aarch64)上运行 Ubuntu 20.04。我想每 5 秒记录一次总功耗。我尝试了几种工具。
\n我尝试运行 powertop 命令。它输出如下内容:
\nPowerTOP 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我还尝试使用 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
从子目录中获取:我开始查看各个子目录/sys/class/power_supply
。我已将此设备连接到直流电源(它不使用电池运行)。所以,我首先看了一下sys/class/power_supply/dc
目录:
# 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
:
# 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就功率设备内置统计报告功能级别而言,并非所有设备都支持提供统计数据...使用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)