Батарея и заряд

Питание и ACPI #battery #linux #notebook #power

Батарея и заряд

Ядро Linux отдаёт батарею как обычное устройство класса power supply. Всё, что нужно знать про заряд и износ, лежит в /sys/class/power_supply/:

ls /sys/class/power_supply/
# AC  BAT0  ucsi-source-psy-USBC000:001

Здесь AC — подключение к сети, BAT0 — батарея. Третий элемент — питание по USB-C (у разных ноутбуков бывает по-разному).

Единицы измерения

Класс power supply строго фиксирует единицы (это описано в документации ядра):

  • напряжения — в микровольтах (µV);
  • токи — в микроамперах (µA);
  • заряды (CHARGE_*) — в микроампер-часах (µAh);
  • энергия (ENERGY_*) — в микроватт-часах (µWh);
  • CAPACITY — в процентах, от 0 до 100;
  • температура — в десятых долях градуса.

Путаница между CHARGE_* и ENERGY_* — самая частая ошибка: это две разные величины. Производитель батареи обычно знает заряд (ампер-часы), а upower пересчитывает его в энергию (ватт-часы), умножая на номинальное напряжение.

Что показывает наша батарея

Ноутбук автора, Dell Latitude 7400:

charge_full           5651000     # 5651 мА·ч — реальная полная ёмкость
charge_full_design    7895000     # 7895 мА·ч — проектная ёмкость
charge_now            5651000     # текущий заряд
voltage_min_design    7600000     # 7,6 В — номинальное напряжение
status                Full
capacity              100         # заряд в процентах
capacity_level        Full
cycle_count           0
technology            Li-ion
model_name            DELL 829MX97

Пересчёт в ватт-часы простой: 5651 мА·ч × 7,6 В ≈ 42,95 Вт·ч. Проектная — 7895 × 7,6 ≈ 60,0 Вт·ч. Отсюда знакомая цифра из upower:

upower -d
#   energy-full:  42,9476 Wh
#   energy-full-design: 60,002 Wh
#   capacity: 71,5769 %

Заряд и ёмкость — разные вещи

Две цифры, которые постоянно путают:

  • capacity (заряд) — сколько сейчас осталось от полного: 100 % значит «полная», а не «новая».
  • ёмкость (health) — сколько энергии влезает в полностью заряженную батарею по сравнению с проектной. В upower это поле capacity: energy-full / energy-full-design × 100.

На нашем ноутбуке заряд 100 %, а ёмкость — 71,6 %: батарея полная, но от проектных 60 Вт·ч осталось 43. Потеря примерно четверти ёмкости — обычная история для батареи с несколькими годами работы; это не ошибка и не повод для паники.

Есть и третья величина — capacity_level (Full, High, Normal, Low, Critical): грубая оценка состояния, которую удобно использовать в скриптах вместо сравнения процентов.

Как посмотреть без sysfs

  • upower -d или upower -i /org/freedesktop/UPower/devices/battery_BAT0 — сводка, включая пересчёт в Вт·ч и оценку времени работы.
  • acpi -i — утилита из пакета acpi, простой вывод заряда и ёмкости.
  • Графические оболочки (GNOME, KDE) показывают те же числа из UPower.

Когда батареи мало

Система может не просто выключиться, а сначала уйти в гибернацию. В systemd для этого есть режим suspend-then-hibernate: сначала обычный сон, а если батарея разряжается ниже 5 % или истекает заданный срок — система просыпается и сохраняет состояние на диск. Настройки — в /etc/systemd/sleep.conf:

[Sleep]
HibernateDelaySec=2h

Если батареи нет, срок по умолчанию — 2 часа (значение HibernateDelaySec). Если батарея есть, systemd сначала пытается использовать ACPI-уведомления о низком заряде (_BTP), и только при их отсутствии просыпается по таймеру.

Действие при критическом заряде задаётся и в UPower; на нашем ноутбуке в выводе upower -d стоит critical-action: HybridSleep — то есть при критическом разряде система попробует гибридный сон, а не мгновенно выключится.

Мелочи, о которых стоит знать

  • cycle_count = 0 часто означает не «ноль циклов», а «контроллер не сообщает»: поле есть, но прошивка батареи его не заполняет.
  • Проценты — оценка, а не измерение. Контроллер батареи считает заряд косвенно (по току и напряжению), поэтому цифры могут «прыгать» на несколько процентов, особенно на морозе и под нагрузкой.
  • Ёмкость не восстанавливается. Полный цикл разряда-заряда может помочь контроллеру точнее оценить ёмкость, но физический износ он не отменяет.
  • Порог зарядки. Некоторые ноутбуки умеют останавливать заряд на 80 % (charge_control_end_threshold) — это продлевает жизнь батарее, но уменьшает время работы от одного заряда.

Источники

Оценка статьи 0

Комментарии

Пока комментариев нет.