RFR: 8283323: libharfbuzz optimization level results in extreme build times

Magnus Ihse Bursie ihse at openjdk.java.net
Wed Mar 23 20:56:46 UTC 2022


On Wed, 23 Mar 2022 19:35:22 GMT, Phil Race <prr at openjdk.org> wrote:

>> [JDK-8247872](https://bugs.openjdk.java.net/browse/JDK-8247872) (upgrade HarfBuzz to 2.7.2) caused build time to go up with 24 seconds on my reference linux machine. This was one of the four culprits that caused a 25-30% build time regression over the last two years.
>> 
>> The problem here was that the new HarfBuzz code caught really bad behaviour from gcc when compiling with optimizations. The official HarfBuzz build does not use any -O flags at all for gcc, so presumably the HarfBuzz team is:
>> 
>> a) not thinking compiler optimization is important for the performance of this library, and
>> b) unaware that their code causes such a headache for gcc.
>> 
>> (Other compilers fare much better: visual studio makes no difference at all, and for clang just a small regression was observed.)
>> 
>> The current optimization level was introduced by [JDK-8255790](https://bugs.openjdk.java.net/browse/JDK-8255790), which were really about moving libharfbuzz compilation back into libfontmanager. I could find no comments/discussion relating to the change of optimization level, so I assume it was incidental, and just seemed good at the time.
>> 
>> This patch changes the optimization level to `SIZE` (which is the closest thing we have to no optimization level) on gcc.
>
> We definitely do not want to downgrade the optimisation level of the entire library.
> Performance of this library actually matters quite a lot.
> When we added some additional checking to the previous library we used (ICU) we had complaints of as much as 20% loss
> in PDF conversion (a backend process) and we've had escalations on user responsiveness in editors due to the computational complexity of layout vs just counting glyph advances.
> Getting that performance back was a lot of work .. except increasing compiler optimisation was the easy one that made a big difference. 
> To see the performance degradation may require a specific combination of font (Linux fonts vary widely) and the text being laid out. 
> The example we used in the previous case required a windows font, so I don't have a handy test case  I know will show this .. and it was years ago .. 
> 
> Looking at the list of files from Erik, I think we don't use the subset functionality. Certainly not directly and likely not at all.
> So downgrading that probably won't have any impact at all at runtime.
> 
> But hb-ot-layout.cc is one of the most important files in the library, maybe the most important.
> 
> I strongly suggest that one not be downgraded just for 7 seconds of build time.

@prrace If we're not using the subset functionality, can we remove the files entirely, or exclude them from compilation?

(In the meantime, I'm preparing a patch which only limits optimization to the two subset files Erik listed)

-------------

PR: https://git.openjdk.java.net/jdk/pull/7919



More information about the client-libs-dev mailing list