Portál AbcLinuxu, 14. května 2025 02:17

Dotaz: Chyba "PM: Not enough free memory" při hibernaci

Aleš Janda avatar 28.6.2008 22:30 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Chyba "PM: Not enough free memory" při hibernaci
Přečteno: 486×
Odpovědět | Admin
Zdravím,

mám Fedoru 9 a v poslední době se mi nějak rozbila hibernace. Nedokážu moc říci, kvůli čemu se rozbila (jednou se nevzbudil z hibernace a něco zůstalo ve swapu, ale to bylo ještě na jiném jádru), nicméně současný stav:

Při pokusu o hibernaci obrazovka ztmavne, pak to něco dělá a za chvíli se běh zase obnoví. Soubor /var/log/messages z té doby říká toto (zmenšeny asi nepodstatné části):
Jun 28 21:44:00 doma kernel: PM: Syncing filesystems ... done.
Jun 28 21:44:00 doma kernel: Freezing user space processes ... (elapsed 0.00 seconds) done.
Jun 28 21:44:00 doma kernel: Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Jun 28 21:44:00 doma kernel: PM: Shrinking memory...  #010-#010\#010|#010/#010-#010\#010|#010/#010done (81098 pages freed)
Jun 28 21:44:00 doma kernel: PM: Freed 324392 kbytes in 1.89 seconds (171.63 MB/s)
Jun 28 21:44:00 doma kernel: Suspending console(s)
Jun 28 21:44:00 doma kernel: sd 2:0:0:0: [sdb] Synchronizing SCSI cache
Jun 28 21:44:00 doma kernel: sd 0:0:0:0: [sda] Synchronizing SCSI cache
Jun 28 21:44:00 doma kernel: gspca 2-1:1.0: no suspend for driver gspca?
Jun 28 21:44:00 doma kernel: mpu401 00:0d: disabled
Jun 28 21:44:00 doma kernel: serial 00:0a: disabled
Jun 28 21:44:00 doma kernel: parport_pc 00:09: disabled
Jun 28 21:44:00 doma kernel: [fglrx] Power down the ASIC .
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:11.5 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:10.4 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:10.3 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:10.2 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:10.1 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:10.0 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:0f.1 disabled
Jun 28 21:44:00 doma kernel: ACPI: PCI interrupt for device 0000:00:0f.0 disabled
Jun 28 21:44:00 doma kernel: pci_set_power_state(): 0000:00:00.0: state=3, current state=5
Jun 28 21:44:00 doma kernel: Disabling non-boot CPUs ...
Jun 28 21:44:00 doma kernel: PM: Creating hibernation image: 
Jun 28 21:44:00 doma kernel: PM: Need to copy 121300 pages
Jun 28 21:44:00 doma kernel: PM: Not enough free memory
Jun 28 21:44:00 doma kernel: PM: Error -12 creating hibernation image
Jun 28 21:44:00 doma kernel: Intel machine check architecture supported.
Jun 28 21:44:00 doma kernel: Intel machine check reporting enabled on CPU#0.
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:0f.0[B] -> GSI 20 (level, low) -> IRQ 20
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:0f.1[A] -> GSI 20 (level, low) -> IRQ 20
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:10.0[A] -> GSI 21 (level, low) -> IRQ 21
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:10.1[A] -> GSI 21 (level, low) -> IRQ 21
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:10.2[B] -> GSI 21 (level, low) -> IRQ 21
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:10.3[B] -> GSI 21 (level, low) -> IRQ 21
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:10.4[C] -> GSI 21 (level, low) -> IRQ 21
Jun 28 21:44:00 doma kernel: ACPI: PCI Interrupt 0000:00:11.5[C] -> GSI 22 (level, low) -> IRQ 22
Jun 28 21:44:00 doma kernel: eth0: link up, 100Mbps, half-duplex, lpa 0x40A1
Jun 28 21:44:00 doma kernel: [fglrx:KCL_enable_pat] *ERROR* Pat entry 2 is already configured
Jun 28 21:44:00 doma kernel: [fglrx] Power up the ASIC
Jun 28 21:44:00 doma kernel: parport_pc 00:09: activated
Jun 28 21:44:00 doma kernel: serial 00:0a: activated
Jun 28 21:44:00 doma kernel: mpu401 00:0d: activated
Jun 28 21:44:00 doma kernel: ata3.00: ACPI cmd ef/03:45:00:00:00:a0 filtered out
Jun 28 21:44:00 doma kernel: ata3.00: ACPI cmd ef/03:0c:00:00:00:a0 filtered out
Jun 28 21:44:00 doma kernel: ata3.00: configured for UDMA/100
Jun 28 21:44:00 doma kernel: sd 2:0:0:0: [sdb] 390721968 512-byte hardware sectors (200050 MB)
Jun 28 21:44:00 doma kernel: sd 2:0:0:0: [sdb] Write Protect is off
Jun 28 21:44:00 doma kernel: sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Jun 28 21:44:00 doma kernel: ata1.00: configured for UDMA/133
Jun 28 21:44:00 doma kernel: sd 0:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB)
Jun 28 21:44:00 doma kernel: sd 0:0:0:0: [sda] Write Protect is off
Jun 28 21:44:00 doma kernel: sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Jun 28 21:44:00 doma kernel: ata4.00: ACPI cmd ef/03:44:00:00:00:a0 filtered out
Jun 28 21:44:00 doma kernel: ata4.00: ACPI cmd ef/03:0c:00:00:00:a0 filtered out
Jun 28 21:44:00 doma kernel: ata4.00: configured for UDMA/66
Jun 28 21:44:00 doma kernel: gspca 2-1:1.0: no resume for driver gspca?
Jun 28 21:44:00 doma kernel: sd 0:0:0:0: [sda] Starting disk
Jun 28 21:44:00 doma kernel: sd 2:0:0:0: [sdb] Starting disk
Jun 28 21:44:00 doma kernel: Restarting tasks ... done.
Jun 28 21:44:04 doma acpid: client connected from 3266[0:0]
Jun 28 21:44:06 doma gnome-power-manager: (ales) Probuzení počítače
Čili chyba je zřejmá. Napíše to
kernel: PM: Need to copy 121300 pages
a poté
kernel: PM: Not enough free memory
kernel: PM: Error -12 creating hibernation image
Otázka je proč? Mám 1 GB paměti, při hibernaci byla využitá max. půlka. Swap mám na /dev/VolGroup00/LogVol00 veliký 4 GB, což je více než dost. Po nabootování je normálně aktivní, ve fstabu to ovlivňuje tento řádek:
#VolGroup00/LogVol00 (swap)
UUID=a8c17385-b64c-4045-b63e-847247e40bdf	swap	swap	defaults	0	0
ve free se normálně ukáže, zkrátka funguje. Fakt je, že je v LVM, ale tam byl i dříve a chodilo to.

