Date: Fri, 26 May 2017 17:39:31 -0700 From: Andre McCurdy <armccurdy@...il.com> To: musl@...ts.openwall.com Subject: Re: towlower performance On Thu, May 25, 2017 at 11:01 AM, maksis . <maksis@...enaline-network.com> wrote: > Hi, > > After switching my C++ app from a glibc-based build to a static build using > musl, I've noticed significant differences in performance with certain > loading operations, which seems to be related to using std::map with a > case-insensitive UTF-8 sorting algorithm. For example, parsing a XML file > with a flat listing of ~350k directory items and mapping them by name takes > about 3 seconds with glibc vs 13 seconds with musl. After modifying the sort > algorithm by removing all calls to towlower, the loading time with musl > drops to 3.5 seconds. > > I put together a C++ benchmark with the same sorting algorithm, which seems > to produce similar results (GCC 6.3, 64 bit, -O3): > > https://gist.github.com/maksis/92ad04f525d69043283350675d04f160 > > glibc: ~2 seconds (Arch Linux) > > musl: ~7 seconds (Alpine Linux 3.6.0) > > What might be causing the difference? I'm not sure if it maps directly to your results, but when building a gcc based musl toolchain, libstdc++ gets configured to use the "generic" OS specific include dir, which seems to contain some less than optimal ctype code. e.g. ctype_inline.h comes with the following warning: // The following definitions are portable, but insanely slow. If one // cares at all about performance, then specialized ctype // functionality should be added for the native os in question: see // the config/os/bits/ctype_*.h files. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/config/os/generic/ctype_inline.h
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.