Bài viết

VNLFVNLF Social
?
Đăng nhậpĐể dùng đầy đủ tính năng
Bảng tinKhám pháTin nhắnVoice
VNLF trên các mạng xã hội khác
Cài đặtTrợ giúpĐăng nhập
Bảng tinKhám pháTin nhắnVoice
Article13 phút đọc

Suspend Then Hibernate trên LOQ 15ARP9 sử dụng systemd và NVIDIA

Lưu ý: Bài hướng dẫn/chia sẻ dựa trên tài liệu systemd, NVIDIA, ArchWiki và quá trình thử nghiệm trên Lenovo LOQ 15ARP9. Kết quả kiểm thử chỉ phản ánh cấu hình phần cứng và phần mềm được sử dụng, không bảo đảm hoạt động

Vanphat111@Vanphat111

Lưu ý: Bài hướng dẫn/chia sẻ dựa trên tài liệu systemd, NVIDIA, ArchWiki và quá trình thử nghiệm trên Lenovo LOQ 15ARP9. Kết quả kiểm thử chỉ phản ánh cấu hình phần cứng và phần mềm được sử dụng, không bảo đảm hoạt động tương tự trên mọi hệ thống.

1. Yêu cầu trước khi cấu hình

Cảnh báo: Suspend Then Hibernate chỉ hoạt động đúng khi cả Suspend và Hibernate đã được cấu hình hoàn chỉnh và hoạt động độc lập.

Hướng dẫn này không bao gồm việc thiết lập Suspend, Hibernate, NVIDIA Power Management, swap hoặc resume. Người dùng cần hoàn tất các cấu hình đó trước khi tiếp tục.

Tham khảo một trong hai hướng dẫn phù hợp với cơ chế NVIDIA đang sử dụng:

  • Suspend & Hibernate với NVIDIA systemd services trên Lenovo LOQ 15ARP9 — Sử dụng cơ chế NVIDIA systemd suspend services truyền thống.

  • Suspend & Hibernate với NVIDIA Kernel Suspend Notifiers trên Lenovo LOQ 15ARP9 — Sử dụng cơ chế Kernel Suspend Notifiers.

Chỉ tiếp tục khi đã kiểm thử thành công cả Suspend và Hibernate riêng lẻ, bao gồm khả năng khôi phục phiên làm việc sau Hibernate.

Lưu ý: Suspend Then Hibernate yêu cầu hệ thống có khả năng tự đánh thức từ Suspend để chuyển sang Hibernate. Khả năng này phụ thuộc vào kernel, firmware và phần cứng, nên không được bảo đảm chỉ vì hai chế độ hoạt động riêng lẻ.

2. Kiểm tra cơ chế NVIDIA Power Management

Nếu hệ thống sử dụng NVIDIA, cần bảo đảm cơ chế Suspend/Resume của driver đã hoạt động trước khi cấu hình Suspend Then Hibernate.

Kiểm tra NVIDIA driver:

nvidia-smi

Kiểm tra các tham số:

cat /proc/driver/nvidia/params | grep -Ei \
'UseKernelSuspendNotifiers|PreserveVideoMemoryAllocations|EnableS0ixPowerManagement'

Với NVIDIA Open Kernel Modules hỗ trợ Kernel Suspend Notifiers, cấu hình được kiểm thử là:

PreserveVideoMemoryAllocations: 2
UseKernelSuspendNotifiers: 1
EnableS0ixPowerManagement: 1

Trong đó:

  • UseKernelSuspendNotifiers=1: sử dụng kernel notifiers để xử lý Suspend/Resume.

  • PreserveVideoMemoryAllocations=2: sử dụng chế độ bảo toàn VRAM tự động của driver.

  • EnableS0ixPowerManagement=1: bật cơ chế NVIDIA S0ix Power Management.

Các giá trị trên là cấu hình đã được kiểm thử, không phải yêu cầu bắt buộc cho mọi phiên bản NVIDIA driver.

Nếu sử dụng NVIDIA systemd suspend services truyền thống, cần cấu hình driver và các services theo phương pháp đó. Không tự ý kết hợp hai cơ chế.

