LINUX.ORG.RU
ФорумAdmin

Ждучий режим

 , ,


0

2

Всем привет!

Кто сталкивался с проблемой жора батареи в ждучем режиме ноутбука? Настраивал suspend, s2idle, hibernate и столкнулся с тем что ноут за ночь в s2idle теряет ~30% заряда. Кто с этим сталкивался, как лечится?

rav@rav-laptop ~ [19:57]: cat /sys/power/mem_sleep
[s2idle] deep

Закрытие крышки ноутбука(dmesg):

[  176.036201] wlp0s20f3: deauthenticating from cc:2d:e0:78:ef:4b by local choice (Reason: 3=DEAUTH_LEAVING)
[  176.382800] PM: suspend entry (s2idle)
[  176.409147] Filesystems sync: 0.026 seconds
[  176.409284] (NULL device *): firmware: direct-loading firmware i915/adlp_dmc_ver2_16.bin
[  176.409393] (NULL device *): firmware: direct-loading firmware i915/adlp_guc_70.bin
[  176.409425] (NULL device *): firmware: direct-loading firmware i915/tgl_huc.bin
[  176.409444] (NULL device *): firmware: direct-loading firmware regulatory.db.p7s
[  176.409445] (NULL device *): firmware: direct-loading firmware iwlwifi-so-a0-gf-a0.pnvm
[  176.409461] (NULL device *): firmware: direct-loading firmware intel/ibt-0040-0041.ddc
[  176.409463] (NULL device *): firmware: direct-loading firmware regulatory.db
[  176.409581] (NULL device *): firmware: direct-loading firmware intel/ibt-0040-0041.sfi
[  176.409655] (NULL device *): firmware: direct-loading firmware iwlwifi-so-a0-gf-a0-72.ucode
[  176.527925] Freezing user space processes
[  176.529533] Freezing user space processes completed (elapsed 0.001 seconds)
[  176.529536] OOM killer disabled.
[  176.529537] Freezing remaining freezable tasks
[  176.530766] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
[  176.530768] printk: Suspending console(s) (use no_console_suspend to debug)
[  177.034315] ------------[ cut here ]------------
[  177.034322] i915 0000:00:02.0: i915 raw-wakerefs=1 wakelocks=1 on cleanup
[  177.034469] WARNING: CPU: 2 PID: 6165 at drivers/gpu/drm/i915/intel_runtime_pm.c:638 intel_runtime_pm_driver_release+0x5d/0x70 [i915]
[  177.034746] Modules linked in: cpufreq_powersave ctr ccm rfcomm cmac algif_hash algif_skcipher af_alg bridge stp llc overlay bnep btusb btrtl btbcm btintel btmtk bluetooth uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common jitterentropy_rng videodev mc drbg ansi_cprng ecdh_generic ecc crc16 openvswitch nsh nf_conncount qrtr nft_chain_nat xt_MASQUERADE nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nft_compat nf_tables nfnetlink binfmt_misc nls_ascii nls_cp437 vfat fat mei_hdcp snd_sof_pci_intel_tgl pmt_telemetry pmt_class intel_rapl_msr snd_sof_intel_hda_common x86_pkg_temp_thermal soundwire_intel intel_powerclamp soundwire_generic_allocation coretemp soundwire_cadence snd_sof_intel_hda snd_sof_pci snd_sof_xtensa_dsp kvm_intel snd_sof snd_sof_utils snd_soc_hdac_hda snd_hda_codec_realtek iwlmvm kvm snd_hda_codec_generic snd_hda_ext_core ledtrig_audio snd_soc_acpi_intel_match ghash_clmulni_intel mac80211 sha512_ssse3 snd_soc_acpi sha512_generic snd_soc_core
[  177.034893]  sha256_ssse3 sha1_ssse3 snd_hda_codec_hdmi snd_compress joydev soundwire_bus libarc4 snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi aesni_intel iwlwifi snd_hda_codec crypto_simd cryptd snd_hda_core nvidia_wmi_ec_backlight rapl vfio_pci intel_cstate snd_hwdep vfio_pci_core ideapad_laptop iTCO_wdt platform_profile cfg80211 snd_pcm sparse_keymap vfio_virqfd intel_uncore pcspkr intel_pmc_bxt irqbypass mei_me snd_timer iTCO_vendor_support ucsi_acpi wmi_bmof processor_thermal_device_pci watchdog snd typec_ucsi mei processor_thermal_device roles processor_thermal_rfim soundcore processor_thermal_mbox typec processor_thermal_rapl intel_rapl_common igen6_edac intel_vsec int3403_thermal rfkill int340x_thermal_zone int3400_thermal intel_pmc_core acpi_thermal_rel acpi_pad acpi_tad hid_multitouch ac serio_raw evdev nfsd msr auth_rpcgss parport_pc nfs_acl ppdev lockd lp grace sunrpc parport fuse dm_mod loop configfs efi_pstore ip_tables x_tables autofs4 btrfs blake2b_generic
[  177.035034]  zstd_compress efivarfs raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c crc32c_generic raid1 raid0 multipath linear md_mod vfio_iommu_type1 vfio usbhid nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif hid_generic crct10dif_generic i915 drm_buddy i2c_algo_bit drm_display_helper cec rc_core xhci_pci ttm xhci_hcd r8169 drm_kms_helper i2c_hid_acpi video realtek intel_lpss_pci i2c_i801 i2c_hid mdio_devres crct10dif_pclmul drm thunderbolt usbcore crct10dif_common crc32_pclmul crc32c_intel libphy intel_lpss i2c_smbus vmd idma64 usb_common hid battery wmi button
[  177.035148] CPU: 2 PID: 6165 Comm: kworker/u40:20 Tainted: G        W          6.1.0-16-amd64 #1  Debian 6.1.67-1
[  177.035160] Hardware name: LENOVO 82RF/LNVNB161216, BIOS J2CN56WW 09/18/2023
[  177.035166] Workqueue: events_unbound async_run_entry_fn
[  177.035183] RIP: 0010:intel_runtime_pm_driver_release+0x5d/0x70 [i915]
[  177.035415] Code: fc 10 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 2a c8 3a ee 45 89 e0 89 e9 48 89 da 48 89 c6 48 c7 c7 e0 49 ad c0 e8 f3 bf d6 ed <0f> 0b 5b 5d 41 5c c3 cc cc cc cc 0f 1f 84 00 00 00 00 00 0f 1f 44
[  177.035423] RSP: 0018:ffffa8b388513da8 EFLAGS: 00010286
[  177.035431] RAX: 0000000000000000 RBX: ffff9900c24e6bb0 RCX: 0000000000000027
[  177.035437] RDX: ffff99102f6a03a8 RSI: 0000000000000001 RDI: ffff99102f6a03a0
[  177.035442] RBP: 0000000000000001 R08: ffffffffb1579a20 R09: 0000000000000000
[  177.035445] R10: ffffffffffffffff R11: ffff99106fb939ca R12: 0000000000000001
[  177.035449] R13: ffff9900e334a328 R14: 0000000000000000 R15: ffff9900e334b7a8
[  177.035453] FS:  0000000000000000(0000) GS:ffff99102f680000(0000) knlGS:0000000000000000
[  177.035459] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  177.035465] CR2: 00007fe831dd2000 CR3: 000000092b810000 CR4: 0000000000750ee0
[  177.035472] PKRU: 55555554
[  177.035475] Call Trace:
[  177.035483]  <TASK>
[  177.035491]  ? __warn+0x7d/0xc0
[  177.035501]  ? intel_runtime_pm_driver_release+0x5d/0x70 [i915]
[  177.035729]  ? report_bug+0xe2/0x150
[  177.035745]  ? handle_bug+0x41/0x70
[  177.035762]  ? exc_invalid_op+0x13/0x60
[  177.035776]  ? asm_exc_invalid_op+0x16/0x20
[  177.035795]  ? intel_runtime_pm_driver_release+0x5d/0x70 [i915]
[  177.036012]  ? intel_runtime_pm_driver_release+0x5d/0x70 [i915]
[  177.036296]  i915_drm_suspend_late+0x115/0x140 [i915]
[  177.036463]  ? pci_pm_poweroff_late+0x40/0x40
[  177.036479]  dpm_run_callback+0x47/0x150
[  177.036494]  __device_suspend_late+0x94/0x1c0
[  177.036506]  async_suspend_late+0x1a/0x80
[  177.036516]  async_run_entry_fn+0x2d/0x130
[  177.036525]  process_one_work+0x1c4/0x380
[  177.036540]  worker_thread+0x4d/0x380
[  177.036552]  ? rescuer_thread+0x3a0/0x3a0
[  177.036563]  kthread+0xd7/0x100
[  177.036572]  ? kthread_complete_and_exit+0x20/0x20
[  177.036581]  ret_from_fork+0x1f/0x30
[  177.036598]  </TASK>
[  177.036600] ---[ end trace 0000000000000000 ]---
[  177.045220] ACPI: EC: interrupt blocked

