Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 5 Jul 2015 16:41:00 +0300
From: Solar Designer <solar@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: PHC: Lyra2 on GPU

On Sun, Jul 05, 2015 at 01:27:51PM +0200, Agnieszka Bielec wrote:
> 2015-07-05 9:39 GMT+02:00 Solar Designer <solar@...nwall.com>:
> > On Sun, Jul 05, 2015 at 09:05:19AM +0300, Solar Designer wrote:
> >> Is the memory (de)allocation overhead kept out of the loop already?
> >> I previously suggested that you reuse yescrypt's yescrypt-platform.c:
> >> *_region() functions for this, so that we use the same memory allocation
> >> mechanism for all PHC finalists.
> >
> > Just to make it clear: this is important and high priority, for all of
> > your PHC finalist formats.
> >
> > I feel I have to state it this way since you appear to have been
> > ignoring/postponing this task for a long while.
> 
> it's out of the loop but not like in yescrypt
> it's in set_salt and only when costs are different than previously
> memory is allocated again, this is not effective only when we are
> cracking passwords with different costs at once. in my test first and
> second hash always have the same costs

OK, that's better than I expected, but not good enough: we need to unify
the approach to memory allocation across the PHC finalists, to ensure
our benchmark results are not affected by possible differences in this
area (since there would be no differences).

It's not just the performance overhead of the (de)allocation operation.
It's also what kind of allocation is returned - such as whether huge
pages are used or not.

So I suggest that we unify them all to use yescrypt-platform.c:
*_region() functions, and then we'll have this code in just one place,
including e.g. its huge pages threshold.

Also, reallocating on set_salt() will have unnecessary performance cost
when cracking hashes with different cost settings.  It's better to let
the allocation grow or be replaced with the largest one needed in a
given run, and then just use that all the time - even for salts where
only a portion of the allocated region would be written to.  The
*_region() functions are designed to be used like that.

Maybe you'll approach switching your already implemented PHC finalist
formats to use of yescrypt's *_region() once you implement a yescrypt
format?

Alexander

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.