Author tzot
Recipients tzot
Date 2016-02-08.13:28:25
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1454938106.72.0.648611247693.issue26307@psf.upfronthosting.co.za>
In-reply-to
Content
(related to issue #24915)
I discovered that `make profile-opt` does not use the profile information for the builtin-modules (e.g. arraymodule or _pickle) because in the `profile-opt` target there is the following sequence of actions:

    …
    $(MAKE) build_all_merge_profile
    @echo "Rebuilding with profile guided optimizations:"
    $(MAKE) clean
    $(MAKE) build_all_use_profile
    …

The action `$(MAKE) clean` performs an `rm -rf build`, destroying among other things all the *.gcda files generated for the built-in modules.
On my Linux system with gcc, a kludge to `Makefile.pre.in` that works is:

    …
    @echo "Rebuilding with profile guided optimizations:"
    find build -name \*.gcda -print | cpio -o >_modules.gcda.cpio # XXX
    $(MAKE) clean
    cpio -id <_modules.gcda.cpio # XXX
    $(MAKE) build_all_use_profile
    …

but, like I said, it's a kludge and it's POSIX-only (-print0 can be avoided since I believe it's guaranteed that there will be no whitespace-containing-filenames).

Now, if this road is to be taken, I believe the most cross-platform method available to save the profile-generated files is to use a custom python script (at this point, the local profile-generating python executable is functional) and make a tar file, which will be untared back. However, I don't like it much.

I'm willing to provide any necessary patches if someone gives me a "proper" roadmap as to how to handle this issue.
History
Date User Action Args
2016-02-08 13:28:26tzotsetrecipients: + tzot
2016-02-08 13:28:26tzotsetmessageid: <1454938106.72.0.648611247693.issue26307@psf.upfronthosting.co.za>
2016-02-08 13:28:26tzotlinkissue26307 messages
2016-02-08 13:28:25tzotcreate