From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: linux-pm@lists.linux-foundation.org,
Nigel Cunningham <ncunningham@crca.org.au>
Subject: Re: [RFC 09/15] PM / Hibernate: user, implement user_ops writer
Date: Tue, 30 Mar 2010 22:50:26 +0200 [thread overview]
Message-ID: <201003302250.26105.rjw@sisk.pl> (raw)
In-Reply-To: <4BB1BD70.90105@gmail.com>
On Tuesday 30 March 2010, Jiri Slaby wrote:
> On 03/30/2010 12:09 AM, Rafael J. Wysocki wrote:
> > On Monday 29 March 2010, Jiri Slaby wrote:
...
> Err, I didn't mean to write that. fops->read and
> hibernate_io_ops->write_page are both involved solely in image writing
> and are consumer and producer respectively. Vice versa for image reading.
Ah, I misunderstood your description, then.
> > Now, during resume the image is not present in memory at all. In fact, we
>
> <snipped> -- we both understand the code the same.
>
> > Now, compression can happen in two places: while the image is created
> > or after it has been created (current behavior). In the latter case, the image
> > pages need not be compressed in place, they may be compressed after being
> > returned by snapshot_read_next(), in a temporary buffer (that's now s2disk
> > does that). So you can arrange things like this:
> >
> > create image
> > repeat:
> > - snapshot_read_next() -> buffer
> > - if buffer is full, compress it (possibly encrypt it) and write the result to
> > the storage
> >
> > This way you'd just avoid all of the complications and I fail to see any
> > drawbacks.
>
> Yes, this was the intention. Except I wanted snapshot_read_next to be
> something like snapshot_write_next_page which would call
> hibernate_io_ops->write_page(buf, len) somewhere in the deep.
> hibernate_io_ops is an alias for the first module which accepts the page
> and feeds it further. E.g. for hibernate_io_ops being compress_ops it
> may be a chain like compress_ops->write_page => encrypt_ops->write_page
> => swap_ops->write_page.
Well, but I don't think we need the kernel compression to be used by s2disk
(unless it's done while creating the image, but see below). So we can
assume the s2disk case will always operate full pages.
> But if you want to preserve snapshot_read_next, then it would look like
> repeat:
> snapshot_read_next() -> buffer, len = PAGE_SIZE
> compress_ops->write_page(buffer, len) =>
> encrypt_ops->write_page(buffer, len) =>
> swap_ops->write_page(buffer, len)
>
> instead of
> repeat:
> snapshot_write_next_page()
> In this case its work is to fetch a next page and call appropriate
> .write_page.
Yes, that'd be fine.
> > Now, an attractive thing would be to compress data while creating the image
> > and that may be done in the following way:
>
> I wouldn't go for this. We should balance I/O and CPU and this can be
> done only when writing the image, if I can say. OTOH I must admit I have
> no numbers.
_But_ that would allow us to break the 1/2 memory barrier without doing arcane
things in the memory management area.
I did the measurements when I added the multithreaded image writing to s2disk
and I must say a substantial gain from using multiple threads was only in the
entryption+compression case.
So, I definitely would like to see numbers.
Rafael
next prev parent reply other threads:[~2010-03-30 20:50 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-23 16:17 [RFC 01/15] FS: libfs, implement simple_write_to_buffer Jiri Slaby
2010-03-23 16:17 ` [RFC 02/15] PM / Hibernate: snapshot cleanup Jiri Slaby
2010-03-23 16:17 ` [RFC 03/15] PM / Hibernate: separate block_io Jiri Slaby
2010-03-23 16:17 ` [RFC 04/15] PM / Hibernate: move the first_sector out of swsusp_write Jiri Slaby
2010-03-23 16:17 ` [RFC 05/15] PM / Hibernate: group swap ops Jiri Slaby
2010-03-23 16:17 ` [RFC 06/15] PM / Hibernate: swap, remove swap_map_handle usages Jiri Slaby
2010-03-23 16:17 ` [RFC 07/15] PM / Hibernate: add sws_modules_ops Jiri Slaby
2010-03-23 16:17 ` [RFC 08/15] PM / Hibernate: add user module_ops Jiri Slaby
2010-03-25 22:07 ` Rafael J. Wysocki
[not found] ` <201003252307.15232.rjw@sisk.pl>
2010-03-26 9:43 ` Jiri Slaby
2010-03-23 16:17 ` [RFC 09/15] PM / Hibernate: user, implement user_ops writer Jiri Slaby
2010-03-23 16:17 ` [RFC 10/15] PM / Hibernate: user, implement user_ops reader Jiri Slaby
2010-03-23 16:17 ` [RFC 11/15] PM / Hibernate: add chunk i/o support Jiri Slaby
2010-03-23 16:17 ` [RFC 12/15] PM / Hibernate: split snapshot_read_next Jiri Slaby
2010-03-23 16:17 ` [RFC 13/15] PM / Hibernate: split snapshot_write_next Jiri Slaby
2010-03-23 16:17 ` [RFC 14/15] PM / Hibernate: dealign swsusp_info Jiri Slaby
2010-03-23 16:17 ` [RFC 15/15] PM / Hibernate: move non-swap code to snapshot.c Jiri Slaby
2010-03-23 21:51 ` [RFC 01/15] FS: libfs, implement simple_write_to_buffer Rafael J. Wysocki
2010-03-23 22:09 ` Nigel Cunningham
[not found] ` <1269361063-3341-2-git-send-email-jslaby@suse.cz>
2010-03-24 20:29 ` [RFC 02/15] PM / Hibernate: snapshot cleanup Pavel Machek
2010-03-24 22:35 ` Rafael J. Wysocki
2010-03-25 5:29 ` Pavel Machek
[not found] ` <1269361063-3341-3-git-send-email-jslaby@suse.cz>
2010-03-24 20:30 ` [RFC 03/15] PM / Hibernate: separate block_io Pavel Machek
[not found] ` <20100324203021.GE5798@elf.ucw.cz>
2010-03-24 21:22 ` Jiri Slaby
[not found] ` <4BAA829F.7060207@gmail.com>
2010-03-24 22:58 ` Nigel Cunningham
[not found] ` <4BAA98FC.9040302@crca.org.au>
2010-03-25 2:35 ` Nigel Cunningham
2010-03-25 14:29 ` Pavel Machek
[not found] ` <4BAACC0A.2040009@crca.org.au>
2010-03-25 20:12 ` Rafael J. Wysocki
[not found] ` <201003252112.25204.rjw@sisk.pl>
2010-03-25 20:13 ` Nigel Cunningham
[not found] ` <4BABC3D1.1050104@crca.org.au>
2010-03-25 20:33 ` Rafael J. Wysocki
[not found] ` <201003252133.50206.rjw@sisk.pl>
2010-03-25 20:36 ` Nigel Cunningham
2010-03-29 13:30 ` Pavel Machek
[not found] ` <1269361063-3341-4-git-send-email-jslaby@suse.cz>
2010-03-24 20:31 ` [RFC 04/15] PM / Hibernate: move the first_sector out of swsusp_write Pavel Machek
[not found] ` <20100324203125.GF5798@elf.ucw.cz>
2010-03-25 21:26 ` Rafael J. Wysocki
[not found] ` <1269361063-3341-6-git-send-email-jslaby@suse.cz>
2010-03-24 20:33 ` [RFC 06/15] PM / Hibernate: swap, remove swap_map_handle usages Pavel Machek
[not found] ` <20100324203329.GG5798@elf.ucw.cz>
2010-03-24 21:29 ` Jiri Slaby
[not found] ` <4BAA842A.6060906@gmail.com>
2010-03-25 21:35 ` Rafael J. Wysocki
[not found] ` <1269361063-3341-7-git-send-email-jslaby@suse.cz>
2010-03-24 20:36 ` [RFC 07/15] PM / Hibernate: add sws_modules_ops Pavel Machek
[not found] ` <20100324203634.GH5798@elf.ucw.cz>
2010-03-24 21:31 ` Jiri Slaby
2010-03-25 22:02 ` Rafael J. Wysocki
[not found] ` <1269361063-3341-9-git-send-email-jslaby@suse.cz>
2010-03-24 20:42 ` [RFC 09/15] PM / Hibernate: user, implement user_ops writer Pavel Machek
[not found] ` <20100324204259.GA6423@elf.ucw.cz>
2010-03-24 21:40 ` Jiri Slaby
[not found] ` <4BAA86E8.5090108@gmail.com>
2010-03-25 21:36 ` Pavel Machek
2010-03-25 22:14 ` Rafael J. Wysocki
[not found] ` <201003252314.33256.rjw@sisk.pl>
2010-03-26 9:34 ` Jiri Slaby
[not found] ` <4BAC7FC3.50405@gmail.com>
2010-03-26 22:04 ` Rafael J. Wysocki
2010-03-27 7:02 ` Pavel Machek
[not found] ` <201003262304.32118.rjw@sisk.pl>
2010-03-29 15:33 ` Jiri Slaby
[not found] ` <4BB0C840.7030802@gmail.com>
2010-03-29 22:09 ` Rafael J. Wysocki
2010-03-30 1:14 ` Nigel Cunningham
2010-03-30 21:03 ` Rafael J. Wysocki
2010-03-31 2:31 ` Nigel Cunningham
2010-03-31 14:47 ` Pavel Machek
2010-03-31 21:01 ` Nigel Cunningham
2010-03-31 20:25 ` Rafael J. Wysocki
2010-03-31 21:06 ` Nigel Cunningham
2010-03-31 21:36 ` Rafael J. Wysocki
2010-04-04 23:08 ` Nigel Cunningham
2010-04-04 23:13 ` Rafael J. Wysocki
2010-03-31 21:54 ` Nigel Cunningham
2010-03-30 8:59 ` Jiri Slaby
2010-03-30 20:50 ` Rafael J. Wysocki [this message]
2010-03-31 14:41 ` Jiri Slaby
2010-03-31 20:29 ` Rafael J. Wysocki
2010-04-21 21:22 ` Jiri Slaby
2010-04-22 3:43 ` Rafael J. Wysocki
2010-03-24 22:13 ` [RFC 01/15] FS: libfs, implement simple_write_to_buffer Rafael J. Wysocki
[not found] ` <1269361063-3341-10-git-send-email-jslaby@suse.cz>
2010-03-25 5:30 ` what the patches do Re: [RFC 10/15] PM / Hibernate: user, implement user_ops reader Pavel Machek
[not found] ` <20100325053003.GB12935@elf.ucw.cz>
2010-03-25 5:42 ` Nigel Cunningham
[not found] ` <4BAAF7DA.30506@crca.org.au>
2010-03-25 6:12 ` Nigel Cunningham
2010-03-25 20:14 ` Rafael J. Wysocki
[not found] ` <201003252114.36605.rjw@sisk.pl>
2010-03-25 20:21 ` Nigel Cunningham
[not found] ` <4BABC5B6.2070301@crca.org.au>
2010-03-25 20:29 ` Rafael J. Wysocki
[not found] ` <201003252129.10224.rjw@sisk.pl>
2010-03-25 20:35 ` Nigel Cunningham
[not found] ` <4BABC926.8060203@crca.org.au>
2010-03-25 21:13 ` Rafael J. Wysocki
2010-03-25 21:26 ` Pavel Machek
[not found] ` <20100325212656.GD22902@elf.ucw.cz>
2010-03-25 21:49 ` Nigel Cunningham
[not found] ` <4BABDA59.8070107@crca.org.au>
2010-04-02 6:36 ` Pavel Machek
[not found] ` <20100402063644.GA14941@atrey.karlin.mff.cuni.cz>
2010-04-02 17:03 ` Rafael J. Wysocki
2010-03-25 22:21 ` Rafael J. Wysocki
[not found] ` <1269361063-3341-5-git-send-email-jslaby@suse.cz>
2010-03-25 21:28 ` [RFC 05/15] PM / Hibernate: group swap ops Rafael J. Wysocki
[not found] ` <1269361063-3341-11-git-send-email-jslaby@suse.cz>
2010-03-25 22:38 ` [RFC 11/15] PM / Hibernate: add chunk i/o support Rafael J. Wysocki
[not found] ` <201003252338.48513.rjw@sisk.pl>
2010-03-26 9:09 ` Jiri Slaby
[not found] ` <4BAC79B4.4040200@gmail.com>
2010-03-26 10:02 ` Nigel Cunningham
[not found] ` <1269361063-3341-12-git-send-email-jslaby@suse.cz>
2010-03-25 22:44 ` [RFC 12/15] PM / Hibernate: split snapshot_read_next Rafael J. Wysocki
[not found] ` <1269361063-3341-13-git-send-email-jslaby@suse.cz>
2010-03-25 22:46 ` [RFC 13/15] PM / Hibernate: split snapshot_write_next Rafael J. Wysocki
[not found] ` <1269361063-3341-14-git-send-email-jslaby@suse.cz>
2010-03-25 22:46 ` [RFC 14/15] PM / Hibernate: dealign swsusp_info Rafael J. Wysocki
[not found] ` <1269361063-3341-15-git-send-email-jslaby@suse.cz>
2010-03-25 22:50 ` [RFC 15/15] PM / Hibernate: move non-swap code to snapshot.c Rafael J. Wysocki
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=201003302250.26105.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=jirislaby@gmail.com \
--cc=linux-pm@lists.linux-foundation.org \
--cc=ncunningham@crca.org.au \
/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