more updates
This commit is contained in:
parent
04e5f24bca
commit
9c6fb8f19a
9
TODO
9
TODO
@ -11,7 +11,9 @@
|
|||||||
- cache line explanation: http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html
|
- cache line explanation: http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html
|
||||||
- avoiding false sharing: http://www.drdobbs.com/parallel/eliminate-false-sharing/217500206
|
- avoiding false sharing: http://www.drdobbs.com/parallel/eliminate-false-sharing/217500206
|
||||||
- how does this translate to go? http://www.catb.org/esr/structure-packing/
|
- how does this translate to go? http://www.catb.org/esr/structure-packing/
|
||||||
|
- https://en.wikipedia.org/wiki/Amdahl%27s_law
|
||||||
|
- https://github.com/ardanlabs/gotraining/tree/master/topics/profiling
|
||||||
|
- https://github.com/ardanlabs/gotraining/tree/master/topics/benchmarking
|
||||||
|
|
||||||
videos:
|
videos:
|
||||||
https://gophervids.appspot.com/#tags=optimization
|
https://gophervids.appspot.com/#tags=optimization
|
||||||
@ -40,6 +42,11 @@ videos:
|
|||||||
Machine Architecture: Things Your Programming Language Never Told You
|
Machine Architecture: Things Your Programming Language Never Told You
|
||||||
https://www.youtube.com/watch?v=L7zSU9HI-6I
|
https://www.youtube.com/watch?v=L7zSU9HI-6I
|
||||||
|
|
||||||
|
asm:
|
||||||
|
https://golang.org/doc/asm
|
||||||
|
https://goroutines.com/asm
|
||||||
|
http://www.doxsey.net/blog/go-and-assembly
|
||||||
|
|
||||||
posts:
|
posts:
|
||||||
http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
|
http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
|
||||||
https://arxiv.org/abs/1509.05053
|
https://arxiv.org/abs/1509.05053
|
||||||
|
@ -6,6 +6,8 @@ format where the content is here instead of external. The links should be sorte
|
|||||||
|
|
||||||
All the content will be licensed under CC-BY-SA.
|
All the content will be licensed under CC-BY-SA.
|
||||||
|
|
||||||
|
## Optimization Workflow
|
||||||
|
|
||||||
* All optimizations should follow these steps:
|
* All optimizations should follow these steps:
|
||||||
|
|
||||||
1. determine your performance goals and confirm you are not meeting them
|
1. determine your performance goals and confirm you are not meeting them
|
||||||
@ -20,8 +22,10 @@ All the content will be licensed under CC-BY-SA.
|
|||||||
1. use <https://github.com/tsenart/vegeta> for load testing http services
|
1. use <https://github.com/tsenart/vegeta> for load testing http services
|
||||||
1. make sure your latency numbers make sense: <https://youtu.be/lJ8ydIuPFeU>
|
1. make sure your latency numbers make sense: <https://youtu.be/lJ8ydIuPFeU>
|
||||||
|
|
||||||
Step 0 is important. It tells you when and where to start optimizing. More
|
The first step is important. It tells you when and where to start optimizing.
|
||||||
importantly, it also tells you when to stop.
|
More importantly, it also tells you when to stop. Pretty much all
|
||||||
|
optimizations add code complexity in exchange for speed. And you can *always*
|
||||||
|
make code faster. It's a balancing act.
|
||||||
|
|
||||||
The basic rules of the game are:
|
The basic rules of the game are:
|
||||||
|
|
||||||
@ -37,6 +41,7 @@ The basic rules of the game are:
|
|||||||
Techniques applicable to source code in general
|
Techniques applicable to source code in general
|
||||||
|
|
||||||
1. introduction to pprof
|
1. introduction to pprof
|
||||||
|
* (micro)benchmarks
|
||||||
* -cpuprofile
|
* -cpuprofile
|
||||||
* net/http/pprof
|
* net/http/pprof
|
||||||
* go tool pprof (and <https://github.com/google/pprof>)
|
* go tool pprof (and <https://github.com/google/pprof>)
|
||||||
@ -72,7 +77,7 @@ Techniques applicable to source code in general
|
|||||||
* And all the dangers that go with it
|
* And all the dangers that go with it
|
||||||
* Common uses for unsafe
|
* Common uses for unsafe
|
||||||
* mmap'ing data files
|
* mmap'ing data files
|
||||||
* serialization
|
* speedy de-serialization
|
||||||
|
|
||||||
## Assembly
|
## Assembly
|
||||||
* Stuff about writing assembly code for Go
|
* Stuff about writing assembly code for Go
|
||||||
@ -82,9 +87,10 @@ Techniques applicable to source code in general
|
|||||||
* encoding/json -> ffjson
|
* encoding/json -> ffjson
|
||||||
* net/http -> fasthttp
|
* net/http -> fasthttp
|
||||||
* regexp -> ragel (or other regular expression package)
|
* regexp -> ragel (or other regular expression package)
|
||||||
|
* serialization
|
||||||
* encoding/gob -> <https://github.com/alecthomas/go_serialization_benchmarks>
|
* encoding/gob -> <https://github.com/alecthomas/go_serialization_benchmarks>
|
||||||
* protobuf -> <https://github.com/gogo/protobuf>
|
* protobuf -> <https://github.com/gogo/protobuf>
|
||||||
* serialization is all about tradeoffs
|
* all formats have trade-offs; choose one that matches what you need
|
||||||
|
|
||||||
## Tooling
|
## Tooling
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user