To clarify, I assume you have an internal request id that is tracked (if not, I am not sure how your logging would work). Create a label that matches the request ID at the top handle request layer.
Then you can use pprof/trace, find that request, and do a detailed trace analysis on the event handling. > On May 12, 2020, at 5:00 PM, robert engels <reng...@ix.netcom.com> wrote: > > 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 >> <mailto: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 > <mailto: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 > > <https://groups.google.com/d/msgid/golang-nuts/202AFDD6-D6A0-4DD0-84D2-572BBE450111%40ix.netcom.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/2FEA0DC5-0AFD-4DF7-8380-26D8EBEF9EE3%40ix.netcom.com.