Как сделать так, чтобы 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
- Включите ноутбук без подключенного адаптера переменного тока
- авторизоваться
- Подключите адаптер переменного тока
- выполнить эти команды:
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", а также включается индикатор питания.
ПРИМЕЧАНИЕ. Иногда приведенный выше сценарий выполняется, но не устанавливает эти значения - выход из системы и выход из нее помогают в этой ситуации.