[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [UNIKRAFT PATCH v2 1/2] build: Add PGO support
On Mon, Nov 23, 2020 at 1:23 AM Alice Suiu <alicesuiu17@xxxxxxxxx> wrote: > În sâm., 21 nov. 2020 la 18:15, Razvan Deaconescu > <razvan.deaconescu@xxxxxxxxx> a scris: >> Hi, Alice, Simon. >> >> I applied these patches and it went OK to generate PGO files (the >> .gcda file generated by gcov). >> >> I've two remarks: >> * LDFLAGS is used for linking, not for compiling. I don't see why >> $(COMPFLAGS) should be here. Maybe it should actually be CFLAGS. The >> -fprofile-generate option needs to be part of both the compiling and >> linking phases, while the -fprofile-use option needs to only be part >> of the compiling phase. >> * The application / library Makefile needs to be appended with something like >> ``` >> APPHELLOWORLD_CFLAGS-$(CONFIG_OPTIMIZE_PGO_GENERATE) += -fprofile-generate >> APPHELLOWORLD_CFLAGS-$(CONFIG_OPTIMIZE_PGO_USE) += -fprofile-use >> ``` >> ** Firstly, this ^ needs to be documented in the source code, maybe in >> the README file. >> ** Secondly, why is this required? Why won't simply selecting the >> CONFIG_OPTIMIZE_PGO_... option append the compiling / linking flags >> for all software components (including the Unikernel) and that's that? >> Is this a limitation of the build system, or is it an approach to >> granularly configure profile generation per software component? > > Hi Razvan, > > The reason I had to use the profile-generate flag only when compiling the > application to be executed in Unikraft was that the functions in the libgcov > library use structures as TLS and TCB. Thus, if I used the profile-generate > flag to compile all the libraries, including the Unikernel, I would receive > errors. This is unclear to me. What's the connection between the use of TLS and TCB and the use of the -fprofile-generate flag. And the receiving of errors. > So, before calling each function in the system, a profiling function is > called from the libgcov library, and this function needed the allocated TLS > and TCB structures. Razvan >> On Mon, Jun 8, 2020 at 12:08 PM Alice Suiu <alicesuiu17@xxxxxxxxx> wrote: >> > >> > Profile-Guided Optimization is a method used by compilers to produce >> > optimal code by using application runtime data. PGO involves two >> > phases one that implies a compilation and a run that will generate >> > the profiling files for the application and one that implies a >> > compilation in which the compiler uses the profiling data to make a >> > better estimate of the program’s control flow and to produce an optimized >> > executable file. >> > >> > Add the configuration for PGO phases in MENUCONFIG and the correspondent >> > flag for LDFLAGS. >> > >> > Signed-off-by: Alice Suiu <alicesuiu17@xxxxxxxxx> >> > --- >> > Config.uk | 26 ++++++++++++++++++++++++++ >> > Makefile.uk | 8 ++++++++ >> > 2 files changed, 34 insertions(+) >> > >> > diff --git a/Config.uk b/Config.uk >> > index 3235b91..a815b6b 100644 >> > --- a/Config.uk >> > +++ b/Config.uk >> > @@ -86,6 +86,32 @@ config OPTIMIZE_LTO >> > will increase overall building time but creates more >> > efficient >> > Unikraft binaries. >> > >> > +config OPTIMIZE_PGO >> > + bool "PGO - Profile-guided optimization" >> > + default n >> > + help >> > + Enables GCC to do code optimizations through PGO. >> > + >> > +if OPTIMIZE_PGO >> > + choice PGO_PHASES >> > + prompt "PGO Options" >> > + default OPTIMIZE_PGO_GENERATE >> > + help >> > + Enables GCC to do code optimizations through PGO. >> > + >> > + config OPTIMIZE_PGO_GENERATE >> > + bool "profile-generate" >> > + help >> > + Enables GCC to generate data for code optimization >> > through PGO. >> > + >> > + config OPTIMIZE_PGO_USE >> > + bool "profile-use" >> > + help >> > + Enables GCC to do code optimizations using data >> > generated from >> > + the profile-generated phase of PGO. >> > + endchoice >> > +endif >> > + >> > choice >> > prompt "Debug information level" >> > default DEBUG_SYMBOLS_LVL3 >> > diff --git a/Makefile.uk b/Makefile.uk >> > index a78afc0..78d802c 100644 >> > --- a/Makefile.uk >> > +++ b/Makefile.uk >> > @@ -36,6 +36,14 @@ COMPFLAGS-$(CONFIG_OPTIMIZE_LTO) += -flto >> > LIBLDFLAGS-$(CONFIG_OPTIMIZE_LTO) += $(COMPFLAGS) $(COMPFLAGS-y) >> > $(ARCHFLAGS) $(ARCHFLAGS-y) >> > LDFLAGS-$(CONFIG_OPTIMIZE_LTO) += $(COMPFLAGS) $(COMPFLAGS-y) >> > $(ARCHFLAGS) $(ARCHFLAGS-y) >> > >> > +# PGO - profile-generate phase - requires the -fprofile-generate flag >> > +# when compiling the application and linking all libraries in the system. >> > +LDFLAGS-$(CONFIG_OPTIMIZE_PGO_GENERATE) += $(COMPFLAGS) $(COMPFLAGS-y) >> > $(ARCHFLAGS) $(ARCHFLAGS-y) -fprofile-generate >> > + >> > +# PGO - profile-use phase - requires the -fprofile-use flag >> > +# when compiling the application and linking all libraries in the system. >> > +LDFLAGS-$(CONFIG_OPTIMIZE_PGO_USE) += $(COMPFLAGS) $(COMPFLAGS-y) >> > $(ARCHFLAGS) $(ARCHFLAGS-y) -fprofile-use >> > + >> > DBGFLAGS-$(CONFIG_DEBUG_SYMBOLS_LVL0) += -g0 >> > DBGFLAGS-$(CONFIG_DEBUG_SYMBOLS_LVL1) += -g1 >> > DBGFLAGS-$(CONFIG_DEBUG_SYMBOLS_LVL2) += -g2 >> > -- >> > 2.17.1 >> > >> >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |