Как сделать так, чтобы UPower и подсистема питания распознавали, что источник питания подключен?

Я использую Xfce4, и он имеет xfce4-power-manager для визуальных подсказок и upower как один из основных пакетов поддержки (и я вижу /usr/lib/upower/upowerd работает в ps aux выход). Кроме того, есть также pm-utils установлен, и в логах я вижу, что он активен. Я не уверен, что это может размешать любую воду, я определенно перечислю это здесь для полноты.

Машина представляет собой Acer Predator Helios 500 PH517-61-R0GX (AMD Ryzen). Точно такая же установка (буквально та же карта SSD) была на ASUS ROG Strix GL702ZC (также ноутбук AMD Ryzen, но с Ryzen 1700 вместо Ryzen 2700). У меня не было такого рода проблем с ASUS.

# upower -d
Device: /org/freedesktop/UPower/devices/line_power_ACAD
  native-path:          ACAD
  power supply:         yes
  updated:              Sat 02 Mar 2019 10:08:52 PM PST (2442 seconds ago)
  has history:          no
  has statistics:       no
  line-power
    online:             no

Device: /org/freedesktop/UPower/devices/battery_BAT1
  native-path:          BAT1
  vendor:               PANASONIC
  model:                AP17C5P
  serial:               1409
  power supply:         yes
  updated:              Sat 02 Mar 2019 10:49:28 PM PST (6 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    energy:              73.1346 Wh
    energy-empty:        0 Wh
    energy-full:         74.074 Wh
    energy-full-design:  74.074 Wh
    energy-rate:         0 W
    voltage:             17.374 V
    percentage:          98%
    capacity:            100%
    technology:          lithium-ion

Daemon:
  daemon-version:  0.9.23
  can-suspend:     yes
  can-hibernate:   no
  on-battery:      yes
  on-low-battery:  no
  lid-is-closed:   no
  lid-is-present:  yes
  is-docked:       yes

Обратите внимание на блок питания online: no и жидкое тесто state: discharge, хотя, когда я пишу это, ситуация противоположная: адаптер переменного тока подключен, и аккумулятор должен быть полностью заряжен. Это тоже практика, так как, если бы батарея действительно разряжалась, я бы отключился через 1,5 часа.

Сейчас UPower может получить информацию от подсистем. Я вижу это:

# cat /sys/class/power_supply/ACAD/online 
0
# cat /sys/class/power_supply/BAT1/status 
Discharging

Даже если я пытаюсь заставить регулятор частоты процессора быть performanceЦП приглушены:

# cat /proc/cpuinfo | grep MHz
cpu MHz     : 548.695
cpu MHz     : 548.572
cpu MHz     : 548.638
cpu MHz     : 548.658
cpu MHz     : 548.226
cpu MHz     : 548.899
cpu MHz     : 548.528
cpu MHz     : 548.477
cpu MHz     : 548.819
cpu MHz     : 548.440
cpu MHz     : 548.905
cpu MHz     : 548.263
cpu MHz     : 548.956
cpu MHz     : 548.645
cpu MHz     : 548.938
cpu MHz     : 548.666

На самом деле это может даже не быть возможным, потому что я думал, что минимум составляет 1,5 ГГц, но система, конечно, иногда вялая.

Я пытался использовать acpi_osi=Linux параметр загрузки ядра, но это не меняет ситуацию.

Это супер интересно, что в dmesg Я вижу интересную вещь, похоже, что во время ранней загрузки подсистема ACPI обнаруживает, что адаптер переменного тока действительно подключен:

[    0.882383] ACPI: AC Adapter [ACAD] (on-line)
[    0.882416] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
[    0.882420] ACPI: Power Button [PWRB]
[    0.882446] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1
[    0.882449] ACPI: Sleep Button [SLPB]
[    0.882468] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input2
[    0.882472] ACPI: Lid Switch [LID]
[    0.882491] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
[    0.882500] ACPI: Power Button [PWRF]
[    0.882552] ACPI: Video Device [DGPU] (multi-head: yes  rom: no  post: no)
[    0.882745] acpi device:2a: registered as cooling_device0

(полное dmesg: https://pastebin.com/x4QRbSCR)

Я не знаю, когда все обернется? Что приводит к тому, что правильное онлайн-обнаружение во время загрузки облажается?

# uname -a
Linux asus 4.20.13 #2 SMP Sat Mar 2 17:03:50 PST 2019 x86_64 GNU/Linux

Я установил acpid (apt install acpid). Это не помогло с ситуацией в целом, но я мог бежать acpi_listen и когда я отключаю адаптер переменного тока, я вижу кучу сообщений. Когда я воссоединяюсь, наступает тишина. /sys/class/power_supply/* показания выше остаются прежними.

1 ответ

Решение

У меня такой же ноутбук и та же проблема. Я обратился к разработчикам ядра ACPI, но нет никаких предположений, будет ли у нас когда-либо надлежащая поддержка ACPI для нашей мощности переменного тока. "Хорошая" новость заключается в том, что я, по крайней мере, нашел обходной путь, позволяющий нам использовать более высокую производительность, на которую способны наши системы.

Вот несколько вещей, которые нужно проверить и попробовать:

  • Если вы загружаетесь, а частоты вашего процессора зависают на ~500 МГц, попробуйте отключить адаптер переменного тока. Иногда требуется более одной попытки. Это должно побудить вас к настройкам питания режима батареи. Я оставляю процессор для "по требованию".

  • Я действительно рекомендую amdgpu-utils: https://github.com/Ricks-Lab/amdgpu-utils Вам нужно будет добавить: "amdgpu.ppfeaturemask=0xffff7fff" в строку GRUB_CMDLINE_LINUX_DEFAULT= в вашем /etc/default/grub и сгенерировать новый конфиг, переустановите grub, а затем перезагрузите компьютер, но как только у ядра будет такой набор, у вас теперь есть огромный контроль над вашей Vega 56. (Смотрите, у нас с AMD есть причина! Да, драйверы с открытым исходным кодом!)

  • Хак, который я применяю для ускорения работы графического процессора, заключается в установке более высокого тактового значения для состояния P0 (так как оно принудительно устанавливается в "режиме батареи"). Одним из утилит является amdgpu-pac, и он позволяет нам редактировать состояние P0. Сначала от имени пользователя root запустите "amdgpu-pac --execute_pac" и настройте параметры в режиме реального времени. (Вентилятор будет показывать ноль, это нормально, так как наш ноутбук не использует стандартный вентилятор.) Ограничение мощности составляет 120 Вт, мы ничего не можем с этим поделать без взломанного BIOS. P-состояние 0: Sclk должно быть изменено на более высокое МГц и мВ. БЫТЬ ОСТОРОЖЕН! Это как разгон. Мы ограничили использование усилителей, поэтому мы не сможем просто установить его на P7: и двигаться дальше. Я протестировал 1201 МГц и 875 мВ, и это, кажется, работает для меня. Если вы найдете лучшую комбинацию, которая стабильна, дайте мне знать. Я оставил Mclk в покое, за исключением того, что изменил "Set Mask:" на "1,2,3", чтобы он не мог использовать состояние 0. Я попытался изменить состояние 0: и все заблокировалось. Оставьте "Power Performance Mode" в режиме AUTO, я не заметил разницы, меняя его. Нажатие кнопки "Сохранить" применимо немедленно. Я использую Небесный эталон Unigine для стресс-тестирования вещей (текущий счет: 1761 на крайнем уровне "). Как только у вас есть настройки, которые вам нравятся, запишите их, перезапустите amdgpu-pac без аргументов и установите настройки, теперь, когда вы нажимаете Сохранить, он будет генерировать pac_writer_$$$$$.sh для вас, чтобы запускать всякий раз, когда вы хотите установить графический процессор в режим производительности. Это также помогает сгенерировать reset.sh со стандартными настройками, если вы хотите вернуться к экономии энергии.

Используя эти приемы, я могу (в основном) запустить этот ноутбук на полную мощность под Linux. Если повезет, разработчики ACPI услышат наши крики, а будущие ядра Linux просто обнаружат наш AC-адаптер. Удачи!

Мой обходной путь для того, чтобы не заряжать для helios 500 и manjaro:

Linux XXX 5.2.0-1-MANJARO #1 SMP PREEMPT Sat Jun 22 23:22:07 UTC 2019 x86_64 GNU/Linux
  1. Включите ноутбук без подключенного адаптера переменного тока
  2. авторизоваться
  3. Подключите адаптер переменного тока
  4. выполнить эти команды:

echo "manual" > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/power_dpm_force_performance_level

echo 6 > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/pp_dpm_sclk

echo 4 > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/pp_dpm_mclk

После этих трех команд индикатор зарядки начинает светиться, и ОС знает, что адаптер переменного тока подключен.

Я надеюсь, что это поможет кому-то.

Основываясь на ответе Павла Чмока, рабочее решение для Ubuntu 18.04:

  • Список доступных частот (pp_dpm_sclk). Для этого выполните sudo:

    cd '/sys/devices/pci0000:00'
    DPM_SCLK=$(find . -name 'pp_dpm_sclk')
    echo 'Available SCLK frequencies:'
    cat "$DPM_SCLK"
    

    Если вы видите 1201 МГц, перейдите к следующему разделу. Если нет, вы можете решить, какую частоту использовать самостоятельно (на основе выходных данных сценария выше) и передать ее в качестве аргумента в сценарий ниже.

  • Примените желаемую настройку частоты (по умолчанию 1201Mhz или передайте аргумент, т.е. 1301Mhz)
    Выполнить как sudo:

    FREQUENCY="1201Mhz"
    
    if [ -n "$1" ]; then
        FREQUENCY="$1"
    fi
    
    ROOT='/sys/devices/pci0000:00'
    # Set manual level:
    DPM_LEVEL=$(find "$ROOT" -name 'power_dpm_force_performance_level')
    echo "Setting 'manual' level in $DPM_LEVEL"
    echo 'manual' > "$DPM_LEVEL"
    
    # Find frequency selector id:
    DPM_SCLK=$(find "$ROOT" -name 'pp_dpm_sclk')
    SCLK_VALUE=$(grep "$FREQUENCY" "$DPM_SCLK" | cut -d: -f1)
    if [ -z "$SCLK_VALUE" ]; then
        echo "$FREQUENCY not found in $DPM_SCLK"
        exit 1
    fi
    
    # Set frequency
    echo "Setting $FREQUENCY using id $SCLK_VALUE in $DPM_SCLK"
    echo "$SCLK_VALUE" > "$DPM_SCLK"
    
    # pp_dpm_mclk should get set automatically after pp_dpm_sclk is set
    

    После выполнения этого скрипта CPU, GPU начинает работать на обычных частотах, и Ubuntu переключается в режим "On-AC", а также включается индикатор питания.

ПРИМЕЧАНИЕ. Иногда приведенный выше сценарий выполняется, но не устанавливает эти значения - выход из системы и выход из нее помогают в этой ситуации.

Другие вопросы по тегам