Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

runtime: Optimize FindSymbol #2305

Merged
merged 1 commit into from
Nov 27, 2023
Merged

runtime: Optimize FindSymbol #2305

merged 1 commit into from
Nov 27, 2023

Conversation

kakkoyun
Copy link
Member

@kakkoyun kakkoyun commented Nov 27, 2023

  • Add tests and benchmarks for isSymbolNameInSection
  • Optimize FindSymbol
  • Integrate runtime/ruby with FindSymbol
  • Use bufio.Scanner instead of regex
  • Use testdata submodule

Signed-off-by: Kemal Akkoyun kakkoyun@gmail.com

I messed up the history of #2280

Benchmarks

Old

goos: linux
goarch: amd64
pkg: github.com/parca-dev/parca-agent/pkg/runtime
cpu: AMD Ryzen 9 5950X 16-Core Processor            
BenchmarkFindSymbol-32               540           2727986 ns/op          687891 B/op      13820 allocs/op
BenchmarkFindSymbol-32               420           2947543 ns/op          687889 B/op      13820 allocs/op
BenchmarkFindSymbol-32               432           2974568 ns/op          687892 B/op      13820 allocs/op
BenchmarkFindSymbol-32               414           2888769 ns/op          687890 B/op      13820 allocs/op
BenchmarkFindSymbol-32               476           2866761 ns/op          687891 B/op      13820 allocs/op
BenchmarkFindSymbol-32               445           2534425 ns/op          687890 B/op      13820 allocs/op
BenchmarkFindSymbol-32               450           2950351 ns/op          687891 B/op      13820 allocs/op
BenchmarkFindSymbol-32               450           2772721 ns/op          687889 B/op      13820 allocs/op
BenchmarkFindSymbol-32               392           2826073 ns/op          687890 B/op      13820 allocs/op
BenchmarkFindSymbol-32               451           2851258 ns/op          687891 B/op      13820 allocs/op
PASS
ok      github.com/parca-dev/parca-agent/pkg/runtime    15.395s

New

goos: linux
goarch: amd64
pkg: github.com/parca-dev/parca-agent/pkg/runtime
cpu: AMD Ryzen 9 5950X 16-Core Processor            
BenchmarkFindSymbol-32               100          10170947 ns/op          692470 B/op      13846 allocs/op
BenchmarkFindSymbol-32               128           8933931 ns/op          691967 B/op      13845 allocs/op
BenchmarkFindSymbol-32               135           9904559 ns/op          692174 B/op      13846 allocs/op
BenchmarkFindSymbol-32               118           9696289 ns/op          692349 B/op      13846 allocs/op
BenchmarkFindSymbol-32               122           9897046 ns/op          692241 B/op      13846 allocs/op
BenchmarkFindSymbol-32               100          10172680 ns/op          692224 B/op      13846 allocs/op
BenchmarkFindSymbol-32               124           9957047 ns/op          692252 B/op      13846 allocs/op
BenchmarkFindSymbol-32               124          10333432 ns/op          692179 B/op      13846 allocs/op
BenchmarkFindSymbol-32               100          10207261 ns/op          692313 B/op      13846 allocs/op
BenchmarkFindSymbol-32               117          10515376 ns/op          692617 B/op      13847 allocs/op
PASS
ok      github.com/parca-dev/parca-agent/pkg/runtime    18.183s

Comparison

oos: linux
goarch: amd64
pkg: github.com/parca-dev/parca-agent/pkg/runtime
cpu: AMD Ryzen 9 5950X 16-Core Processor            
              │   old.txt    │               new.txt               │
              │    sec/op    │   sec/op     vs base                │
FindSymbol-32   3.732m ± 11%   2.859m ± 5%  -23.40% (p=0.000 n=10)

              │    old.txt    │               new.txt                │
              │     B/op      │     B/op      vs base                │
FindSymbol-32   2656.4Ki ± 0%   671.8Ki ± 0%  -74.71% (p=0.000 n=10)

              │   old.txt   │               new.txt               │
              │  allocs/op  │  allocs/op   vs base                │
FindSymbol-32   29.32k ± 0%   13.82k ± 0%  -52.87% (p=0.000 n=10)

Test Plan

Ruby: https://pprof.me/c6d16202aa0d9a478c4d557709e0fdf5
Python: https://pprof.me/139355b6fe69c0db9e7c5394ec3dcf8e

CleanShot 2023-11-21 at 20 41 02
CleanShot 2023-11-21 at 20 40 54

@kakkoyun kakkoyun requested a review from a team as a code owner November 27, 2023 20:16
@kakkoyun kakkoyun force-pushed the fast_find_symbol_2 branch 2 times, most recently from 7c16c3d to 1ba0ec3 Compare November 27, 2023 20:26
- Add tests and benchmarks for isSymbolNameInSection
- Optimize FindSymbol
- Integrate runtime/ruby with FindSymbol
- Use bufio.Scanner instead of regex
- Use testdata submodule

Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
@kakkoyun kakkoyun merged commit c2f3e4a into main Nov 27, 2023
22 checks passed
@kakkoyun kakkoyun deleted the fast_find_symbol_2 branch November 27, 2023 21:10
kakkoyun added a commit that referenced this pull request Nov 29, 2023
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>

depends:  
- #2305 
- #2286
- #2290
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant