> On Jun 29, 2016, at 3:06 PM, Kinney, Michael D <michael.d.kin...@intel.com> > wrote: > > Why can't we simply use the target.txt TOOL_CHAIN_CONF define > in target.txt as it works today? You could split tools_def.txt > into several versions, with the default one being the maintained > one and developers can opt into community or deprecated ones. > > I do want to make sure we are focused on the right problem here > > 1) # lines in tools_def.txt > 2) maintenance of tools_def.txt > 3) build performance
Mike, If parsing the file 47 times was enough to make a function stand out in the Python performance log I would guess the parsing it 1 time is not that efficient. In general the built tools seems architected to "go slow", well to make it easier to debug the build system and performance was not important. 1) I saw regex was getting called 1,000,000 times in a Python performance log. I think most of it is scanning all the C code to build the dependencies for the makefile a) Likely make + compiler is better performance optimized for this, and is continuously getting improved. b) A build option to do this the normal way would be nice. c) I'm guessing a lot of the early ... time in the build is this step. 2) Parallel builds are done from Python threads vs make -j a) See #1 b) It would be nice to have a build phase that just generated the makefiles including a top level makefile was constructed to enable parallel build. Then the top level makefile could call the generated makefile. After that build can be called to construct the FDs. c) When we build DEBUG and RELEASE in parallel, or multiple platforms it seems like the Python is fighting the make -j. If it was all make -j then make could load balance. 3) The FV construction seems slow and it generates multiple text files per section per file and there is lots of calling out between Python and C tools. a) Maybe combining all the FD construction into a single C program would allow all the data to be in memory vs. on disk. 4) It does not seem that the Python code has really been performance tuned. A large file was getting parsed 47 time, regex getting called a 1,000,000 times etc. 5) Most of the build targets use scripts. a) A top level makefile, and moving some of the work to makefiles could help with parallelism. b) I've got this working on our proprietary tree. 1) Had to make Conf/ part of the Buid/ output. I made a small mod to the tool to copy the Conf over if the alternate Conf location passed to build did not exit. 2) I had to add .NOTPARALLEL: to some of the BaseTools GNUmakefiles since they break for a parallel build. 3) Then you port the build.sh (or build.bat) to be a makefile. Our old parallelized EDK builds took about 2m10s to do a DEBUG build for a target, and with the edk2 it is 3m52s. Thanks, Andrew Fish PS As we know from performance tuning the ROM the most important thing to do is profile, and not listen to the old grumpy guy :). _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel