Re: 2.6.37-rc1+: hibernate regression, claims not enough swap space

Rafael J. Wysocki
2010-11-16T22:28:41Z

On Tuesday, November 16, 2010, Pavel Machek wrote:
> Hi!
>
> > > ...but there's enough -- or at least it was enough to fit previous
> > > versions. 32-bit machine, so it has highmem.
> > >
> > > System is in console mode, very lightly loaded.
> > >
> > > Mem: 2054716k total, 736548k used, 1318168k free, 15368k buffers
> > > Swap: 779148k total, 2360k used, 776788k free, 546388k cached
> >
> > Well, the swap is rather in short supply. Below the 50% of RAM recommendation.
>
> Well, but the biggest image we can write is not 50% of RAM, but 50% of
> lowmem...

No, it is not. It's been 50% of RAM for a couple of years now. :-)

> and swap is nearly as big as lowmem in this case -- so this
> machine is not misconfigured.
>
> root@amd:/# cat /proc/meminfo
> MemTotal: 2054716 kB
> MemFree: 192048 kB
> Buffers: 97628 kB
> Cached: 1427088 kB
> SwapCached: 0 kB
> Active: 547580 kB
> Inactive: 1091744 kB
> Active(anon): 57060 kB
> Inactive(anon): 58908 kB
> Active(file): 490520 kB
> Inactive(file): 1032836 kB
> Unevictable: 0 kB
> Mlocked: 0 kB
> HighTotal: 1178440 kB
> HighFree: 128092 kB
> LowTotal: 876276 kB
> LowFree: 63956 kB
> SwapTotal: 779148 kB
> SwapFree: 779148 kB
>
> > > thinkpad_acpi: ACPI backlight control delay disabled
> > > PM: thaw of devices complete after 539.577 msecs
> > > PM: writing image.
> > > PM: Free swap pages: 194166
> > > PM: Not enough free swap
> > > Restarting tasks ...
> > >
> > > Aha, and it is the new default /sys/power/image_size .. setting it to
> > > 0 lets machine hibernate. I guess the new default is very wrong for
> > > highmem machine...
> >
> > The old default did the wrong thing for everyone with sufficient swap (it made
> > the OOM code trigger every time while preparing to create an image), so I think
> > the new one it's better overall.
>
> OOM? No... image_size of 0 should have written "as small image as
> possible"; slow, but should not OOM.

This is not how it works now. We preallocate memory to create memory pressure,
so if image_size is 0, we need to preallocate until we run out of pages that
can be freed, which means OOM.

Thanks,
Rafael