Открытие крышки ноутбука(dmesg):

[  197.802485] ACPI: EC: interrupt unblocked
[  198.325528] i915 0000:00:02.0: [drm] GuC firmware i915/adlp_guc_70.bin version 70.5.1
[  198.325531] i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc.bin version 7.9.3
[  198.325671] pcieport 10000:e0:06.0: can't derive routing for PCI INT A
[  198.325672] nvme 10000:e1:00.0: PCI INT A: no GSI
[  198.325675] pcieport 10000:e0:06.2: can't derive routing for PCI INT A
[  198.325677] nvme 10000:e2:00.0: PCI INT A: no GSI
[  198.338180] nvme nvme1: 18/0/0 default/read/poll queues
[  198.342418] nvme nvme0: Shutdown timeout set to 8 seconds
[  198.343279] i915 0000:00:02.0: [drm] HuC authenticated
[  198.343721] i915 0000:00:02.0: [drm] GuC submission enabled
[  198.343723] i915 0000:00:02.0: [drm] GuC SLPC enabled
[  198.344235] i915 0000:00:02.0: [drm] GuC RC: enabled
[  198.403381] nvme nvme0: 12/0/0 default/read/poll queues
[  198.789318] mei_hdcp 0000:00:16.0-b638ab7e-94e2-4ea2-a552-d1c54b627f04: bound 0000:00:02.0 (ops i915_hdcp_component_ops [i915])
[  198.790106] OOM killer enabled.
[  198.790109] Restarting tasks ... done.
[  198.793964] random: crng reseeded on system resumption
[  198.912197] PM: suspend exit
[  198.943385] Generic FE-GE Realtek PHY r8169-0-3200:00: attached PHY driver (mii_bus:phy_addr=r8169-0-3200:00, irq=MAC)
[  199.151441] r8169 0000:32:00.0 enp50s0: Link is Down
[  202.912155] wlp0s20f3: authenticate with cc:2d:e0:78:ef:4b
[  202.918881] wlp0s20f3: send auth to cc:2d:e0:78:ef:4b (try 1/3)
[  202.949521] wlp0s20f3: authenticated
[  202.951186] wlp0s20f3: associate with cc:2d:e0:78:ef:4b (try 1/3)
[  202.953937] wlp0s20f3: RX AssocResp from cc:2d:e0:78:ef:4b (capab=0x431 status=0 aid=3)
[  202.963795] wlp0s20f3: associated
[  203.023913] IPv6: ADDRCONF(NETDEV_CHANGE): wlp0s20f3: link becomes ready

