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> wrote:
> 
> On Tue, May 12, 2020 at 1:01 PM Steve Canfield <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> wrote:
>>> 
>>> On Tue, May 12, 2020 at 10:31 AM Steve Canfield
>>> <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)
>>> 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> 
>>>> wrote:
>>>>> 
>>>>> Also, you may be interested in 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> wrote:
>>>>> 
>>>>> You don’t need to do it this way. see 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
>>>>> 
>>>>> 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> 
>>>>> 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> 
>>>>> wrote:
>>>>>> 
>>>>>> Look at pprof labels.
>>>>>> 
>>>>>> On May 11, 2020, at 6:29 PM, Steven Canfield <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.
>>>>>> To view this discussion on the web visit 
>>>>>> 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.
>>>>> To view this discussion on the web visit 
>>>>> 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.
>>>> To view this discussion on the web visit 
>>>> 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.
> To view this discussion on the web visit 
> 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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/4C461D1A-DBC3-46C9-B3D7-37C1967BA7AE%40ix.netcom.com.

Reply via email to