Díval jsem se i přímo do kódu jádra, co přesně to zapřičiňuje, ale moc moudrý z toho nejsem.

Mohli byste mě nakopnout, co bych kde měl udělat? Jádro mám 2.6.25.6-55.fc9.i686. Myslím, že to bude jen nějaká banalita, jen na to přijít.

Díky moc.
Zahrajte si trojšachy přes internet :-)
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.6.2008 08:41 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Odpovědět | | Sbalit | Link | Blokovat | Admin
volnou pamet lze zjistit prikazem free, a tento problem typicky nastava pokud se obraz pameti nevejde do swapu (jelikoz hibernace probiha do swapu). ja bych to resil vymenou hibernacniho systemu na tuxonice, kterej dokaze hibernovat i jinam a tudiz tato situace nehrozi.
In Ada the typical infinite loop would normally be terminated by detonation.
Aleš Janda avatar 30.6.2008 10:09 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Díky. To, že se nevejde obraz do swapu by nemělo nastat; právě proto mám swap 4 GB. Před hibernací byl swap prázdný.

TuxOnIce jsem dlouhou dobu spokojeně používal, ale rád bych měl standardní jádro, protože

1) pro tuxonice není přeloženo fglrx (zřejmě)

2) když spustím jádro s tuxonice, tak se pokouší obnovit uspaný počítač z nějakého oddílu, který už ani neexistuje (napřed psal jinou hlášku a pak jsem dělal rošády s diskem, takže už ten oddíl vůbec není, ale vyjde to nastejno). To se samozřejmě nepovede a počítač vůbec nenabootuje. Bohužel zatím nevím co s tím, nepodařilo se mi ho přesvědčit aby nabootoval čistý systém.
30.6.2008 10:14 Miška | skóre: 31 | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
2) parametr jadra resume2
Aleš Janda avatar 30.6.2008 10:40 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Jak přesně? V grubu jsem najel na to jádro, stiskl 'a' a na konec řádku napsal resume2. Nestalo se nic (co by bez něj nenastalo) :-( Zkoušel jsem i resume, Resume, resume=něco, ale neúspěšně.

Napíše to jen "Trying resume from device from command line." Pak něco jako failed, "Hibernation will be disabled.". Ale hned další řádek "Trying resume from swap: UUID=..." a to je právě ten oddíl, který tam už vůbec není.
30.6.2008 13:02 Miška | skóre: 31 | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
resume2=/dev/sda1 resume=/dev/sda1
Samozrejme sda1 nahradit spravnym oddilem ;-)
Aleš Janda avatar 2.7.2008 22:27 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Už jsem na to přišel: parametr "noresume". Ovšem příliš to nefungovalo, to jsem však vyřešil přepsáním oddílu přímo v /boot/initrd-JÁDRO.img.

