On 12/07/2017 10:53 PM, Michael Meeks wrote:
        The basic problem is this - LOOL pre-initializes LibreOffice before forking to ensure that 
lots of the memory is shared copy-on-write between it and the child processes. That works 
reasonably well, but unfortunately - when we re-use strings from that corpus - we tend to touch the 
ref-counts, which causes lots of page dirtying.
If the issue is mostly with rtl_uString that originated from 
(implicitly) converting a string literal in the source code into an 
rtl::OUString instance (rather than rtl::OUString instances that have 
actually been computed from other values during the pre-initialization 
phase, and survive past that phase):
I think that with 
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0424r2.pdf> 
"String literals as non-type template parameters" potentially making it 
into C++20 (and potentially being available in Clang or GCC even before; 
it already is, in a form almost usable for our needs), we will be able 
to create such rtl_uString from string literals in the source code 
during compilation, placing them into read-only data segments.
So, it would be interesting to know whether the issue indeed is mostly 
with such rtl_uString instances, so that the mechanism I outlined above 
would be going to sufficiently solve your issue.
[...]
diff --git a/sal/util/sal.map b/sal/util/sal.map
index 579119065121..1dffaf8bc787 100644
--- a/sal/util/sal.map
+++ b/sal/util/sal.map
@@ -740,6 +740,11 @@ PRIVATE_1.4 { # LibreOffice 6.0
          _ZN3sal19backtrace_to_stringEPNS_14BacktraceStateE;
  } PRIVATE_1.3;
  
+PRIVATE_1.3 { # LibreOffice 6.1
this would need to be PRIVATE_1.5 (we're already at PRIVATE_1.4 for 
LibreOffice 6.0)
+    global:
+        rtl_alloc_preInit;
+} PRIVATE_1.2;
+
  PRIVATE_textenc.1 { # LibreOffice 3.6
      global:
          _ZN3sal6detail7textenc20convertCharToUnicode*;
Context
   
 
  Privacy Policy |
  
Impressum (Legal Info) |
  
Copyright information: Unless otherwise specified, all text and images
  on this website are licensed under the
  
Creative Commons Attribution-Share Alike 3.0 License.
  This does not include the source code of LibreOffice, which is
  licensed under the Mozilla Public License (
MPLv2).
  "LibreOffice" and "The Document Foundation" are
  registered trademarks of their corresponding registered owners or are
  in actual use as trademarks in one or more countries. Their respective
  logos and icons are also subject to international copyright laws. Use
  thereof is explained in our 
trademark policy.