Đặc biệt, Suspend Then Hibernate có bước khôi phục GPU từ Suspend trước khi bắt đầu Hibernate. Vì vậy, một lỗi NVIDIA Resume có thể khiến toàn bộ quá trình bị treo.

2.1. Kiểm tra NVIDIA S0ix

cat /proc/driver/nvidia/gpus/*/power

Chú ý:

GPU Hardware Support:
 Video Memory Self Refresh: Supported
 Video Memory Off:          Supported

S0ix Power Management:
 Platform Support: Supported
 Status:           Enabled

Status: Enabled xác nhận cơ chế NVIDIA S0ix đang được bật và nền tảng hỗ trợ nó.

Tuy nhiên, không đồng nghĩa GPU chắc chắn đạt trạng thái tiết kiệm điện sâu trong mọi lần Suspend.

Không khuyến nghị tắt NVIDIA S0ix chỉ để tránh lỗi Suspend Then Hibernate. Nếu gặp lỗi, hãy thực hiện các bước Troubleshooting trước khi thay đổi tham số này.

3. Cấu hình Suspend Then Hibernate trong systemd

Nên tạo một systemd drop-in thay vì chỉnh sửa trực tiếp file cấu hình mặc định.

Tạo thư mục:

sudo mkdir -p /etc/systemd/sleep.conf.d

Tạo file:

sudo nano /etc/systemd/sleep.conf.d/90-suspend-then-hibernate.conf

Thêm nội dung:

[Sleep]
AllowSuspendThenHibernate=yes
HibernateDelaySec=3h
HibernateOnACPower=yes

Giải thích:

  • AllowSuspendThenHibernate=yes: cho phép sử dụng Suspend Then Hibernate.

  • HibernateDelaySec=3h: đặt thời gian Suspend trước khi yêu cầu Hibernate là 3 giờ. Hệ thống vẫn có thể Hibernate sớm hơn do điều kiện pin yếu.

  • HibernateOnACPower=yes: cho phép hệ thống chuyển sang Hibernate ngay cả khi đang cắm nguồn AC.

Có thể điều chỉnh thời gian theo nhu cầu, chẳng hạn 1h, 2h hoặc 4h.

Nếu đặt:

HibernateOnACPower=no

Trên hệ thống có pin, thời gian chờ Hibernate sẽ không tính khi máy đang cắm nguồn AC.

Lưu ý: Nếu các điều kiện hoặc cơ chế pin của hệ thống không hoạt động như mong đợi, thời điểm Hibernate có thể khác với thời gian cấu hình.

3.1. Kiểm tra cấu hình

systemd-analyze cat-config systemd/sleep.conf

Đảm bảo các giá trị vừa thiết lập xuất hiện trong cấu hình có hiệu lực.

Không cần enable thủ công systemd-suspend-then-hibernate.service. Đây là service do systemd kích hoạt khi yêu cầu thực hiện thao tác tương ứng.

4. Cấu hình hành động khi đóng nắp laptop

Nếu muốn đóng nắp laptop để tự động thực hiện Suspend Then Hibernate, có thể cấu hình qua systemd-logind.

Tạo thư mục:

sudo mkdir -p /etc/systemd/logind.conf.d

Tạo file:

sudo nano /etc/systemd/logind.conf.d/90-lid.conf

Thêm:

[Login]
HandleLidSwitch=suspend-then-hibernate
HandleLidSwitchExternalPower=suspend-then-hibernate

Trong đó:

  • HandleLidSwitch: thao tác khi đóng nắp laptop.

  • HandleLidSwitchExternalPower: thao tác khi đóng nắp trong lúc sử dụng nguồn AC.

Cấu hình này giúp chỉ định rõ hành vi, thay vì phụ thuộc vào các giá trị mặc định và thứ tự lựa chọn sleep operation của systemd.

Lưu ý: Nếu desktop environment, compositor hoặc một ứng dụng khác đang giữ inhibitor handle-lid-switch, systemd-logind có thể không trực tiếp xử lý hành động đóng nắp.

Kiểm tra:

systemd-inhibit --list

Kiểm tra cấu hình logind:

systemd-analyze cat-config systemd/logind.conf

Sau khi thay đổi cấu hình logind, nên reboot để bảo đảm toàn bộ thiết lập được áp dụng.

Nếu không muốn thay đổi hành vi mặc định khi đóng nắp, có thể bỏ qua bước này và gọi Suspend Then Hibernate thủ công.

5. Kiểm thử Suspend Then Hibernate

Trước tiên, nên thử nghiệm trong thời gian ngắn để không phải chờ nhiều giờ.

Tạo cấu hình tạm:

sudo nano /etc/systemd/sleep.conf.d/99-debug.conf

Thêm:

[Sleep]
HibernateDelaySec=2min

Kiểm tra:

systemd-analyze cat-config systemd/sleep.conf

Lưu toàn bộ công việc đang mở, sau đó chạy:

systemctl suspend-then-hibernate

Hệ thống dự kiến:

  1. Vào Suspend.

  2. Sau khoảng 2 phút, tự wake.

  3. Chuyển sang Hibernate.

  4. Tắt nguồn hoàn toàn sau khi lưu trạng thái bộ nhớ.

  5. Khôi phục phiên làm việc khi người dùng bật máy.

Nên kiểm thử riêng hai trường hợp:

  • Để nắp laptop mở.

  • Đóng nắp laptop trong quá trình Suspend và chuyển sang Hibernate.

Một hệ thống có thể Suspend Then Hibernate bình thường khi mở nắp nhưng thất bại khi nắp đóng, đặc biệt khi có lỗi firmware hoặc NVIDIA Power Management.

Sau khi kiểm thử, xóa cấu hình tạm:

sudo rm /etc/systemd/sleep.conf.d/99-debug.conf

Kiểm tra để bảo đảm thời gian Hibernate đã trở lại giá trị mong muốn.

6. Kiểm tra log Suspend Then Hibernate

Kiểm tra lịch sử boot:

journalctl --list-boots

Kiểm tra systemd:

journalctl -b \
  -u systemd-suspend-then-hibernate.service \
  -u systemd-hibernate.service \
  -u systemd-logind.service \
  --no-pager

Kiểm tra kernel:

journalctl -k -b --no-pager | grep -Ei \
'PM: suspend|PM: hibernation|NVRM|GSP|Xid|GC6'

Các thông báo mong đợi có thể bao gồm:

PM: suspend entry (s2idle)
PM: suspend exit
PM: hibernation: hibernation entry
PM: Image successfully loaded
PM: hibernation: hibernation exit

Tùy thời điểm ghi log và cơ chế resume, thông báo về hibernation image có thể xuất hiện trong boot khôi phục hoặc những phần khác của journal.

Không nên chỉ dựa vào dòng hibernation exit để kết luận Hibernate thành công. Cần xác nhận máy thực sự tắt nguồn và phiên làm việc được khôi phục.

6.1. Kiểm tra hardware sleep residency

Linux kernel có thể cung cấp thống kê thời gian phần cứng thực sự ở trạng thái ngủ.

Kiểm tra:

cat /sys/power/suspend_stats/last_hw_sleep
cat /sys/power/suspend_stats/total_hw_sleep
cat /sys/power/suspend_stats/max_hw_sleep

Các giá trị được tính bằng microsecond (µs).

Trong đó:

  • last_hw_sleep: thời gian hardware sleep ở lần Suspend gần nhất.

  • total_hw_sleep: tổng thời gian hardware sleep được kernel ghi nhận.

  • max_hw_sleep: giới hạn thời gian đo của bộ đếm.

Các số liệu này giúp đánh giá thời gian ngủ phần cứng, không trực tiếp đo điện năng tiêu thụ hoặc xác nhận toàn bộ thiết bị đều đạt trạng thái nguồn tối ưu.

7. Troubleshooting: Máy wake nhưng không Hibernate được

Một lỗi có thể xuất hiện khi sử dụng Suspend Then Hibernate là hệ thống Suspend thành công, nhưng sau khi được đánh thức để Hibernate thì GPU hoặc kernel bị treo.

Triệu chứng thường gặp:

  • RTC wake đúng thời gian.

  • Đèn nguồn hoặc đèn bàn phím sáng.

  • Máy không tắt nguồn để Hibernate.

  • Mở nắp không thể khôi phục màn hình.

  • Quạt hoặc thiết bị USB vẫn hoạt động.

  • Phải hard reset.

  • Nếu để lâu, laptop có thể cạn pin.

Không nên kết luận ngay nguyên nhân thuộc systemd hoặc swap.

7.1. Kiểm tra NVIDIA GSP errors

Kiểm tra:

journalctl -k -b -1 --no-pager | grep -Ei \
'NVRM|Xid|GSP|GC6|AMD-Vi|PM:'

Trên Lenovo LOQ 15ARP9, lỗi thực tế từng xuất hiện:

NVRM: GSP boot failed at resume

NVRM: GPU is unable to transition from GC6 to D0 state.

NVRM: Xid 119
Timeout after 45s of waiting for RPC response from GPU0 GSP!

Đồng thời, systemd ghi nhận:

Performing sleep operation 'hibernate'...

systemd-logind.service:
Watchdog timeout (limit 3min)!

Trong trường hợp này, RTC đã đánh thức máy và systemd đã bắt đầu yêu cầu Hibernate.

Tuy nhiên, GPU NVIDIA thất bại khi khôi phục trạng thái hoạt động, dẫn đến quá trình chuyển sang Hibernate không hoàn tất.

Cần điều tra đường Suspend/Resume của GPU trước khi thay đổi cấu hình Hibernate.

8. Ưu tiên khôi phục BIOS trước khi thay đổi NVIDIA S0ix

Đặc biệt quan trọng đối với Lenovo LOQ 15ARP9.

Theo ArchWiki, firmware của Lenovo LOQ 15ARP9 có thể bị kẹt trong trạng thái quản lý điện không nhất quán, khiến Suspend/Resume thất bại dù NVIDIA S0ix đã được bật đúng.

Trạng thái này có thể tồn tại qua nhiều lần reboot.

Vì vậy, không nên vội tắt NVIDIA S0ix hoặc thêm nhiều kernel parameters để khắc phục.

8.1. Kiểm tra phiên bản BIOS

sudo dmidecode -s bios-version
sudo dmidecode -s bios-release-date

Theo ArchWiki, nên sử dụng BIOS PQCN24WW trở lên trước khi thực hiện quy trình khôi phục firmware được tài liệu mô tả.

Nếu BIOS cũ hơn, tham khảo bản cập nhật phù hợp từ Lenovo.

8.2. Khôi phục BIOS về mặc định

Trên Lenovo LOQ 15ARP9:

  1. Khởi động lại máy.

  2. Nhấn F2 để truy cập BIOS.

  3. Nhấn F9 để đưa BIOS về mặc định

  4. Xác nhận khôi phục mặc định.

  5. Nhấn F10 để lưu và thoát.

Lưu ý:

  • Khôi phục BIOS có thể thay đổi Secure Boot, chế độ boot, cấu hình thiết bị và những tùy chỉnh firmware khác.

  • Mỗi máy có cách đưa BIOS về mặc định khác nhau

  • Nên ghi lại cấu hình hiện tại, bảo đảm có phương án khôi phục bootloader hoặc khóa Secure Boot nếu cần trước khi reset.

Sau khi vào Linux, kiểm tra NVIDIA S0ix:

cat /proc/driver/nvidia/params | grep -Ei \
'UseKernelSuspendNotifiers|PreserveVideoMemoryAllocations|EnableS0ixPowerManagement'

Kiểm tra trạng thái S0ix thực tế của driver:

cat /proc/driver/nvidia/gpus/*/power

