<div dir="auto">Have you tried Microsoft's new "segment heap" implementation? Only apps that opt-in get it at the moment. Reportedly edge and chromium are getting large memory savings from switching, but I haven't seen performance comparisons.<div dir="auto"><br></div><div dir="auto">If the performance is good, seems like that might be the simplest choice </div><div dir="auto"><br></div><div dir="auto"><a href="https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests#heaptype">https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests#heaptype</a><br></div><div dir="auto"><br></div><div dir="auto"><a href="https://www.blackhat.com/docs/us-16/materials/us-16-Yason-Windows-10-Segment-Heap-Internals.pdf">https://www.blackhat.com/docs/us-16/materials/us-16-Yason-Windows-10-Segment-Heap-Internals.pdf</a><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 2, 2020, 12:20 AM Alexandre Ganea via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-CA" link="#0563C1" vlink="#954F72">
<div class="m_-664316201346764609WordSection1">
<p class="MsoNormal"><span lang="FR-CA">Hello,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="FR-CA"><u></u> <u></u></span></p>
<p class="MsoNormal">I was wondering how folks were feeling about replacing the default Windows CRT allocator in Clang, LLD and other LLVM tools possibly.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">The CRT heap allocator on Windows doesn’t scale well on large core count machines. Any multi-threaded workload in LLVM that allocates often is impacted by this. As a result, link times with ThinLTO are extremely slow on Windows. We’re observing
performance inversely proportional to the number of cores. The more cores the machines has, the slower ThinLTO linking gets.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">We’ve replaced the CRT heap allocator by modern lock-free thread-cache allocators such as rpmalloc (unlicence), mimalloc (MIT licence) or snmalloc (MIT licence). The runtime performance is an order of magnitude faster.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Time to link clang.exe with LLD and -flto on 36-core:<u></u><u></u></p>
<p class="MsoNormal"> Windows CRT heap allocator: 38 min 47 sec<u></u><u></u></p>
<p class="MsoNormal"> mimalloc: 2 min 22 sec<u></u><u></u></p>
<p class="MsoNormal"> rpmalloc: 2 min 15 sec<u></u><u></u></p>
<p class="MsoNormal"> snmalloc: 2 min 19 sec<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">We’re running in production with a downstream fork of LLVM + rpmalloc for more than a year. However when cross-compiling some specific game platforms we’re using other downstream forks of LLVM that we can’t change.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Two questions arise:<u></u><u></u></p>
<ol style="margin-top:0cm" start="1" type="1">
<li class="m_-664316201346764609MsoListParagraph" style="margin-left:0cm">The licencing. Should we embed one of these allocators into the LLVM tree, or keep them separate out-of-the-tree?
<u></u><u></u></li><li class="m_-664316201346764609MsoListParagraph" style="margin-left:0cm">If the answer for above question is “yes”, given the tremendous performance speedup, should we embed one of these allocators into Clang/LLD builds by default? (on Windows only) Considering
that Windows doesn’t have a LD_PRELOAD mechanism.<u></u><u></u></li></ol>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Please see demo patch here: <span lang="FR-CA"><a href="https://reviews.llvm.org/D71786" target="_blank" rel="noreferrer"><span lang="EN-CA">https://reviews.llvm.org/D71786</span></a></span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thank you in advance for the feedback!<u></u><u></u></p>
<p class="MsoNormal">Alex.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" rel="noreferrer">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>