Re: Thinking aloud.

Nigel Cunningham <[email protected]> Mon, 22 Oct 2012 13:29:50 +1100
Newsgroups gmane.linux.swsusp.devel
Message-ID <[email protected]>
Hi Ted.

On 10/22/2012 01:27 PM, Theodore Ts'o wrote:
> On Sat, Oct 20, 2012 at 08:20:28AM +1100, Nigel Cunningham wrote:
>> My initial thought is to use SHA1 checksums to determine what pages
>> have changed, keeping those checksums (and the pfns to which they
>> refer) in memory or on disk between hibernation cycles.
> Hi Nigel,
>
> One thought --- if you are on a 64-bit machine, where we don't have a
> shortage of page flags, you could set a new flag on all pages that
> were saved during the last hibernate cycle, and on the restore, mark
> all pages in the page table read/only.  As the pages get modified, on
> the page fault, clear the flag.  This should be a lot faster than
> burning the memory bandwidth and computational resources needed to
> calculate SHA1 checksums on all memory pages which are in use.
>
> If you can't do this approach, something else that would probably
> worth doing is using a two-pass checksum; first use a very fast
> checksum, such as Adler-32 or Fletcher-32, which is memory bandwidth
> limited.  If the fast-but-not-entirely checksum doesn't match, there's
> no point trying to doing the (much slower) SHA1 checksum over the
> page; you'll know that the page has changed.  If the fast checksum
> matches, then you can do a second pass with SHA1 to make sure you can
> really skip doing the disk write.
Thanks for the great suggestions; I'll give them a try.

Nigel