Sau đó kiểm thử lại Suspend Then Hibernate khi đóng nắp laptop.

8.3. Kết quả kiểm thử thực tế

Trên Lenovo LOQ 15ARP9, BIOS PQCN31WW, NVIDIA Open Kernel Modules 615.78.08:

Trước khi reset BIOS:

  • Suspend hoạt động bình thường.

  • Hibernate độc lập hoạt động.

  • Suspend Then Hibernate với nắp mở hoạt động.

  • Suspend Then Hibernate với nắp đóng gây lỗi GSP và treo máy.

  • NVIDIA S0ix đang bật.

Sau khi sử dụng Load Default Settings:

  • Suspend Then Hibernate với nắp đóng hoạt động.

  • NVIDIA S0ix vẫn bật.

  • Không còn xuất hiện lỗi Xid 119 trong lần kiểm thử thành công.

  • systemd hoàn tất Hibernate.

  • Kernel ghi nhận hardware sleep residency.

Kết quả này phù hợp với mô tả lỗi firmware trong ArchWiki, nhưng chưa đủ để xác định chính xác thành phần firmware nội bộ nào gây lỗi.

Vì vậy, reset BIOS về mặc định nên được ưu tiên kiểm tra trước khi vô hiệu hóa NVIDIA S0ix trên dòng máy này.