От s2idle не стоит ожидать какой-то сильной экономии батареи: в этом режиме компьютер не выключается, просто прекращает выполнять процессы, и переводит все устройства, что может, в режим пониженного потребления. То есть немногим лучше, чем оставить машину включенной, но закрыть все программы.

https://www.kernel.org/doc/Documentation/power/states.txt :

This state is a generic, pure software, light-weight, system sleep state. It allows more energy to be saved relative to runtime idle by freezing user space and putting all I/O devices into low-power states (possibly lower-power than available at run time), such that the processors can spend more time in their idle states.

This state can be used for platforms without Power-On Suspend/Suspend-to-RAM support, or it can be used in addition to Suspend-to-RAM to provide reduced resume latency. It is always supported.

squareroot ★★★★
()

Интел в мудрости своей решил что s2idle устарел и больше никому не нужен, так что его поддержку начали тотально выпиливать из железа и прошивок. Вместо него нынче S0ix (also called Modern Standby). Вот про него и ищи инфу, но с ним всё плохо в Линукс (и не только в Линукс, везде плохо).

Я например тупо перестал всем этим пользоваться и ноут просто выключаю, когда он больше не нужен. Тем более что его загрузка «с нуля» при использовании nvme ssd и так почти моментальная. Сохранять состояние сеанса можно и WM\DE научить, обычно у них в настройках есть соответствующая галочка.

Jameson ★★★★★
()
Ответ на: комментарий от Jameson

Сохранять состояние сеанса можно и WM\DE научить, обычно у них в настройках есть соответствующая галочка.

Да что ты говоришь? Сохрани мне залогиненую ssh-сессию, вместе со скролл-буфером, не говоря уж про запущеный в ней foreground-софт (без всяких tmux-ов на стороне сервера). Или хотя бы открытую страницу лора с недописанным комментом.

hibernate лучше подходит чем выключать.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Современные интелы не умеют нормальный suspend, забей. Купи старый интел (затрудняюсь сказать какого года, наверно середины 2000-х), или амд, его можно и новый вроде. Впрочем избавляться от интелов и без этой проблемы стоит.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от squareroot

Так что для него не все потеряно, остается только воспользоваться этим режимом.