Nicméně hibernace nefunguje, nerozpozná oddíl, viz níže :-(
michich avatar 29.6.2008 12:52 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Koukáš na nesprávné místo ve zdrojáku. Ta tvá chybová hláška je v kernel/power/snapshot.c na řádku 1255.

Používáš fglrx... chovalo by se to stejně i bez něj?
Aleš Janda avatar 30.6.2008 10:17 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Díky, koukal jsem na starší verzi jádra.

A s tím fglrx - zvláštní, ale opravdu to tím je! Pokud dám pryč fglrx, počítač se v pořádku uspí. Bohužel, po opětovném zapnutí nějak nepozná, že by se měl obnovit a najede čistý systém. Současně ale přece jen pozná, že swap je nějaký divný a odmítne ho přimountovat. Musím dát znovu mkswap a swapon. Čili to bohužel nefunguje :-(

A ještě jedna zvláštnost - pokud mám zavedeno fglrx, ale nemám swap, tak se ty dvě hlášky (Not enough free memory a Error -12 creating hibernation image) vůbec neobjeví, naopak to proběhne v pořádku, a až dál to teda zhavaruje na tom, že nemám swap. (Jak to že to najednou projde?)
30.6.2008 12:13 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Není ten swap nějak poškozen, nebo nějaké problémy s diskem ? Co swap smazat a vytvořit jinde, znovu a pod....?
Aleš Janda avatar 2.7.2008 22:25 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Zkusil jsem. Swap jsem dal pryč z LVM, je to normální oddíl. Mkswap jsem dělal nespočetněkrát. Ale bohužel :-(
Aleš Janda avatar 2.7.2008 22:24 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky moc za rady. Strávil jsem nad tím hromadu času, postupně jsem řešil všechny problémy, objevovaly se další, ale hibernace bohužel stále nefunguje. Teda: hibernace se podaří vždy (s tuxonice i bez, s fglrx i bez), ale nikdy se z ní neprobudí:

- jádro TuxOnIce chce parametr resume=oddíl, aby věděl, z čeho se obnovit. V manuálu se píše, že má být ten parametr ve formátu resume=swap:/dev/oddíl. Když to dám takto, hibernace proběhne, ale při obnově to napíše "Unable to access resume device". Když to dám jen ve tvaru resume=/dev/oddíl, tak ho najde, ale napíše že "No swap signature found at ..." a najede zas čistý systém. Tak nevím.

- standardní jádro nenapíše nikdy nic a rovnou najede čistý systém. U toho žádný parametr nemám (a když ho dám, tak to samé)

V obou případech se ale při hibernaci do swapu přece jen něco uloží, protože se mi při tom najetí čistého systému odmítne připojit swap. Musím ho znova vytvořit přes mkswap.

A co je ještě dost zajímavé, mám fyzicky dva disky, označené jako /dev/sda a /dev/sdb. V tuxonice jsou ale naopak než ve standardním jádru! (Tak mi to ukazuje i fdisk.) Takže mám-li normálně swap jako /dev/sda2, v tuxonice je to /dev/sdb2. Magořina. Možná je to tím, že jsem měnil /boot/initrd-xxx.img, ale neumím si to nijak vysvětlit.

Tady už nevím jak dál. Jestli jste se tedy s tím někdo setkal, budu vděčný za každou radu. Hibernace je pro mě docela klíčová :-(
Zahrajte si trojšachy přes internet :-)
michich avatar 2.7.2008 23:37 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Chyba "PM: Not enough free memory" při hibernaci
Mně to funguje i se swapem na LVM, tím to nebude.

Standardně se informace o tom, odkud se má načítat uložený obraz, nachází právě v initrd*.img. V nash skriptu 'init' tam bývá instrukce 'resume /dev/...'. mkinitrd to tam musí sám dát.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.