9. Workaround: Vô hiệu hóa NVIDIA S0ix Power Management

Nếu đã kiểm tra firmware, reset BIOS và các cấu hình Suspend/Resume liên quan nhưng lỗi vẫn tiếp diễn, có thể thử tắt NVIDIA S0ix để xác định lỗi có liên quan đến đường quản lý nguồn này hay không.

Tham số:

nvidia.NVreg_EnableS0ixPowerManagement=0

Thêm tham số này vào cấu hình NVIDIA module hoặc kernel parameters theo phương pháp hệ thống đang sử dụng.

Sau khi thay đổi, reboot rồi kiểm tra:

cat /proc/driver/nvidia/params | grep EnableS0ixPowerManagement

Kết quả:

EnableS0ixPowerManagement: 0

Kiểm tra:

cat /proc/driver/nvidia/gpus/*/power

Trạng thái:

S0ix Power Management:
 Platform Support: Supported
 Status:           Disabled

9.1. Vì sao không khuyến nghị tắt S0ix?

Theo tài liệu NVIDIA, S0ix Power Management cho phép driver quản lý điện năng GPU và VRAM khi hệ thống Suspend bằng s2idle.

Tùy mức sử dụng VRAM, driver có thể:

  • Sao chép dữ liệu VRAM sang RAM rồi tắt nguồn GPU và VRAM.

  • Giữ VRAM trong chế độ self-refresh, đồng thời giảm nguồn điện cho các thành phần còn lại của GPU.

Vô hiệu hóa NVreg_EnableS0ixPowerManagement làm mất đường quản lý nguồn S0ix chuyên biệt này.

Điều đó không đồng nghĩa tắt toàn bộ NVIDIA Dynamic Power Management hoặc Runtime D3, nhưng có thể làm giảm hiệu quả tiết kiệm điện khi Suspend.

Mức hao pin thực tế phụ thuộc phần cứng và cần được đo riêng.

9.2. Kết quả workaround thực tế

Trên Lenovo LOQ 15ARP9 được kiểm thử:

  • EnableS0ixPowerManagement=1: Suspend Then Hibernate bị treo khi đóng nắp trước khi reset BIOS.

  • EnableS0ixPowerManagement=0: Suspend Then Hibernate hoạt động khi đóng nắp.

  • Khôi phục BIOS về mặc định và bật lại S0ix: Suspend Then Hibernate tiếp tục hoạt động.

Như vậy, tắt S0ix đã tránh được lỗi trong quá trình kiểm thử, nhưng không phải giải pháp được ưu tiên hoặc bằng chứng rằng chính S0ix bị lỗi.

Đường quản lý nguồn này có thể chỉ làm lộ một trạng thái firmware không nhất quán.

Nếu workaround hoạt động, có thể sử dụng tạm thời khi cần tính ổn định, sau đó điều tra firmware hoặc driver để bật lại S0ix.

9.3. Những thay đổi khác cần thận trọng

Không tự động áp dụng:

pcie_aspm=off

hoặc:

nvme_core.default_ps_max_latency_us=0

để sửa mọi lỗi Suspend Then Hibernate.

pcie_aspm=off ảnh hưởng đến PCIe ASPM, còn nvme_core.default_ps_max_latency_us=0 vô hiệu hóa NVMe APST.

Cả hai có thể làm tăng điện năng tiêu thụ. Chỉ nên thử khi có cơ sở nghi ngờ lỗi tương ứng và cần kiểm tra hiệu quả từng tham số riêng biệt.

10. Khôi phục cấu hình và kết quả kiểm thử

Sau khi kiểm thử thành công, xóa các cấu hình debug không còn cần thiết.

Ví dụ:

sudo rm -f /etc/systemd/sleep.conf.d/99-debug.conf

Nếu từng tạo cấu hình bỏ qua Lid Switch để thử nghiệm:

sudo rm -f /etc/systemd/logind.conf.d/99-lid-debug.conf

Không xóa các file cấu hình chính đã tạo ở bước 4 và 5.

Kiểm tra:

systemd-analyze cat-config systemd/sleep.conf
systemd-analyze cat-config systemd/logind.conf

Kiểm tra NVIDIA:

cat /proc/driver/nvidia/params | grep -Ei \
'UseKernelSuspendNotifiers|PreserveVideoMemoryAllocations|EnableS0ixPowerManagement'

Kiểm tra S0ix:

cat /proc/driver/nvidia/gpus/*/power