У меня эта команда (на intel-ноуте) выдаёт «s2idle [deep]» но нормальный слип он всё так же не умеет и жрёт батарею.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Сохрани мне залогиненую ssh-сессию, вместе со скролл-буфером, не говоря уж про запущеный в ней foreground-софт (без всяких tmux-ов на стороне сервера).

А пони тебе подогнать, чтоб не пах? Чумовой запрос в контексте саспенда. Куда ты поперся без mosh+tmux?

t184256 ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Работает плохо, устройства могут внезапно просыпаться и больше не засыпать, высасывая батарейку. Ну и в целом этот режим изначально менее экономичен чем выпиливаемый ныне S3, «by design».

Суть в том что реализация режима S3 в основном полагалась на ACPI и поддержку фирмварями устройств, а S0ix больше похоже на то что в мобильниках, энергосбережением устройств управляет ОС, а не фирмварь. Именно ОС решает чему спать, чему не спать и насколько глубоко это делать.

Ну и поскольку ОС для этого должна продолжать исполняться — весь компутер в целом спит менее глубоко и более чутко. В идеале это вообще не должно быть каким то особым режимом или состоянием — если питание от батареи и в данный момент в чём то нет нужды — оно спит. Нужда есть — это что то проснулось. Если при этом не требуется производительность — это что то сидит на сниженной частоте и урезанном бюджете питания.

Но для этого всё равно нужна поддержка со стороны фирмварей — например фирмварей NVMe, видеокарт и т.п. И вот тут всё по разному и от конкретного железа зависит. В целом на текущий момент картина такая — оно самопроизвольно просыпается у тебя в рюкзаке, засыпать отказывается, и в момент когда ноут нужен — батарейка уже всё. Поэтому я просто его выключаю когда он не нужен и включаю когда нужен, режимами не заморачиваюсь.

Jameson ★★★★★
()
Ответ на: комментарий от squareroot

У топикстартера S3 на месте — оно называется deep в его логах. Так что для него не все потеряно, остается только воспользоваться этим режимом.

Это для совместимости. Ядро использует S0ix если видит его в acpi таблицах. «Deep» остаётся, но это уже совсем не тот «deep».

Jameson ★★★★★
()
Ответ на: комментарий от t184256

Повторю, речь про то чтобы в эмуляторе терминала остался в нативном виде весь скроллбак. А эти твои tmux и прочие костыли скроллбак портят не только при переподключении, но даже и при обычной работе (а ещё могут мешать открывать параллельно два независимых коннекта). При саспенде у меня это всё работает, разумеется с обрыво-устойчивым туннелем коннекта на сетевом уровне снаружи от ssh - можно делать suspend, hibernate, бесшовно переподключаться на другую сеть. При выключении вариантов нет.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Да что ты говоришь? Сохрани мне залогиненую ssh-сессию, вместе со скролл-буфером, не говоря уж про запущеный в ней foreground-софт (без всяких tmux-ов на стороне сервера). Или хотя бы открытую страницу лора с недописанным комментом.

Да, есть такое.

hibernate лучше подходит чем выключать.

У меня на 128гб мозгов hibernate и обратно занимает больше времени чем просто ОС разгрузить и загрузить. А так да, hibernate лучше, особенно если мультизагрузки нет.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от t184256

Ты читать разучился или просто глупый? Я ж уточнил - обрывоустойчивый туннель. TCP заканчивается на локалхосте а дальше соединение прокинуто через туннель безо всяких таймаутов. Только не пиши плз в ответ очередную чушь из школьного курса сетевых технологий. Уже 8 лет работает без перебоев.

Впрочем если в ssh-сессию ничего с той стороны не пишут и сетевые настройки не динамические, то можно сделать suspend даже с обычным tcp-соединением (такое тоже делал, висела месяцами на suspended-компе без проблем).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от firkax

Нет, ты пишешь

обрыво-устойчивым туннелем коннекта на сетевом уровне снаружи от ssh

Ничего про мифический локальный TCP-терминатор отдельно от этого туннеля вокруг (получается что уже и не) SSH ты не писал. А уж зачем страдать такой хренью при живых mosh и tmux — тем более.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

вокруг (получается что уже и не) SSH

ssh-у пофиг tcp или что ещё, ему нужно потоковое соединение. Так что ssh внутри туннеля, но без tcp.

ты не писал

Обрывоустойчивость по-моему подразумевает что с tcp-таймаутами что-то пофикшено, иначе в ней нет смысла.

А уж зачем страдать такой хренью при живых mosh и tmux — тем более.

Затем что пусть ssh будет чистым ssh и ведёт себя понятно и везде одинаково (в т.ч. скроллбак, мультисессионность и пробросы портов). А сетевые проблемы надо решать снаружи.

firkax ★★★★★
()