Idea 0: Can you just click on the graphviz boxes in the pprof http page
for your section and then just show the source for only those? 
Might give you a quick idea of which are the hottest spots only 
among those func of interest.

Idea 1: Can you write a test or benchmark that just exercises the important 
section?

I suspect you could then run the profiler on your benchmark/test.
If not, it might be worth refactoring your code to allow this. 
Otherwise you could write an alternative "main" as a harness that just calls
the important section.

Idea 2: referring to the StartCPUProfile docs:
> On Unix-like systems, StartCPUProfile does not work by default for Go 
code built 
> with -buildmode=c-archive or -buildmode=c-shared. StartCPUProfile relies 
on the 
> SIGPROF signal, but that signal will be delivered to the main program's 
SIGPROF 
> signal handler (if any) not to the one used by Go. To make it work, call 
os/signal.Notify 
> for syscall.SIGPROF, but note that doing so may break any profiling being 
done by the main program.

This makes it sounds like the SIGPROF signal is used to do the sampling. So
you might be able to manipulate it (e.g. ignore it when not in your code). 
Seems like
a hack, but might be worth experimenting with.

Idea 3: post processing. You could probably take apart the profile log 
after it is
recorded and discard the samples that are irrelevant.

Idea 4: simple manual timing. Insert time.Now() and time.Since() calls at
strategic points, and measure the improvement as you tweak your code.

On Tuesday, November 12, 2024 at 11:16:56 AM UTC Stephen Illingworth wrote:

> Hello,
>
> I want to create a runtime CPU profile but to restrict the profile to a 
> specific part of the program. I currently have a way of taking a CPU 
> profile for the entire program so have experience with the runtime/pprof 
> package but this is a new requirement for me.
>
> The 'section' to be profiled represents a significant amount of code and 
> I'm looking to see if any particular part of that section can be improved. 
> The problem I have is that the program outside of that section is 
> significantly larger (ie. larger CPU load) and dominates the profile data. 
>
> The section to be profiled is entered and exited 60 times per second (at a 
> minimum).
>
> In effect, I want to pause the CPU profile when execution exits the 
> section and to resume when the profile enters it again. Stopping and 
> restarting the profile is too slow.
>
> But maybe there's a completely different way to do this. Does anyone have 
> experience with this type of thing?
>
> Regards
> Stephen
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/c6c0833e-a1d0-4132-87cf-c03b7f6a0ab6n%40googlegroups.com.

Reply via email to