commit fc09efff84ec8a66837906bbe99515d5266b649b Author: Vincenzo Palazzo Date: Thu Mar 23 19:16:00 2023 +0100 init the benchmarks Signed-off-by: Vincenzo Palazzo diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b7112da --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +CC=go +FMT=gofmt +NAME=cln-rpc-bench +BASE_DIR=/script +OS=linux +ARCH=386 +ARM= +GORPC_COMMIT=4471a927bb9937a45a9ece876c3e00f093727fc3 + +default: fmt lint + $(CC) build -o $(NAME) cmd/main.go + +fmt: + $(CC) fmt ./... + +lint: + golangci-lint run + +check: + $(CC) run cmd/main.go + +check-dev: + richgo test ./... -v + +build: + env GOOS=$(OS) GOARCH=$(ARCH) GOARM=$(ARM) $(CC) build -o $(NAME)-$(OS)-$(ARCH) cmd/main.go + +dep: + $(CC) get -u all + +force: + $(CC) mod vendor diff --git a/cln-rpc-bench b/cln-rpc-bench new file mode 100755 index 0000000..c5623bb Binary files /dev/null and b/cln-rpc-bench differ diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..4452223 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,84 @@ +// core lightning RPC benchmarks +package main + +import ( + "fmt" + "os" + "testing" + + "github.com/charmbracelet/log" + + jsonv2 "github.com/LNOpenMetrics/go-lnmetrics.reporter/pkg/json" + cln "github.com/vincenzopalazzo/cln4go/client" +) + +// runBencmarks - entry point of the benchmarks! +func runBenchmarks(benchs map[string]func(*testing.B)) { + for name, bench := range benchs { + res := testing.Benchmark(bench) + log.Infof("----------------- %s -----------------", name) + log.Infof("Memory allocations : %d", res.MemAllocs) + log.Infof("Number of bytes allocated: %d", res.Bytes) + log.Infof("Number of run: %d", res.N) + log.Infof("Time taken: %s", res.T) + } +} + +var rpc *cln.UnixRPC +var target []string + +func init() { + path := os.Getenv("CLN_UNIX_SOCKET") + if path == "" { + err := fmt.Errorf("Unix path not exported with the CLN_UNIX_SOCKET env variable") + panic(err) + } + + rpc, _ = cln.NewUnix(path) + rpc.SetEncoder(&jsonv2.FastJSON{}) + target = []string{ + "02049b60c296ffead3e7c8b124c5730153403a8314c1116c2d1b43cf9ac0de2d9d", + "021e9677478fef6e0ff9a64a83f996c7eb31524dc4b7f8b99543224fad3c557885", + } +} + +func main() { + bench := map[string]func(*testing.B){ + "vanilla": plainListNodes, + "sql plugin": sqlListNodes, + "paginator": paginatorListNodes, + } + runBenchmarks(bench) +} + +// plain call to list nodes +func plainListNodes(b *testing.B) { + for _, id := range target { + _, err := rpc.Call("listnodes", map[string]any{"id": id}) + if err != nil { + log.Error("%s", err) + } + } +} + +func sqlListNodes(b *testing.B) { + query := fmt.Sprintf("SELECT * FROM nodes WHERE nodeid = '%s' OR nodeid = '%s'", target[0], target[1]) + listnodes, err := rpc.Call("sql", map[string]any{ + "query": query, + }) + if err != nil { + log.Error("%s", err) + } + log.Debug(listnodes) +} + +func paginatorListNodes(b *testing.B) { + _, err := rpc.Call("listnodes", map[string]any{ + "paginator": map[string]any{ + "batch": target, + }, + }) + if err != nil { + log.Error("%s", err) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..addce93 --- /dev/null +++ b/go.mod @@ -0,0 +1,25 @@ +module git.hedwing.dev/vincenzopalazzo/cln-rpc-benchmarks + +go 1.20 + +require ( + github.com/LNOpenMetrics/go-lnmetrics.reporter v0.0.6-rc2.0.20230218083049-db6e98c64f5e + github.com/charmbracelet/log v0.2.1 + github.com/vincenzopalazzo/cln4go/client v0.0.0-20230131113223-c518122c3f70 +) + +require ( + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/charmbracelet/lipgloss v0.7.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.1 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/vincenzopalazzo/cln4go/comm v0.0.0-20230131113223-c518122c3f70 // indirect + github.com/vincenzopalazzo/cpstl/go v0.0.0-20221204131531-d0659db4dd2a // indirect + golang.org/x/sys v0.6.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..51a01ef --- /dev/null +++ b/go.sum @@ -0,0 +1,35 @@ +github.com/LNOpenMetrics/go-lnmetrics.reporter v0.0.6-rc2.0.20230218083049-db6e98c64f5e h1:5DqUItuc8VgGlBjGKKoL2ZBc+Kh2Zp8haQZDm1v8OTw= +github.com/LNOpenMetrics/go-lnmetrics.reporter v0.0.6-rc2.0.20230218083049-db6e98c64f5e/go.mod h1:tSoMLZoC3wy68qomKZz8yGujtpB2kyEhdnEE7/wkGVw= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= +github.com/charmbracelet/log v0.2.1 h1:1z7jpkk4yKyjwlmKmKMM5qnEDSpV32E7XtWhuv0mTZE= +github.com/charmbracelet/log v0.2.1/go.mod h1:GwFfjewhcVDWLrpAbY5A0Hin9YOlEn40eWT4PNaxFT4= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs= +github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/vincenzopalazzo/cln4go/client v0.0.0-20230131113223-c518122c3f70 h1:7NJ3bck59/rXg/MBfOth4R5hqabYzsoimXl/T64H0/A= +github.com/vincenzopalazzo/cln4go/client v0.0.0-20230131113223-c518122c3f70/go.mod h1:7C64iH2eVEE7WkIMQa8fmtQmFNzprDt6rIZOxG57Thg= +github.com/vincenzopalazzo/cln4go/comm v0.0.0-20230131113223-c518122c3f70 h1:kSqns8J4CJnGq9PrXRr//c25cTkL+8J+GekhcRYxGyg= +github.com/vincenzopalazzo/cln4go/comm v0.0.0-20230131113223-c518122c3f70/go.mod h1:zyOWcz5aSHCsLuZLaVBTjbRnxlf5Ac+Rfhu5Ciuyy2c= +github.com/vincenzopalazzo/cpstl/go v0.0.0-20221204131531-d0659db4dd2a h1:eh427yzx/JbkOuLjSS2bPop/14HMq7eYGWC1bp29mzU= +github.com/vincenzopalazzo/cpstl/go v0.0.0-20221204131531-d0659db4dd2a/go.mod h1:VNETfpfs0pZQKEg9qwSm7M1gfVrliFFzxKVVppNaxbM= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=