Re: fix for hidden corei7 requirement in binary packages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+ Tone Zhang

On Mon, Aug 19, 2019 at 1:04 PM kefu chai <tchaikov@xxxxxxxxx> wrote:
>
> On Mon, Aug 19, 2019 at 9:24 AM Brad Hubbard <bhubbard@xxxxxxxxxx> wrote:
> >
> > +dev@ceph
> >
> > On Sun, Aug 18, 2019 at 9:50 AM Alexandre Oliva <oliva@xxxxxxx> wrote:
> > >
> > > Hi,
> > >
> > > After upgrading some old Phenom servers from Fedora/Freed-ora 29 to
> > > 30's, to ceph-14.2.2, I was surprised by very early crashes of both
> > > ceph-mon and ceph-osd.  After ruling out disk and memory corruption, I
> > > investigated a bit noticed all of them crashed during pre-main() init
> > > section processing, at an instruction not available on the Phenom X6
> > > processors that support sse4a, but not e.g. sse4.1.
> > >
> > > It turns out that much of librte is built with -march=corei7.  That's a
> > > little excessive, considering that x86/rte_memcpy.h would be happy
> > > enough with -msse4.1, but not with earlier sse versions that Fedora is
> > > supposed to target.
> > >
> > > I understand rte_memcpy.h is meant for better performance, inlining
> > > fixed-size and known-alignment implementations of memcpy into users.
> > > Alas, that requires setting a baseline target processor, and you'll only
> > > get as efficient an implementation as what's built in.
> > >
> > > I noticed an attempt for dynamic selection, but GCC rightfully won't
> > > inline across different target flags, so we'd have to give up inlining
> > > to get better dynamic behavior.  The good news is that glibc already
> > > offers dynamic selection of memcpy implementations, so hopefully the
> > > impact of this change won't be much worse than that of enabling dynamic
> > > selection, without the complications.
> > >
> > > If that's not good enough, compiling ceph with flags that enable SSE4.1,
> > > AVX2 or AVX512, or with a -march flag that implicitly enables them,
> > > would restore current performance, but without that, you will (with the
> > > patch below) get a package that runs on a broader range of processors,
> > > that the base distro (through the compiler's baseline flags) chooses to
> > > support.  It's not nice when you install a package on a processor that's
> > > supposed to be supported and suddenly you're no longer sure it is ;-)
> > >
> > > Perhaps building a shared librte, so that one could build and install
> > > builds targeting different ISA versions, without having to rebuild all
> > > of ceph, would be a reasonable way to address the better tuning of these
> > > performance-critical bits.
> > >
> > >
> > >
> > > src/spdk/dpdk:
> > >
> > > diff --git a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h
> > > index 7b758094d..ce714bf02 100644
> > > --- a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h
> > > +++ b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h
> > > @@ -40,6 +40,16 @@ extern "C" {
> > >  static __rte_always_inline void *
> > >  rte_memcpy(void *dst, const void *src, size_t n);
> > >
> > > +#ifndef RTE_MACHINE_CPUFLAG_SSE4_1
> > > +
> > > +static __rte_always_inline void *
> > > +rte_memcpy(void *dst, const void *src, size_t n)
> > > +{
> > > +  return memcpy(dst, src, n);
> > > +}
> > > +
> > > +#else /* RTE_MACHINE_CPUFLAG_SSE4_1 */
> > > +
> > >  #ifdef RTE_MACHINE_CPUFLAG_AVX512F
> > >
> > >  #define ALIGNMENT_MASK 0x3F
> > > @@ -869,6 +879,8 @@ rte_memcpy(void *dst, const void *src, size_t n)
> > >                 return rte_memcpy_generic(dst, src, n);
> > >  }
> > >
> > > +#endif /* RTE_MACHINE_CPUFLAG_SSE4_1 */
> > > +
> > >  #ifdef __cplusplus
> > >  }
> > >  #endif
> > > diff --git a/mk/machine/default/rte.vars.mk b/mk/machine/default/rte.vars.mk
> > > index df08d3b03..6bf695849 100644
> > > --- a/mk/machine/default/rte.vars.mk
> > > +++ b/mk/machine/default/rte.vars.mk
> > > @@ -27,4 +27,4 @@
> > >  # CPU_LDFLAGS =
> > >  # CPU_ASFLAGS =
> > >
> > > -MACHINE_CFLAGS += -march=corei7
> > > +# MACHINE_CFLAGS += -march=corei7
>
>
> Hi Alexandre, thanks for the bug report and patch. the bug is tracked
> by https://tracker.ceph.com/issues/41330, and a fix is posted at
> https://github.com/ceph/ceph/pull/29728

after a second thought, i think, probably, instead of patching SPDK to
cater the needs of older machines. a better option is to disable SPDK
when building packages for testing and for our official releases. for
instance, Phenom II X6 belongs to AMD's K10 family which was launched
over a decade ago[0]. while Bobcat family is still being produced [1].

because we don't test SPDK backend in our CI/CD process. and SPDK
backend is not being actively maintained. we could just build it in
our "make check" run though.

what do you think?

--
[0] https://en.wikipedia.org/wiki/Phenom_II
[1] https://en.wikipedia.org/wiki/Bobcat_(microarchitecture)

>
> > >
> > >
> > > --
> > > Alexandre Oliva, freedom fighter  he/him   https://FSFLA.org/blogs/lxo
> > > Be the change, be Free!                 FSF Latin America board member
> > > GNU Toolchain Engineer                        Free Software Evangelist
> > > Hay que enGNUrecerse, pero sin perder la terGNUra jamás - Che GNUevara
> >
> >
> >
> > --
> > Cheers,
> > Brad
> > _______________________________________________
> > Dev mailing list -- dev@xxxxxxx
> > To unsubscribe send an email to dev-leave@xxxxxxx
>
>
>
> --
> Regards
> Kefu Chai



-- 
Regards
Kefu Chai
_______________________________________________
Dev mailing list -- dev@xxxxxxx
To unsubscribe send an email to dev-leave@xxxxxxx




[Index of Archives]     [CEPH Users]     [Ceph Devel]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux