public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
From: "Ford, Brian" <brian.ford@flightsafety.com>
To: "cygwin-developers@cygwin.com" <cygwin-developers@cygwin.com>
Subject: RE: More (?) steps toward jemalloc within Cygwin DLL
Date: Tue, 21 Jul 2020 22:06:03 +0000	[thread overview]
Message-ID: <b0eaad1c06744ea88288b09fc64f7ccc@v0001wsxm02.flightsafety.com> (raw)
In-Reply-To: <75b43adc-ebcd-1d98-bd3e-33b8337f0475@maxrnd.com>

FWIW, we found Intel TBB malloc (https://software.intel.com/content/www/us/en/develop/tools/threading-building-blocks.html) to be necessary for our native multi-threaded Windows app performance up until Windows 10 based OS's when the native heap became competitive (and maybe even slightly better).  

-----Original Message-----
From: Cygwin-developers [mailto:cygwin-developers-bounces@cygwin.com] On Behalf Of Mark Geisert
Sent: Tuesday, July 21, 2020 3:51 AM
To: cygwin-developers@cygwin.com
Subject: Re: More (?) steps toward jemalloc within Cygwin DLL

CAUTION EXTERNAL EMAIL: Verify sender, links, and attachments are safe before taking action.


Corinna Vinschen wrote:
>>> If you get jemalloc working, it would be nice in itself, but the 
>>> main improvement would be the ability to get rid of these 
>>> __malloc_lock/ __malloc_unlock brackets.
>>
>> Thanks for reminding me of that aspect of Cygwin's current malloc.  
>> The malloc implementation has seemed to be bulletproof for many years 
>> so I guess the function-level locking is the only drawback of note?
>
> Not quite.  It's bad enough, given how much this slows down 
> multi-threaded executables, but...
>
> ...the big problem are dependencies on malloc during Cygwin startup, 
> especially in fork/exec, so the real challenge is to get the new 
> malloc still let Cygwin processes start up correctly first time and 
> especially in fork/exec situations, and to make sure the malloc 
> bookkeeping survives fork/exec.

O.K., understood.

> These malloc dependencies sometimes crop up in the weirdest 
> situations, so that's something to look out for.  For instance, using 
> pthread functions may call malloc as well.  If a problem can be solved 
> by changing another part of Cygwin, don't hesitate to discuss this!

Yes, a couple of the malloc packages I'm testing want to allocate locks and TLS slots right off the bat so there's nasty recursion possible.

>> I've switched to a
>> plug-in sort of implementation that allows one to choose among 
>> several malloc packages: "original", dlmalloc (w/ internal locking), 
>> ptmalloc[23], nedalloc, jemalloc, and a Windows Heap wrapper.  
>> Perhaps tcmalloc in the future.  One sets an environment variable 
>> CYGMALLOC=<name> before launching a program and that malloc 
>> implementation is used.  This should make testing and benchmarking 
>> the various choices possible.  I don't expect big improvements in 
>> individual programs (unless they are stress testing), but something like a large configure or build should give more useful data.
>
> In the end, we should settle for a single malloc implementation, though.
> It doesn't really matter if it's jemalloc, ptmalloc, xymalloc.  Almost 
> all other modern mallocs are faster and better suited for 
> multi-threading than dlmalloc, *especially* if the above locks can go away.

For sure; I didn't make it clear this CYGMALLOC setup is just for testing the different malloc packages.  When I stumble across some failing in one of them it's nice to be able to quickly re-run using a different malloc.

Here's a question I didn't expect to come up: If it turns out a home-grown wrapper on the Win32 HeapXXX functions performs better (hint: it does, 2.5 to 3 times better) than any malloc package derived from dlmalloc, is there any reason why we ought not use it?  Assuming it can be made to work for all those cases you mentioned above, of course.

> The only danger here is this: If you manage to get dlmalloc replaced 
> reliably, you *will* get a pink plush hippo!

Oh, gee, that sounds like a really nice reward... Wow, I'm gonna have to do this project now for sure!

..mark

      parent reply	other threads:[~2020-07-21 22:06 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-16  9:16 Mark Geisert
2020-06-30  9:24 ` Corinna Vinschen
2020-07-03  6:57   ` Mark Geisert
2020-07-03 10:11     ` Corinna Vinschen
2020-07-21  8:50       ` Mark Geisert
2020-07-21 12:00         ` Corinna Vinschen
2020-07-21 22:06         ` Ford, Brian [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b0eaad1c06744ea88288b09fc64f7ccc@v0001wsxm02.flightsafety.com \
    --to=brian.ford@flightsafety.com \
    --cc=cygwin-developers@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).