public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: david@lang.hm
Cc: Jeremy Maitin-Shepard <jbms@cmu.edu>,
	"Huang, Ying" <ying.huang@intel.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Pavel Machek <pavel@ucw.cz>,
	nigel@nigel.suspend2.net, linux-kernel@vger.kernel.org,
	linux-pm@lists.linux-foundation.org
Subject: Re: [PATCH 0/2] Kexec jump: The first step to kexec base hibernation
Date: Fri, 13 Jul 2007 13:41:34 +0200	[thread overview]
Message-ID: <200707131341.35801.rjw@sisk.pl> (raw)
In-Reply-To: <Pine.LNX.4.64.0707130211570.25614@asgard.lang.hm>

On Friday, 13 July 2007 11:25, david@lang.hm wrote:
> On Fri, 13 Jul 2007, Rafael J. Wysocki wrote:
> 
> > Date: Fri, 13 Jul 2007 11:17:37 +0200
> > From: Rafael J. Wysocki <rjw@sisk.pl>
> > To: david@lang.hm
> > Cc: Jeremy Maitin-Shepard <jbms@cmu.edu>,
> >     "Huang, Ying" <ying.huang@intel.com>,
> >     Andrew Morton <akpm@linux-foundation.org>, Pavel Machek <pavel@ucw.cz>,
> >     nigel@nigel.suspend2.net, linux-kernel@vger.kernel.org,
> >     linux-pm@lists.linux-foundation.org
> > Subject: Re: [PATCH 0/2] Kexec jump: The first step to kexec base hibernation
> > 
> > On Friday, 13 July 2007 05:12, david@lang.hm wrote:
> >> On Thu, 12 Jul 2007, Jeremy Maitin-Shepard wrote:
> >>
> >>> "Rafael J. Wysocki" <rjw@sisk.pl> writes:
> >>>>>>> 3. Support the in-place kexec? The relocatable kernel is not necessary
> >>>>>>> if this can be implemented.
> >>>>>>> 4. Image writing/reading. (Only user space application is needed).
> >>>>>>
> >>>>>> And a kernel interface for that application.
> >>>>>
> >>>>> I do't understand this statement, this application is just useing the
> >>>>> standard kernel interfaces (block devices to read/write to disk, network
> >>>>> devices to read/write to a server, etc). no new interfaces needed.
> >>>
> >>>> Yes, but it will have to know _what_ to save, no?
> >>>
> >>> I agree that a kernel interface would be important; something like
> >>> /dev/snapshot that can be read by the "save image" kernel, and written
> >>> to by the "restore image" kernel.  Note that similarly, kdump provides a
> >>> kernel interface to an ELF image of the old kernel.
> >>
> >> I thought that the idea was to save the entire contents of ram so that
> >> caches, etc remain populated.
> >>
> >> having the system kernel free up ram and then making a sg list of what
> >> memory needs to be backed up would be a nice enhancement, but let's let
> >> that remain a future enhancement until everyone agrees that the basic
> >> approach works.
> >
> > It's not that easy. :-)
> >
> > First, there are memory regions that we don't want to save, because the
> > restoration of them may cause problems (generally all of the reserved pages
> > fall into this category).
> >
> > We also don't want to save free RAM and we don't want to save the memory
> > occupied by the hibernation kernel (ie. the "new" one).
> 
> free ram is useually a pretty small number of pages (unless you free up 
> ram before suspend). avoiding the ram reserved for the new kernel should 
> be pretty simple (actually, it doesn't hurt much to save that ram, it just 
> hurts if you try to restore it)
> 
> > Also, please note that we can't restore 100% of RAM, even if we save it.
> 
> Ok, now we need a data channel from the old kernel to the hibernate 
> kernel, to the restore kernel. and the messier the memory layout the 
> larger this data channel needs to be (hmm, what's the status on the memory 
> defrag patches being proposed?) if this list can be made small enough it 
> would work to just have the old kernel put the data in a known location in 
> ram, and let the other two parts find it (in ram for the hibernate kernel, 
> in the hibernate image for the wakeup kernel).

I think the hibernation kernel should mmap() the "old" kernel's (and it's
processes') memory available for saving, so that the image-saving process
can read its contents from the original locations.

> how do the existing hibernate processes store this?

