You can do it - just create a label for each request that you want timed 
individually. These will be treated as distinct events.

The OS threads are shared across Go routines - so using OS thread CPU counters, 
or thread monitoring won’t work.

So you use labels to track “events” - in this case an event is a “request 
process”. The inner labels can be wrapped around calls to the db, etc. - so you 
can get a wholistic view of an events processing time.

Unless there is something else you are asking for… CPU profiling can identify 
“slow/hogs processing”. Event labels can identify “slow” wall-time events.

> On May 12, 2020, at 4:39 PM, Steve Canfield <stevencanfi...@gmail.com> wrote:
> 
> It's not that Ian's response was clearer, it's that he actually answered the 
> question of if I can do $thing in Go; given that I can't he pointed me to the 
> same reference as you.
> 
> It's okay that Go can't do some things, but being opaque about it isn't 
> helpful.
> 
> Thanks for your help both of you!
> -Steve
> 
> On Tue, May 12, 2020 at 1:57 PM Robert Engels <reng...@ix.netcom.com 
> <mailto:reng...@ix.netcom.com>> wrote:
> In my first response I said to use labels and referred you to a document on 
> how to do it. I guess Ian’s wording was clearer :)
> 
> > On May 12, 2020, at 3:53 PM, Ian Lance Taylor <i...@golang.org 
> > <mailto:i...@golang.org>> wrote:
> > 
> > On Tue, May 12, 2020 at 1:01 PM Steve Canfield <stevencanfi...@gmail.com 
> > <mailto:stevencanfi...@gmail.com>> wrote:
> >> 
> >> Thanks Ian. Are there limits on how many such labels exist for the life of 
> >> the process, or can be active at once? Would labeling by rpc_guid be 
> >> acceptable?
> > 
> > There are no limits on labels other than memory usage.
> > 
> > Ian
> > 
> >>> On Tue, May 12, 2020 at 12:06 PM Ian Lance Taylor <i...@golang.org 
> >>> <mailto:i...@golang.org>> wrote:
> >>> 
> >>> On Tue, May 12, 2020 at 10:31 AM Steve Canfield
> >>> <stevencanfi...@gmail.com <mailto:stevencanfi...@gmail.com>> wrote:
> >>>> 
> >>>> I feel like I must be really dense, but it doesn't seem like you are 
> >>>> answering my question.
> >>>> 
> >>>> Again, assume I have good reasons to want to know the cpu usage for 
> >>>> every request. Let's say I want to do isolation or billing or whatever 
> >>>> on the basis of cpu usage.
> >>>> 
> >>>> Is this possible in Go?
> >>> 
> >>> Use context labels (https://golang.org/pkg/runtime/pprof/#WithLabels 
> >>> <https://golang.org/pkg/runtime/pprof/#WithLabels>)
> >>> and CPU profiling.  The profile should let you attribute CPU usage per
> >>> label.
> >>> 
> >>> However, that approach would only do sampling.  I do not know of an
> >>> approach that would let you get fairly precise CPU usage for every
> >>> request, as when multiple goroutines are running in parallel there is
> >>> no good way to separate out the CPU usage of each goroutine.
> >>> 
> >>> Ian
> >>> 
> >>> 
> >>>> On Mon, May 11, 2020 at 9:51 PM robert engels <reng...@ix.netcom.com 
> >>>> <mailto:reng...@ix.netcom.com>> wrote:
> >>>>> 
> >>>>> Also, you may be interested in github.com/robaho/goanalyzer 
> >>>>> <http://github.com/robaho/goanalyzer> - I feel it makes latency 
> >>>>> analysis much easier.
> >>>>> 
> >>>>> On May 11, 2020, at 11:46 PM, robert engels <reng...@ix.netcom.com 
> >>>>> <mailto:reng...@ix.netcom.com>> wrote:
> >>>>> 
> >>>>> You don’t need to do it this way. see 
> >>>>> https://rakyll.org/profiler-labels/ 
> >>>>> <https://rakyll.org/profiler-labels/>
> >>>>> 
> >>>>> You label the work. The work will be recorded with the labels for 
> >>>>> analysis. The labels can be nested. This will allow you to use the 
> >>>>> execution trace to profile wall time, see 
> >>>>> https://talks.golang.org/2015/dynamic-tools.slide#30 
> >>>>> <https://talks.golang.org/2015/dynamic-tools.slide#30>
> >>>>> 
> >>>>> The standard pprof/profile will do cpu time profiling.
> >>>>> 
> >>>>> This is all you really need to do the profiling.
> >>>>> 
> >>>>> On May 11, 2020, at 10:58 PM, Steve Canfield <stevencanfi...@gmail.com 
> >>>>> <mailto:stevencanfi...@gmail.com>> wrote:
> >>>>> 
> >>>>> Thanks, but what about the "I can't enable profiling for every request" 
> >>>>> bit? Assume it's actually important for me to know the cpu consumption 
> >>>>> on a per request basis.
> >>>>> 
> >>>>> On Mon, May 11, 2020 at 4:55 PM Robert Engels <reng...@ix.netcom.com 
> >>>>> <mailto:reng...@ix.netcom.com>> wrote:
> >>>>>> 
> >>>>>> Look at pprof labels.
> >>>>>> 
> >>>>>> On May 11, 2020, at 6:29 PM, Steven Canfield <stevencanfi...@gmail.com 
> >>>>>> <mailto:stevencanfi...@gmail.com>> wrote:
> >>>>>> 
> >>>>>> 
> >>>>>> Hi,
> >>>>>> 
> >>>>>> I have an RPC server which has heterogenous requests, e.g. some calls 
> >>>>>> hit cache and are cheaper to serve while others need to compute a 
> >>>>>> result.
> >>>>>> 
> >>>>>> Is there any way to keep track of the cpu used just by one particular 
> >>>>>> goroutine[1]? It seems like there's not a straightforward way today 
> >>>>>> without adding logic around every single blocking piece (to start/stop 
> >>>>>> a timer), and in the future will become completely impossible with 
> >>>>>> "Non-cooperative goroutine preemption".
> >>>>>> 
> >>>>>> I would be happy with only knowing this number when a goroutine 
> >>>>>> finishes.
> >>>>>> 
> >>>>>> I'm familiar with using pprof for measuring the entire process, but 
> >>>>>> it's not clear to me how to go from there to what was used by a 
> >>>>>> particular RPC, and I also can't enable profiling for every request.
> >>>>>> 
> >>>>>> Thanks,
> >>>>>> -Steve
> >>>>>> 
> >>>>>> 1: I really want a goroutine and its children, but I create new 
> >>>>>> goroutines in few enough places that I could do some context mgmt to 
> >>>>>> manage this.
> >>>>>> 
> >>>>>> --
> >>>>>> 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 
> >>>>>> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
> >>>>>> To view this discussion on the web visit 
> >>>>>> https://groups.google.com/d/msgid/golang-nuts/e2d7e3d7-c678-4515-9cdb-060d29b14500%40googlegroups.com
> >>>>>>  
> >>>>>> <https://groups.google.com/d/msgid/golang-nuts/e2d7e3d7-c678-4515-9cdb-060d29b14500%40googlegroups.com>.
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> --
> >>>>> 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 
> >>>>> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
> >>>>> To view this discussion on the web visit 
> >>>>> https://groups.google.com/d/msgid/golang-nuts/A1D870A7-ADFD-4F00-B678-E7C6C0FE80FD%40ix.netcom.com
> >>>>>  
> >>>>> <https://groups.google.com/d/msgid/golang-nuts/A1D870A7-ADFD-4F00-B678-E7C6C0FE80FD%40ix.netcom.com>.
> >>>>> 
> >>>>> 
> >>>> --
> >>>> 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 
> >>>> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
> >>>> To view this discussion on the web visit 
> >>>> https://groups.google.com/d/msgid/golang-nuts/CANLJsyBF9BezZVYtoFcGCTNYQrTuVVAQoEgBC2CWVRJOxb8P-A%40mail.gmail.com
> >>>>  
> >>>> <https://groups.google.com/d/msgid/golang-nuts/CANLJsyBF9BezZVYtoFcGCTNYQrTuVVAQoEgBC2CWVRJOxb8P-A%40mail.gmail.com>.
> > 
> > -- 
> > 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 
> > <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVknCuT8e8KSwR1VQa%2BQSnBzZ9RUdBLC1PQfAYDVJzPtQ%40mail.gmail.com
> >  
> > <https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVknCuT8e8KSwR1VQa%2BQSnBzZ9RUdBLC1PQfAYDVJzPtQ%40mail.gmail.com>.
> 
> 
> -- 
> 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 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CANLJsyD30-02N5OSQrwKbnJQ99EGy0XY3HKgJDyNtacB_EWN6A%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/CANLJsyD30-02N5OSQrwKbnJQ99EGy0XY3HKgJDyNtacB_EWN6A%40mail.gmail.com?utm_medium=email&utm_source=footer>.

-- 
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 on the web visit 
https://groups.google.com/d/msgid/golang-nuts/202AFDD6-D6A0-4DD0-84D2-572BBE450111%40ix.netcom.com.

Reply via email to