Reboot để xác nhận cấu hình sau cùng không còn phụ thuộc vào các file debug.

Kết quả kiểm thử thực tế

Hệ thống:

image

Cấu hình NVIDIA cuối cùng:

PreserveVideoMemoryAllocations: 2
UseKernelSuspendNotifiers: 1
EnableS0ixPowerManagement: 1

NVIDIA systemd suspend services truyền thống được giữ ở trạng thái disabled.

Cấu hình systemd:

[Sleep]
AllowSuspendThenHibernate=yes
HibernateDelaySec=3h
HibernateOnACPower=yes

Kết quả:

  • Suspend riêng lẻ hoạt động.

  • Hibernate riêng lẻ hoạt động.

  • Suspend Then Hibernate hoạt động khi mở nắp.

  • Suspend Then Hibernate hoạt động khi đóng nắp sau khi reset BIOS.

  • NVIDIA S0ix vẫn Enabled.

  • Kernel ghi nhận hardware sleep residency.

  • Không còn GSP RPC timeout trong các lần kiểm thử thành công được ghi nhận.

Trong quá trình kiểm thử, last_hw_sleep ghi nhận khoảng 117 giây hardware sleep cho chu kỳ Suspend kéo dài khoảng 2 phút.

Kết quả cho thấy hệ thống đã đạt trạng thái ngủ phần cứng trong phần lớn thời gian Suspend, nhưng không thay thế phép đo tiêu thụ điện thực tế.

Kết luận: Suspend Then Hibernate có thể hoạt động ổn định với NVIDIA S0ix và Kernel Suspend Notifiers nếu firmware cùng driver được cấu hình và hoạt động đúng.

Trên Lenovo LOQ 15ARP9, nếu gặp lỗi Suspend/Resume hoặc Suspend Then Hibernate dù S0ix đã bật, nên kiểm tra và khôi phục BIOS về mặc định trước khi sử dụng các workaround làm giảm khả năng quản lý điện năng.

Kết quả kiểm thử không bảo đảm mọi phiên bản BIOS, NVIDIA driver hoặc kernel sẽ có hành vi tương tự.

11. Tài liệu tham khảo

  • systemd-sleep.conf — systemd

  • NVIDIA — Configuring Power Management Support

  • ArchWiki — Lenovo LOQ 15ARP9

  • ArchWiki — Power management/Suspend and hibernate

  • ArchWiki — NVIDIA

  • Linux Kernel — System Sleep States

1

Thảo luận

0 bình luận

Đang tải bình luận…

?