Estou procurando conselhos sobre opções adequadas de linha de comando do kernel e/ou configurações de BIOS para um sistema Supermicro X10DAL-i (com CPUs Xeon duplas) para suspensão adequada para RAM em kernels Linux recentes. Atualmente estou executando este kernel:
Linux 4.17.2-1-ARCH #1 SMP PREEMPT Sat Jun 16 11:08:59 UTC 2018 x86_64 GNU/Linux
Em meus outros computadores, suspender para RAM "simplesmente funciona" com Linux. No entanto, neste sistema, ele não seria retomado após ser suspenso durante a noite. Meu palpite é que o sistema entrou em um estado de suspensão "muito profundo". Eu não estou usando hibernate ou suspend-hybrid. Eu só quero suspender a RAM.
Em um teste anterior de suspensão, o sistema foi retomado após alguns minutos de suspensão. Tudo o que eu tinha que fazer era apertar qualquer tecla do teclado. Mas depois de ser suspenso durante a noite, não respondeu. Apertei brevemente o botão de energia. Em resposta a isso, os ventiladores ligaram e pensei que o sistema poderia ser retomado, mas não. Não consegui acessá-lo via console ou SSH.
A única diferença entre este sistema e meus outros sistemas que serão suspensos e retomados é a placa-mãe (e tem mais RAM). Em todos os meus sistemas estou usando systemd, systemd-boot e UEFI. Estou executando o KDE. Eu tenho uma GPU nvidia com o driver proprietário. Meu outro sistema com a mesma GPU e driver suspende e reinicia corretamente.
Eu testei suspender neste sistema usando a opção de menu do KDE (suspender) e com systemd suspend
. Como mencionei, esses testes curtos pareciam funcionar. Mas não seria retomado a partir de uma suspensão durante a noite.
A BIOS exibe a marca American Megatrends Inc. Vejo opções para alterar o estado da CPU P, o estado da CPU HWPM e o estado da CPU C junto com outras opções. Não estou familiarizado com nenhuma dessas opções e, atualmente, todas estão definidas com os valores padrão (ou seja, a configuração de substituição "Tecnologia de energia" está definida como "Eficiente em energia", que aparentemente gerencia todas essas configurações automaticamente).
Minha pergunta é quais configurações devo tentar suspender a ram funcionando nas versões recentes do Linux?
Aqui estão as entradas de log finais quando o sistema entrou em modo de suspensão para ram:
Jun 26 23:20:26 X10DALi systemd[1]: Starting system activity accounting tool...
Jun 26 23:20:26 X10DALi systemd[1]: Started system activity accounting tool.
Jun 26 23:30:26 X10DALi systemd[1]: Starting system activity accounting tool...
Jun 26 23:30:26 X10DALi systemd[1]: Started system activity accounting tool.
Jun 26 23:32:16 X10DALi NetworkManager[997]: <info> [1530070336.6408] manager: sleep: sleep requested (sleeping: no enabled: yes)
Jun 26 23:32:16 X10DALi NetworkManager[997]: <info> [1530070336.6413] manager: NetworkManager state is now ASLEEP
Jun 26 23:32:17 X10DALi systemd[1]: Reached target Sleep.
Jun 26 23:32:17 X10DALi systemd[1]: Starting Suspend...
Jun 26 23:32:17 X10DALi systemd-sleep[10662]: Suspending system...
Jun 26 23:32:17 X10DALi kernel: PM: suspend entry (deep)
Estou curioso sobre a linha com "systemd-sleep" porque os únicos 4 estados de economia de energia do systemd com os quais estou familiarizado são:
- suspender (que é o que eu usei)
- hibernar
- sono híbrido
- suspender-e-hibernar
Não há entradas de diário para esta inicialização após o acima. Eu tive que reiniciar o sistema (reinicialização de energia) para fazê-lo "acordar".
Isso pode ser relevante:
Eu tenho o pacote [upower][1]
instalado (Versão: 0.99.7-1). (Foi instalado como uma dependência do kdelibs.) Não alterei nenhuma configuração em /etc/UPower/UPower.conf e como este é um sistema desktop, não tenho certeza se o upower é relevante.
cat /sys/power/disco
[platform] shutdown reboot suspend test_resume
cat /sys/power/state
freeze mem disk
gato /proc/acpi/wakeup
Device S-state Status Sysfs node
IP2P S3 *disabled
EHC1 S4 *enabled pci:0000:00:1d.0
EHC2 S4 *enabled pci:0000:00:1a.0
RP01 S4 *disabled pci:0000:00:1c.0
PXSX S4 *disabled
RP02 S4 *disabled
PXSX S4 *disabled
RP03 S4 *disabled pci:0000:00:1c.2
PXSX S4 *enabled pci:0000:04:00.0
RP04 S4 *disabled pci:0000:00:1c.3
PXSX S4 *enabled pci:0000:05:00.0
RP05 S4 *disabled
PXSX S4 *disabled
RP06 S4 *disabled
PXSX S4 *disabled
RP07 S4 *disabled
PXSX S4 *disabled
RP08 S4 *disabled
PXSX S4 *disabled
BR1A S4 *disabled pci:0000:00:01.0
PXSX S4 *disabled
BR1B S4 *disabled
PXSX S4 *disabled
BR2A S4 *disabled
PXSX S4 *disabled
BR2B S4 *disabled
PXSX S4 *disabled
BR2C S4 *disabled
PXSX S4 *disabled
BR2D S4 *disabled
PXSX S4 *disabled
BR3A S4 *disabled pci:0000:00:03.0
PXSX S4 *disabled
BR3B S4 *disabled
PXSX S4 *disabled
BR3C S4 *disabled
PXSX S4 *disabled
BR3D S4 *disabled
PXSX S4 *disabled
XHCI S4 *enabled pci:0000:00:14.0
QRP0 S4 *disabled
PXSX S4 *disabled
QR1A S4 *disabled
PXSX S4 *disabled
QR1B S4 *disabled
PXSX S4 *disabled
QR2A S4 *disabled pci:0000:80:02.0
PXSX S4 *disabled
QR2B S4 *disabled
PXSX S4 *disabled
QR2C S4 *disabled
PXSX S4 *disabled
QR2D S4 *disabled pci:0000:80:02.3
PXSX S4 *disabled
QR3A S4 *disabled
PXSX S4 *disabled
QR3B S4 *disabled
PXSX S4 *disabled
QR3C S4 *disabled
PXSX S4 *disabled
QR3D S4 *disabled
PXSX S4 *disabled
RRP0 S4 *disabled
PXSX S4 *disabled
RR1A S4 *disabled
PXSX S4 *disabled
RR1B S4 *disabled
PXSX S4 *disabled
RR2A S4 *disabled
PXSX S4 *disabled
RR2B S4 *disabled
PXSX S4 *disabled
RR2C S4 *disabled
PXSX S4 *disabled
RR2D S4 *disabled
PXSX S4 *disabled
RR3A S4 *disabled
PXSX S4 *disabled
RR3B S4 *disabled
PXSX S4 *disabled
RR3C S4 *disabled
PXSX S4 *disabled
RR3D S4 *disabled
PXSX S4 *disabled
SRP0 S4 *disabled
PXSX S4 *disabled
SR1A S4 *disabled
PXSX S4 *disabled
SR1B S4 *disabled
PXSX S4 *disabled
SR2A S4 *disabled
PXSX S4 *disabled
SR2B S4 *disabled
PXSX S4 *disabled
SR2C S4 *disabled
PXSX S4 *disabled
SR2D S4 *disabled
PXSX S4 *disabled
SR3A S4 *disabled
PXSX S4 *disabled
SR3B S4 *disabled
PXSX S4 *disabled
SR3C S4 *disabled
PXSX S4 *disabled
SR3D S4 *disabled
PXSX S4 *disabled
Eu não tenho um /etc/systemd/sleep.conf
arquivo (ou qualquer arquivo sleep.conf.d).
ATUALIZAÇÃO: Estou adicionando mais informações:
dmesg | grep ocioso
[ 0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370452778343963 ns
[ 0.000000] RCU dyntick-idle grace-period acceleration is enabled.
[ 0.000000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484882848 ns
[ 0.019999] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fa2b80c9f8, max_idle_ns: 440795260495 ns
[ 0.064738] process: using mwait in idle threads
[ 1.178343] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370867519511994 ns
[ 1.180025] cpuidle: using governor ladder
[ 1.180037] cpuidle: using governor menu
[ 17.698747] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[ 18.097294] intel_idle: MWAIT substates: 0x2120
[ 18.097295] intel_idle: v0.4.1 model 0x4F
[ 18.099136] intel_idle: lapic_timer_reliable_states 0xffffffff
[ 19.090095] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fa3704c1a9, max_idle_ns: 440795296692 ns
CPU: 2x Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
A Supermicro sugeriu estas configurações do BIOS:
Advanced Power Management Configuration -> Power Technology Select Custom to customize system power settings
CPU C State Control: choose the options are C0/1 state, C2 state, C6 (non-Retention) state, and C6 (Retention) state.
Eu tive que limitar os estados C da CPU ao nível C2 para fazer com que meu sistema voltasse da suspensão para a RAM. Esse é o take-away geral.
Especificamente, em relação ao Supermicro X10DAL com CPUs Xeon E5-2630 v4, certifique-se de estar executando o Supermicro BIOS 3.0a ou posterior. Inicialize no BIOS e vá para Advanced > CPU Configuration > Advanced Power Management CONfiguration. Defina a tecnologia de energia como personalizada. Defina o Controle de Estado C da CPU para C2.
Meu sistema agora suspenderá e retomará usando
systemd suspend
ou por meio de comandos de suspensão DE.