svn commit: r256132 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

John-Mark Gurney jmg at funkthat.com
Tue Nov 5 19:55:21 UTC 2013


Andriy Gapon wrote this message on Tue, Nov 05, 2013 at 12:12 +0200:
> on 08/10/2013 04:38 Xin LI said the following:
> > Author: delphij
> > Date: Tue Oct  8 01:38:24 2013
> > New Revision: 256132
> > URL: http://svnweb.freebsd.org/changeset/base/256132
> > 
> > Log:
> >   Improve lzjb decompress performance by reorganizing the code
> >   to tighten the copy loop.
> >   
> >   Submitted by:	Denis Ahrens <denis h3q com>
> >   MFC after:	2 weeks
> >   Approved by:	re (gjb)
> > 
> > Modified:
> >   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/lzjb.c
> > 
> > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/lzjb.c
> > ==============================================================================
> > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/lzjb.c	Mon Oct  7 22:30:03 2013	(r256131)
> > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/lzjb.c	Tue Oct  8 01:38:24 2013	(r256132)
> > @@ -117,7 +117,9 @@ lzjb_decompress(void *s_start, void *d_s
> >  			src += 2;
> >  			if ((cpy = dst - offset) < (uchar_t *)d_start)
> >  				return (-1);
> > -			while (--mlen >= 0 && dst < d_end)
> > +			if (mlen > (d_end - dst))
> > +				mlen = d_end - dst;
> > +			while (--mlen >= 0)
> >  				*dst++ = *cpy++;
> >  		} else {
> >  			*dst++ = *src++;
> > 
> 
> Intuitively it might seem that this change is indeed an improvement.
> But given how "not dumb" (not sure if that always amounts to smart) the modern
> compilers are, has anyone actually measured if this change indeed improves the
> performance?
> 
> Judging from the conversations on the ZFS mailing lists this change event hurt
> performance in some environments.
> Looks like the upstream is not going to take this change.
> 
> So does it make any sense for us to make the code more obscure and different
> from upstream?  Unless performance benefits could indeed be demonstrated.

The old code compiles to:
   62c13:       49 f7 de                neg    %r14
   62c16:       44 8d 58 ff             lea    -0x1(%rax),%r11d
   62c1a:       4c 89 d3                mov    %r10,%rbx
   62c1d:       0f 1f 00                nopl   (%rax)
   62c20:       42 8a 14 33             mov    (%rbx,%r14,1),%dl
   62c24:       88 13                   mov    %dl,(%rbx)
   62c26:       48 ff c3                inc    %rbx
   62c29:       ff c8                   dec    %eax
   62c2b:       85 c0                   test   %eax,%eax
   62c2d:       7f f1                   jg     62c20 <lzjb_decompress+0xa0>

The load/store line is addresses 62c20-62c29...  So it looks like clang
is already doing the optimization that was added...

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."


More information about the svn-src-head mailing list