There are two approaches.  In the first of them (used in the mainline) we just
create copies of all pages eligible for saving (hence we can't create images
larger than 50% of RAM) atomically and then we save the contents of these
copies (either directly from the kernel or through a user space process).  This
way we don't need to worry that they may be modified before we can save
them.

The other approach is the Nigel's one, in which all LRU pages are first saved
and then used as additional storage for copying the rest of memory contents.
This has a drawback that we are not 100% sure if the LRU won't be modified
after we've used them to store the copies of the other pages.

> since people are complaining about the amount of ram that a kexec kernel
> would take up I'm assuiming it's somethingmore complex then just a bitmap
> of all possible pages. 

No, it's just bitmaps, AFAICS, and the complaints are a bit overstated, IMO. ;-)

> most of the conversation so far has been around the process of makeing the 
> snapshot and storing it. what are the processes and tools available to 
> restore images?

We have quite an efficient restoration code in the kernel right now.  It's
able to upload big images (something like total RAM minus the size of the
boot kernel, initrd and, optionally, the resume application), which is much
more than we're able to save. :-)

It can work with images uploaded via /dev/snapshot from the user space
(specific image format is required, but that can be changed easily).

Geetings,
Rafael


-- 
"Premature optimization is the root of all evil." - Donald Knuth

  reply	other threads:[~2007-07-13 11:34 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-11 15:30 [PATCH 0/2] Kexec jump: The first step to kexec base hibernation Huang, Ying
2007-07-11 11:13 ` Pavel Machek
2007-07-12 16:28   ` Huang, Ying
2007-07-12  8:54     ` Pavel Machek
2007-07-13 23:18       ` Huang, Ying
2007-07-12  0:22 ` Andrew Morton
2007-07-12  5:48   ` Jeremy Fitzhardinge
2007-07-12  6:43     ` david
2007-07-12 12:46       ` Rafael J. Wysocki
2007-07-12 13:51         ` Mark Lord
2007-07-12 14:49           ` Pavel Machek
2007-07-12 15:35           ` Rafael J. Wysocki
2007-07-12 16:03             ` Mark Lord
2007-07-12 16:35               ` Mark Lord
2007-07-12 20:05                 ` Jeremy Maitin-Shepard
2007-07-13  2:38                   ` Mark Lord
2007-07-12 16:09           ` [linux-pm] " Alan Stern
2007-07-12 18:49           ` david
2007-07-12 18:42         ` david
2007-07-12 19:20           ` Rafael J. Wysocki
2007-07-12 19:14             ` david
2007-07-12 19:45               ` Rafael J. Wysocki
2007-07-12 17:09     ` Huang, Ying
2007-07-12 12:47       ` Rafael J. Wysocki
2007-07-12 12:38   ` Rafael J. Wysocki
2007-07-12 14:43   ` Huang, Ying
2007-07-12  7:03     ` david
2007-07-12 17:18       ` Huang, Ying
2007-07-12 10:10         ` david
2007-07-12 13:01           ` Rafael J. Wysocki
2007-07-12 13:22             ` jimmy bahuleyan
2007-07-12 19:03             ` david
2007-07-12 13:55           ` Mark Lord
2007-07-12 19:05             ` david
2007-07-12 14:06           ` Pavel Machek
2007-07-12 12:53     ` Rafael J. Wysocki
2007-07-12 18:57       ` david
2007-07-12 19:34         ` Rafael J. Wysocki
2007-07-12 19:55           ` Jeremy Maitin-Shepard
2007-07-12 20:45             ` Rafael J. Wysocki
2007-07-13  3:12             ` david
2007-07-13  9:17               ` Rafael J. Wysocki
2007-07-13  9:25                 ` david
2007-07-13 11:41                   ` Rafael J. Wysocki [this message]
2007-07-14  7:51                     ` david
2007-07-14  8:33                       ` david
2007-07-14  9:24                         ` Rafael J. Wysocki
2007-07-14 20:00                       ` Rafael J. Wysocki
2007-07-14 20:34                         ` david
2007-07-14 21:06                           ` Rafael J. Wysocki
2007-07-14 21:13                             ` david
2007-07-15 10:31                               ` Rafael J. Wysocki
2007-07-15 19:23                                 ` david
2007-07-15 22:59                                   ` Rafael J. Wysocki
2007-07-15 23:22                                     ` david
2007-07-16 12:17                                       ` Rafael J. Wysocki
2007-07-16 14:42                                         ` Huang, Ying
2007-07-16 15:40                                           ` Rafael J. Wysocki
2007-07-17  4:18                                             ` david
2007-07-17 11:46                                               ` Rafael J. Wysocki
2007-07-14 21:34                         ` david
2007-07-15 10:39                           ` Rafael J. Wysocki
2007-07-15 19:33                             ` david
2007-07-15 23:11                               ` Rafael J. Wysocki
2007-07-15 23:33                                 ` david
2007-07-13  3:06           ` david
2007-07-13  5:42             ` Hibernating To Swap Considered Harmful Joseph Fannin
2007-07-13  5:57               ` david
2007-07-13  6:20                 ` Joseph Fannin
2007-07-13  6:27                   ` david
2007-07-13  7:15                     ` Joseph Fannin
2007-07-13 14:35                       ` Jeremy Maitin-Shepard
2007-07-17  0:12                         ` Joseph Fannin
2007-07-17  5:44                           ` Oliver Neukum
2007-07-17  6:28                             ` Joseph Fannin
2007-07-17  6:42                               ` david
2007-07-17  7:26                                 ` Joseph Fannin
2007-07-17  7:34                                   ` david
2007-07-17 11:54                                     ` Rafael J. Wysocki
2007-07-17 11:52                                   ` Rafael J. Wysocki
2007-07-17  7:10                               ` Oliver Neukum
2007-07-13  9:30               ` Rafael J. Wysocki
2007-07-14  0:45                 ` Joseph Fannin
2007-07-14  9:48                   ` Rafael J. Wysocki
2007-07-16  5:37                     ` Joseph Fannin
2007-07-13  9:29             ` [PATCH 0/2] Kexec jump: The first step to kexec base hibernation Rafael J. Wysocki
2007-07-13  9:38               ` david
2007-07-13 11:59                 ` Rafael J. Wysocki
2007-07-13 14:37                   ` [linux-pm] " Alan Stern
2007-07-13 15:31                     ` Rafael J. Wysocki
2007-07-14  7:13                     ` david
2007-07-13 15:12                   ` Jeremy Maitin-Shepard
2007-07-13 15:45                     ` Rafael J. Wysocki
2007-07-13 15:50                       ` Alan Stern
2007-07-13 16:54                         ` Eric W. Biederman
2007-07-13 18:15                           ` Alan Stern
2007-07-13 21:08                             ` Rafael J. Wysocki
2007-07-13 20:55                         ` Rafael J. Wysocki
2007-07-13 16:48                       ` Jeremy Maitin-Shepard
2007-07-13 21:23                         ` Rafael J. Wysocki
2007-07-14  7:12                   ` david
2007-07-13 17:32             ` Huang, Ying
2007-07-13 12:01               ` Rafael J. Wysocki
2007-07-12 16:32     ` Eric W. Biederman
2007-07-12 19:09       ` david
2007-07-12 19:49         ` Eric W. Biederman
2007-07-13 23:15       ` Huang, Ying
2007-07-13 16:43         ` Eric W. Biederman
2007-07-14  5:48           ` Huang, Ying
2007-07-14  9:59             ` Rafael J. Wysocki
2007-07-14 10:55               ` Huang, Ying
2007-07-14 19:16                 ` Rafael J. Wysocki
2007-07-15  9:30                   ` Huang, Ying
2007-07-15 10:49                     ` Rafael J. Wysocki
2007-07-24 14:00                       ` Huang, Ying
2007-07-24 15:27                         ` Rafael J. Wysocki
2007-07-17  8:13                     ` david
2007-07-17 11:59                       ` Rafael J. Wysocki
2007-07-17 12:48                       ` Huang, Ying
2007-07-17 14:22                         ` Rafael J. Wysocki
2007-07-18  0:25                           ` david
  -- strict thread matches above, loose matches on Subject: below --
2007-07-13  5:08 [PATCH 0/2] Kexec jump: The first step to kexec base Al Boldi
2007-07-13 15:28 ` [PATCH 0/2] Kexec jump: The first step to kexec base hibernation Al Boldi
2007-07-13 15:50   ` Rafael J. Wysocki
2007-07-14  6:07     ` Al Boldi
2007-07-13 15:28 ` Al Boldi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200707131341.35801.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=akpm@linux-foundation.org \
    --cc=david@lang.hm \
    --cc=jbms@cmu.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=nigel@nigel.suspend2.net \
    --cc=pavel@ucw.cz \
    --cc=ying.huang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox