Vtune is very useful for squeezing the ultimate performance out of Go 
programs, once you have done
the usual optimisation, mimized allocations, io etc. 

pprof is more than adequate for the average programmer. But when you need 
to super-optimise 
functions which implement math kernels, crypto functions, video codecs etc, 
then without a HW perfomance
counter based profiler such as vtune or linux perf, 
(https://perf.wiki.kernel.org/index.php/Main_Page)  you are shooting in the 
dark.
vtune not only tells you which functions are taking the most time, but WHY 
these are taking a long time,
how long the code is spending waiting for cache misses, and the different 
kind of stall cycles which 
kill performance on a modern CPU.

Vtune or perf is also a great tool for teaching us about processors, and 
helping us understand what influences
the rate at which instructions are executed by them.

The problem with vtune is that it is quite unfriendly and expensive (> 
$3000 for a single floating license)!
It also does not work on ARM processors (such as Apple M1).

There has been a proposal to add performance counters to pprof.
https://go.googlesource.com/proposal/+/refs/changes/08/219508/2/design/36821-perf-counter-pprof.md
If accepted, this would give the power of vtune to the masses for free..

On Tuesday, 2 February 2021 at 06:37:37 UTC nnsm...@gmail.com wrote:

> One more question, is it effective to use vtune to tune golang. I am 
> afraid that vtune is not suitable, although intel claims to be effective.
> 在2021年2月2日星期二 UTC+8 下午2:32:40<颜文泽> 写道:
>
>> Thanks, it's not memory db, but my current test is not involving io. I'll 
>> take time to look at your information, thanks a lot. Also I found that many 
>> of the functions with high cpi rate are runtime functions, is the overhead 
>> of these functions unavoidable?The following diagram is for a single 
>> routine:
>> [image: 2021-02-02 14-25-33 的屏幕截图.png]
>> The following chart is for the 8 routines:
>> [image: 2021-02-02 14-25-56 的屏幕截图.png]
>> 在2021年2月2日星期二 UTC+8 下午2:27:39<ren...@ix.netcom.com> 写道:
>>
>>> Unless it is an in memory database, I would expect the IO costs to dwarf 
>>> the cpu costs, but I guess a lot depends on how you define ‘analytical 
>>> processing’.
>>>
>>> In my experience, “out of the box” performance of Go routines in IO 
>>> processing is outstanding.
>>>
>>> For the cpu bound case, I think with threads, cpu assignments (cpuset), 
>>> etc. you can probably create a higher performing system in some cases - but 
>>> it’s a lot of work.
>>>
>>> Even without that, I think the scheduler in most Linux systems is more 
>>> mature than the Go scheduler, and makes better choices for cache affinity, 
>>> etc. It’s very hard to design a high performance cpu bound system that runs 
>>> on a general purpose OS or language/platform. Without knowledge of the olap 
>>> db design it is very hard to make a recommendation.
>>>
>>> This is some suggested reading to help you in your journey 
>>> https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html
>>>
>>> On Feb 2, 2021, at 12:07 AM, 颜文泽 <nnsm...@gmail.com> wrote:
>>>
>>> I don't know much about the internal implementation of golang, sorry. I 
>>> was a c programmer and I tried to implement the original logic (olap 
>>> database) by using routine as a thread replacement. But I found that I 
>>> would encounter bottlenecks, and I don't know how to solve them. Maybe I 
>>> should study the implementation of routine before I can write the right 
>>> code.
>>>
>>> 在2021年2月2日星期二 UTC+8 下午12:21:44<ren...@ix.netcom.com> 写道:
>>>
>>>> You wrote “I found that cache misses from routines switching is also a 
>>>> headache”. 
>>>>
>>>> They would not be switching if they are cpu bound and there are less of 
>>>> than number of cpus. Remember too that you need some % of the cpus to 
>>>> execute the runtime GC code and other housekeeping. 
>>>>
>>>> > On Feb 1, 2021, at 10:04 PM, 颜文泽 <nnsm...@gmail.com> wrote: 
>>>> > 
>>>> > I found that cache misses from routines switching is also a headache 
>>>>
>>>>
>>> -- 
>>> 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...@googlegroups.com.
>>>
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/35bccad0-64a9-4796-bc3f-a9cdb8c82961n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/golang-nuts/35bccad0-64a9-4796-bc3f-a9cdb8c82961n%40googlegroups.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/c3467bbe-f629-4d2d-bfe3-c1dd20df2e0an%40googlegroups.com.

Reply via email to