[llvm-dev] Question about : lprofValueProfNodes

Xinliang David Li via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 19 17:37:23 PST 2017


What Vedant said -- the profiler runtime provides buffer API for profile
dumping.  Note that value profiling dumping is not yet supported for buffer
API, but since you are using Front-end based instrumentation/profile-use,
value profiler is not turned on by default anyway.

David

On Tue, Dec 19, 2017 at 5:29 PM, Vedant Kumar <vsk at apple.com> wrote:

>
> On Dec 19, 2017, at 5:16 PM, Moshtaghi, Alireza <
> Alireza.Moshtaghi at netapp.com> wrote:
>
> Thank you
> So it does not seem to be relevant for what I’m trying to do.
> I’m doing something unconventional.
> The objective is to implement PGO and code coverage on a system that does
> not exit and does not have any file io, or any of  stdc libraries that
> libclang-profile is using. (more like a kernel)
> So what I’m trying to do is instead of calling __llvm_profile_write_file
> () from the application, read the sections __llvm_prf_data,
> __llvm_prf_names, __llvm_prf_cnts and __llvm_prf_vnds after the critical
> tasks are done and transfer them to outside of the system.
>
>
> You may already have worked this out, but for completeness I'll mention
> that this is typically done by:
> 1. Allocating a buffer big enough to contain all the data
> (see __llvm_profile_get_size_for_buffer_internal),
> 2. Filling out the buffer (see __llvm_profile_write_buffer_internal), and
> 3. Transferring the buffer to some host machine.
>
>
> Then dump these sections in a char * array in a c file and attribute them
> to be in the associated section.
>
>
> I'm not sure I follow -- why is a C file needed?
>
> Once you have the buffer from step 3 on the host machine, you've got a
> well-formed raw profile. You should be able to fwrite() it to e.g
> 'default.profraw' and test that it's a valid profile with llvm-profdata.
>
>
>  Then compile that file with –u__llvm_profile_runtime to create an
> executable that calls __llvm_profile_write_file to dump my profraw data.
>
> Sofar, I’m able to do the mechanics but seems like something is going
> wrong because because fprofile-instr-use does not find profile data for the
> source files.
>
>
> What error are you getting exactly? Have you confirmed that your profile
> is valid?
>
> vedant
>
>
> Any suggestion?
>
> Thanks
> A
>
> From: <vsk at apple.com> on behalf of Vedant Kumar <vsk at apple.com>
> Date: Tuesday, December 19, 2017 at 11:32 AM
> To: "Moshtaghi, Alireza" <Alireza.Moshtaghi at netapp.com>
> Cc: llvm-dev <llvm-dev at lists.llvm.org>, Xinliang David Li <
> davidxl at google.com>
> Subject: Re: [llvm-dev] Question about : lprofValueProfNodes
>
> Hi,
>
>
> On Dec 19, 2017, at 10:26 AM, Moshtaghi, Alireza via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> Hi
> This array is defined in compiler-rt: InstrProfilingValue.c but I can’t
> find where it is used?
>
> It's used in allocateOneNode(). Incrementing the current vnode pointer
> gives a fresh node (possibly backed by the shared pool).
>
>
>
> And the comment on it does not say much about why we need it either.
>
> It's used to avoid calling malloc(), which David (CC'd) found to be a
> performance improvement.
>
> best,
> vedant
>
>
> Can someone explain why we need this and where it is used?
>
> /* A shared static pool in addition to the vnodes statically
> * allocated by the compiler.  */
> COMPILER_RT_VISIBILITY ValueProfNode
>     lprofValueProfNodes[INSTR_PROF_VNODE_POOL_SIZE]
> COMPILER_RT_SECTION(COMPILER_RT_SEG INSTR_PROF_VNODES_SECT_NAME_STR);
>
> Thanks
> A
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171219/16d50f44/attachment.html>


More information about the llvm-dev mailing list