lkml.org 
[lkml]   [2005]   [Jan]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH][RFC] swsusp: speed up image restoring on x86-64
    Date
    Hi,

    On Friday, 21 of January 2005 00:06, Pavel Machek wrote:
    > Hi!
    >
    > > > > The readability of code is also important, IMHO.
    > > >
    > > > It did not seem too much better to me.
    > >
    > > Well, the beauty is in the eye of the beholder. :-)
    > >
    > > Still, it shrinks the code (22 lines vs 37 lines), it uses less GPRs (5 vs 7), it uses less
    > > SIB arithmetics (0 vs 4 times), it uses a well known scheme for copying data pages.
    > > As far as the result is concerned, it is equivalent to the existing code, but it's simpler
    > > (and faster). IMO, simpler code is always easier to understand.
    > >
    > >
    > > > > > If you want cheap way to speed it up, kill cr3 manipulation.
    > > > >
    > > > > Sure, but I think it's there for a reason.
    > > >
    > > > Reason is "to crash it early if we have wrong pagetables".
    > > >
    > > > > > Anyway, this is likely to clash with hugang's work; I'd prefer this not to be applied.
    > > > >
    > > > > I am aware of that, but you are not going to merge the hugang's patches soon, are you?
    > > > > If necessary, I can change the patch to work with his code (hugang, what do you think?).
    > > >
    > > > I think it is just not worth the effort.
    > >
    > > Why? It won't take much time. I've spent more time for writing the messages
    > > in this thread ... ;-)
    >
    > Well, I know that current code works. It was produced by C compiler,
    > btw. Now, new code works for you, but it was not in kernel for 4
    > releases, and... this code is pretty subtle.

    Now, I'm confused. :-) It's roughly this:

    struct pbe *pbe = pagedir_nosave, *end;
    unsigned n = nr_copy_pages;
    if (n) {
    end = pbe + n;
    do {
    memcpy((void *)pbe->orig_address, (void *)pbe->address, PAGE_SIZE);
    pbe++;
    } while (pbe < end);
    }

    where memcpy() is of course a hand-written inline that includes the cr3 manipulation,
    and pbe, end, n are registers.

    > And it is hand-made, not C produced.

    Yes, it is.

    > So... your code may be better but I do not think it is so much better
    > that I'd like to risk it.

    Now, that's clear. :-)

    Anyway, if anyone could test it or look at it and say a word, please do so.

    Greets,
    RJW


    --
    - Would you tell me, please, which way I ought to go from here?
    - That depends a good deal on where you want to get to.
    -- Lewis Carroll "Alice's Adventures in Wonderland"
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:09    [W:0.026 / U:32.900 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site