Skip to content

Commit

Permalink
🐛 address performance issue with perl (#751) (#754)
Browse files Browse the repository at this point in the history
Signed-off-by: Pranav Gaikwad <[email protected]>
Signed-off-by: Cherry Picker <[email protected]>

Signed-off-by: Pranav Gaikwad <[email protected]>
Signed-off-by: Cherry Picker <[email protected]>
Co-authored-by: Pranav Gaikwad <[email protected]>
  • Loading branch information
konveyor-ci-bot[bot] and pranavgaikwad authored Dec 16, 2024
1 parent 7b23251 commit 39f15c8
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 2 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Run benchmark tests

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
benchmark:
runs-on: ${{ matrix.os.id }}

strategy:
matrix:
os:
- id: macos-latest
name: mac

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: Run benchmark tests
run: |
go install golang.org/x/perf/cmd/benchstat@latest
go mod tidy
go test -run=^$ -bench=. -benchmem -count=6 ./... > benchmark_results
- name: Display Benchstat results
run: benchstat benchmark.${{ matrix.os.name }} benchmark_results
138 changes: 138 additions & 0 deletions benchmark.mac
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
? github.com/konveyor/analyzer-lsp/cmd/analyzer [no test files]
? github.com/konveyor/analyzer-lsp/cmd/dep [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/engine 0.401s
PASS
ok github.com/konveyor/analyzer-lsp/engine/internal 0.343s
PASS
ok github.com/konveyor/analyzer-lsp/engine/labels 0.303s
goos: darwin
goarch: arm64
pkg: github.com/konveyor/analyzer-lsp/event
cpu: Apple M2 Pro
Benchmark/Baseline-12 24095722 50.54 ns/op 0 B/op 0 allocs/op
Benchmark/Baseline-12 23726140 49.87 ns/op 0 B/op 0 allocs/op
Benchmark/Baseline-12 23899740 49.84 ns/op 0 B/op 0 allocs/op
Benchmark/Baseline-12 24208536 49.64 ns/op 0 B/op 0 allocs/op
Benchmark/Baseline-12 24224194 49.56 ns/op 0 B/op 0 allocs/op
Benchmark/Baseline-12 24192754 49.65 ns/op 0 B/op 0 allocs/op
Benchmark/StdLog-12 4844557 247.6 ns/op 152 B/op 12 allocs/op
Benchmark/StdLog-12 4867081 246.8 ns/op 152 B/op 12 allocs/op
Benchmark/StdLog-12 4861424 247.7 ns/op 152 B/op 12 allocs/op
Benchmark/StdLog-12 4803439 247.4 ns/op 152 B/op 12 allocs/op
Benchmark/StdLog-12 4855087 247.6 ns/op 152 B/op 12 allocs/op
Benchmark/StdLog-12 4815972 247.2 ns/op 152 B/op 12 allocs/op
Benchmark/LogNoExporter-12 3493294 344.3 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoExporter-12 3489210 344.1 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoExporter-12 3488331 343.6 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoExporter-12 3485558 344.0 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoExporter-12 3491460 343.8 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoExporter-12 3493819 343.6 ns/op 0 B/op 0 allocs/op
Benchmark/TraceNoExporter-12 1000000 1060 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoExporter-12 1000000 1057 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoExporter-12 1000000 1063 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoExporter-12 1000000 1059 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoExporter-12 1000000 1056 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoExporter-12 1000000 1058 ns/op 2816 B/op 16 allocs/op
Benchmark/StatsNoExporter-12 2286189 524.4 ns/op 0 B/op 0 allocs/op
Benchmark/StatsNoExporter-12 2283171 524.1 ns/op 0 B/op 0 allocs/op
Benchmark/StatsNoExporter-12 2288745 529.0 ns/op 0 B/op 0 allocs/op
Benchmark/StatsNoExporter-12 2288671 524.7 ns/op 0 B/op 0 allocs/op
Benchmark/StatsNoExporter-12 2289902 524.8 ns/op 0 B/op 0 allocs/op
Benchmark/StatsNoExporter-12 2287399 524.3 ns/op 0 B/op 0 allocs/op
Benchmark/LogNoop-12 800296 1476 ns/op 2816 B/op 16 allocs/op
Benchmark/LogNoop-12 809149 1474 ns/op 2816 B/op 16 allocs/op
Benchmark/LogNoop-12 814642 1473 ns/op 2816 B/op 16 allocs/op
Benchmark/LogNoop-12 804619 1476 ns/op 2816 B/op 16 allocs/op
Benchmark/LogNoop-12 813055 1475 ns/op 2816 B/op 16 allocs/op
Benchmark/LogNoop-12 801357 1476 ns/op 2816 B/op 16 allocs/op
Benchmark/TraceNoop-12 320142 3751 ns/op 9216 B/op 64 allocs/op
Benchmark/TraceNoop-12 318978 3765 ns/op 9216 B/op 64 allocs/op
Benchmark/TraceNoop-12 317174 3762 ns/op 9216 B/op 64 allocs/op
Benchmark/TraceNoop-12 321618 3751 ns/op 9216 B/op 64 allocs/op
Benchmark/TraceNoop-12 318663 3752 ns/op 9216 B/op 64 allocs/op
Benchmark/TraceNoop-12 316610 3737 ns/op 9216 B/op 64 allocs/op
Benchmark/StatsNoop-12 432556 2757 ns/op 5632 B/op 32 allocs/op
Benchmark/StatsNoop-12 431367 2755 ns/op 5632 B/op 32 allocs/op
Benchmark/StatsNoop-12 439297 2759 ns/op 5632 B/op 32 allocs/op
Benchmark/StatsNoop-12 438567 2756 ns/op 5632 B/op 32 allocs/op
Benchmark/StatsNoop-12 435147 2753 ns/op 5632 B/op 32 allocs/op
Benchmark/StatsNoop-12 434988 2815 ns/op 5632 B/op 32 allocs/op
Benchmark/Log-12 217500 5545 ns/op 2816 B/op 16 allocs/op
Benchmark/Log-12 213459 5557 ns/op 2816 B/op 16 allocs/op
Benchmark/Log-12 217459 5535 ns/op 2816 B/op 16 allocs/op
Benchmark/Log-12 215778 5536 ns/op 2816 B/op 16 allocs/op
Benchmark/Log-12 213157 5542 ns/op 2816 B/op 16 allocs/op
Benchmark/Log-12 215679 5541 ns/op 2816 B/op 16 allocs/op
Benchmark/Trace-12 57816 20692 ns/op 22222 B/op 384 allocs/op
Benchmark/Trace-12 57600 20707 ns/op 22222 B/op 384 allocs/op
Benchmark/Trace-12 58332 20819 ns/op 22223 B/op 384 allocs/op
Benchmark/Trace-12 57784 20719 ns/op 22223 B/op 384 allocs/op
Benchmark/Trace-12 58201 20829 ns/op 22223 B/op 384 allocs/op
Benchmark/Trace-12 58064 20801 ns/op 22223 B/op 384 allocs/op
Benchmark/Stats-12 247478 5032 ns/op 5632 B/op 32 allocs/op
Benchmark/Stats-12 240490 5104 ns/op 5632 B/op 32 allocs/op
Benchmark/Stats-12 235659 4923 ns/op 5632 B/op 32 allocs/op
Benchmark/Stats-12 234410 4951 ns/op 5632 B/op 32 allocs/op
Benchmark/Stats-12 242782 4903 ns/op 5632 B/op 32 allocs/op
Benchmark/Stats-12 234861 5083 ns/op 5632 B/op 32 allocs/op
PASS
ok github.com/konveyor/analyzer-lsp/event 89.042s
? github.com/konveyor/analyzer-lsp/event/core [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/event/export 0.270s
? github.com/konveyor/analyzer-lsp/event/export/eventtest [no test files]
? github.com/konveyor/analyzer-lsp/event/export/metric [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/event/export/ocagent 0.364s
PASS
ok github.com/konveyor/analyzer-lsp/event/export/ocagent/wire 0.278s
? github.com/konveyor/analyzer-lsp/event/export/prometheus [no test files]
? github.com/konveyor/analyzer-lsp/event/keys [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/event/label 0.243s
? github.com/konveyor/analyzer-lsp/event/tag [no test files]
? github.com/konveyor/analyzer-lsp/jsonrpc2 [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/jsonrpc2_v2 0.245s
? github.com/konveyor/analyzer-lsp/lsp/base_service_client [no test files]
? github.com/konveyor/analyzer-lsp/lsp/protocol [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/lsp/protocol/generate 0.359s
? github.com/konveyor/analyzer-lsp/output/v1/konveyor [no test files]
PASS
ok github.com/konveyor/analyzer-lsp/parser 0.322s
goos: darwin
goarch: arm64
pkg: github.com/konveyor/analyzer-lsp/provider
cpu: Apple M2 Pro
BenchmarkMultilineGrepFileSizeSmall-12 18542 66409 ns/op 56058 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeSmall-12 18519 67844 ns/op 56106 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeSmall-12 18536 65137 ns/op 56021 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeSmall-12 18601 65112 ns/op 56100 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeSmall-12 17031 67742 ns/op 56140 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeSmall-12 18585 64159 ns/op 56015 B/op 322 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2812 419900 ns/op 201959 B/op 2224 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2863 419901 ns/op 202090 B/op 2224 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2820 420061 ns/op 202098 B/op 2224 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2852 419859 ns/op 201826 B/op 2224 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2814 420313 ns/op 201906 B/op 2224 allocs/op
BenchmarkMultilineGrepFileSizeBig-12 2844 421526 ns/op 202314 B/op 2224 allocs/op
PASS
ok github.com/konveyor/analyzer-lsp/provider 19.117s
? github.com/konveyor/analyzer-lsp/provider/grpc [no test files]
goos: darwin
goarch: arm64
pkg: github.com/konveyor/analyzer-lsp/provider/internal/builtin
cpu: Apple M2 Pro
BenchmarkRunOSSpecificGrepCommand-12 69 17053207 ns/op 43916 B/op 65 allocs/op
BenchmarkRunOSSpecificGrepCommand-12 72 17169915 ns/op 43725 B/op 64 allocs/op
BenchmarkRunOSSpecificGrepCommand-12 73 16839756 ns/op 43707 B/op 64 allocs/op
BenchmarkRunOSSpecificGrepCommand-12 69 17492351 ns/op 43743 B/op 64 allocs/op
BenchmarkRunOSSpecificGrepCommand-12 76 16651446 ns/op 43775 B/op 64 allocs/op
BenchmarkRunOSSpecificGrepCommand-12 70 17191546 ns/op 43852 B/op 65 allocs/op
PASS
ok github.com/konveyor/analyzer-lsp/provider/internal/builtin 8.223s
? github.com/konveyor/analyzer-lsp/provider/internal/grpc [no test files]
? github.com/konveyor/analyzer-lsp/provider/lib [no test files]
? github.com/konveyor/analyzer-lsp/tracing [no test files]
4 changes: 2 additions & 2 deletions provider/internal/builtin/service_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,8 +547,8 @@ func runOSSpecificGrepCommand(pattern string, location string, providerContext p
escapedPattern = strings.ReplaceAll(escapedPattern, "'", "'\\''")
escapedPattern = strings.ReplaceAll(escapedPattern, "$", "\\$")
cmd := fmt.Sprintf(
`find %v -type f | \
while read file; do perl -ne '/%v/ && print "$ARGV:$.:$1\n";' "$file"; done`,
`find %v -type f -print0 | \
xargs -0 perl -ne '/%v/ && print "$ARGV:$.:$1\n";'`,
location, escapedPattern,
)
findstr := exec.Command("/bin/sh", "-c", cmd)
Expand Down
14 changes: 14 additions & 0 deletions provider/internal/builtin/service_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package builtin

import (
"context"
"path/filepath"
"reflect"
"sync"
"testing"

"github.com/go-logr/logr/testr"
"github.com/konveyor/analyzer-lsp/engine"
"github.com/konveyor/analyzer-lsp/provider"
)

Expand Down Expand Up @@ -122,3 +124,15 @@ func Test_builtinServiceClient_filterByIncludedPaths(t *testing.T) {
})
}
}

func BenchmarkRunOSSpecificGrepCommand(b *testing.B) {
for i := 0; i < b.N; i++ {
path, err := filepath.Abs("../../../external-providers/java-external-provider/examples/customers-tomcat-legacy/")
if err != nil {
return
}
runOSSpecificGrepCommand("Apache License 1.1",
path,
provider.ProviderContext{Template: map[string]engine.ChainTemplate{}})
}
}

0 comments on commit 39f15c8

Please sign in to comment.