more updates

This commit is contained in:
Damian Gryski 2016-05-23 14:21:18 +02:00
parent 04e5f24bca
commit 9c6fb8f19a
2 changed files with 20 additions and 7 deletions

9
TODO
View File

@ -11,7 +11,9 @@
- 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
- 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:
https://gophervids.appspot.com/#tags=optimization
@ -40,6 +42,11 @@ videos:
Machine Architecture: Things Your Programming Language Never Told You
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:
http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
https://arxiv.org/abs/1509.05053

View File

@ -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.
## Optimization Workflow
* All optimizations should follow these steps:
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. 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
importantly, it also tells you when to stop.
The first step is important. It tells you when and where to start optimizing.
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:
@ -37,6 +41,7 @@ The basic rules of the game are:
Techniques applicable to source code in general
1. introduction to pprof
* (micro)benchmarks
* -cpuprofile
* net/http/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
* Common uses for unsafe
* mmap'ing data files
* serialization
* speedy de-serialization
## Assembly
* Stuff about writing assembly code for Go
@ -82,9 +87,10 @@ Techniques applicable to source code in general
* encoding/json -> ffjson
* net/http -> fasthttp
* regexp -> ragel (or other regular expression package)
* encoding/gob -> <https://github.com/alecthomas/go_serialization_benchmarks>
* protobuf -> <https://github.com/gogo/protobuf>
* serialization is all about tradeoffs
* serialization
* encoding/gob -> <https://github.com/alecthomas/go_serialization_benchmarks>
* protobuf -> <https://github.com/gogo/protobuf>
* all formats have trade-offs; choose one that matches what you need
## Tooling