Skip to content

chore: Batch writer benchmarks #1552

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

Merged
merged 12 commits into from
Mar 6, 2024
Merged

chore: Batch writer benchmarks #1552

merged 12 commits into from
Mar 6, 2024

Conversation

disq
Copy link
Member

@disq disq commented Mar 5, 2024

https://docs.google.com/spreadsheets/d/1NxKyOtvckW7yCbwLTL4VOu91XPNyd-Q0dYDMxjT-yH8/edit?usp=sharing

Current state (1000 * N)

GoLand2023.2/tmp/GoLand/___gobench_writers_test_go.test -test.v -test.paniconexit0 -test.bench ^\QBenchmarkWriterMemory\E$ -test.run ^$
goos: darwin
goarch: arm64
pkg: github.com/cloudquery/plugin-sdk/v4/writers
BenchmarkWriterMemory
BenchmarkWriterMemory/BatchWriter_batch10k_bytes100M
BenchmarkWriterMemory/BatchWriter_batch10k_bytes100M-10         	     465	   2556097 ns/op	        35.23 bytes/op
BenchmarkWriterMemory/BatchWriter_defaults
BenchmarkWriterMemory/BatchWriter_defaults-10                   	     469	   2595365 ns/op	        25.22 bytes/op
BenchmarkWriterMemory/BatchWriter_wide_batch10k_bytes100M
BenchmarkWriterMemory/BatchWriter_wide_batch10k_bytes100M-10    	       8	 129711115 ns/op	    178917 bytes/op
BenchmarkWriterMemory/BatchWriter_wide_defaults
BenchmarkWriterMemory/BatchWriter_wide_defaults-10              	       8	 151473391 ns/op	     48066 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M-10    	     672	   1719326 ns/op	      1394 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_defaults
BenchmarkWriterMemory/MixedBatchWriter_defaults-10              	     585	   1752100 ns/op	      1394 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M-10         	       8	 142323412 ns/op	    185406 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults-10                   	       8	 127524651 ns/op	     96165 bytes/op
BenchmarkWriterMemory/StreamingBatchWriter_bytes100M
BenchmarkWriterMemory/StreamingBatchWriter_bytes100M-10                   	     400	   2812296 ns/op	      1393 bytes/op
BenchmarkWriterMemory/StreamingBatchWriter_defaults
BenchmarkWriterMemory/StreamingBatchWriter_defaults-10                    	     394	   2803509 ns/op	      1393 bytes/op
BenchmarkWriterMemory/StreamingBatchWriter_wide_bytes100M
BenchmarkWriterMemory/StreamingBatchWriter_wide_bytes100M-10              	       9	 120658421 ns/op	     75653 bytes/op
BenchmarkWriterMemory/StreamingBatchWriter_wide_defaults
BenchmarkWriterMemory/StreamingBatchWriter_wide_defaults-10               	       9	 117394778 ns/op	     78724 bytes/op
PASS

Process finished with the exit code 0

Copy link

github-actions bot commented Mar 5, 2024

⏱️ Benchmark results

  • Glob-8 ns/op: 92.3
  • WriterMemory_BatchWriter_batch10k_bytes100M-8 bytes/op: 1,017
  • WriterMemory_BatchWriter_batch10k_bytes100M-8 ns/op: 2,800
  • WriterMemory_BatchWriter_defaults-8 bytes/op: 1,212
  • WriterMemory_BatchWriter_defaults-8 ns/op: 2,694
  • WriterMemory_BatchWriter_wide_batch10k_bytes100M-8 bytes/op: 197,164
  • WriterMemory_BatchWriter_wide_batch10k_bytes100M-8 ns/op: 226,966
  • BenchmarkWriterMemory_BatchWriter_wide_defaults-8_bytes_per_op: 1.845
  • WriterMemory_BatchWriter_wide_defaults-8 ns/op: 173,995
  • WriterMemory_MixedBatchWriter_batch10k_bytes100M-8 bytes/op: 1,426
  • WriterMemory_MixedBatchWriter_batch10k_bytes100M-8 ns/op: 2,617
  • WriterMemory_MixedBatchWriter_defaults-8 bytes/op: 1,426
  • WriterMemory_MixedBatchWriter_defaults-8 ns/op: 2,515
  • WriterMemory_MixedBatchWriter_wide_batch10k_bytes100M-8 bytes/op: 190,174
  • WriterMemory_MixedBatchWriter_wide_batch10k_bytes100M-8 ns/op: 221,517
  • WriterMemory_MixedBatchWriter_wide_defaults-8 bytes/op: 12,350
  • WriterMemory_MixedBatchWriter_wide_defaults-8 ns/op: 173,206
  • WriterMemory_StreamingBatchWriter_bytes100M-8 bytes/op: 1,394
  • WriterMemory_StreamingBatchWriter_bytes100M-8 ns/op: 3,139
  • WriterMemory_StreamingBatchWriter_defaults-8 bytes/op: 1,393
  • WriterMemory_StreamingBatchWriter_defaults-8 ns/op: 3,036
  • WriterMemory_StreamingBatchWriter_wide_bytes100M-8 bytes/op: 8,229
  • WriterMemory_StreamingBatchWriter_wide_bytes100M-8 ns/op: 154,501
  • WriterMemory_StreamingBatchWriter_wide_defaults-8 bytes/op: 10,784
  • WriterMemory_StreamingBatchWriter_wide_defaults-8 ns/op: 141,536

}
}

func writerMatrix[T writers.Writer, C any, O ~func(T)](prefix string, constructor func(C, ...O) (T, error), client C, recordMaker func() func() arrow.Record, optsMatrix map[string][]O) []bCase {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I have a problem...

runtime.ReadMemStats(&mEnd)

allocatedBytes := mEnd.Alloc - mStart.Alloc
b.ReportMetric(float64(allocatedBytes)/float64(newN), "bytes/op")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't Go measure memory usage already if we provide -benchmem? What am I missing?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

benchmem will report allocs/op (probably the same number as ours but I didn't compare them) and won't report until invoked with -benchmem or toggled from within the test. We also multiply the N to get more stable benchmarks (and hit writer batching spots).

Copy link
Member

@hermanschaaf hermanschaaf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bit complicated logic but since it's a benchmark it's probably okay as long as it helps you find memory-related improvements 😅

kodiakhq bot pushed a commit that referenced this pull request Mar 5, 2024
Helps with memory.

Benched with #1552, old:

```
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M-10    	     826	   1445595 ns/op	      1393 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_defaults
BenchmarkWriterMemory/MixedBatchWriter_defaults-10              	     670	   1504799 ns/op	      1393 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M-10         	       8	 128966609 ns/op	    172785 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults-10                   	       9	 118630315 ns/op	     60355 bytes/op
```

new:
```
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_batch10k_bytes100M-10    	     690	   1476479 ns/op	      1401 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_defaults
BenchmarkWriterMemory/MixedBatchWriter_defaults-10              	     687	   1539707 ns/op	      1401 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M
BenchmarkWriterMemory/MixedBatchWriter_wide_batch10k_bytes100M-10         	       8	 129154755 ns/op	    173592 bytes/op
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults
BenchmarkWriterMemory/MixedBatchWriter_wide_defaults-10                   	       9	 111416773 ns/op	     44588 bytes/op
```
Comment on lines +138 to +139
for i := 0; i < numWideCols; i++ {
bldr.Field(i + 1).(*array.Int64Builder).Append(randVals[i])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for i := 0; i < numWideCols; i++ {
bldr.Field(i + 1).(*array.Int64Builder).Append(randVals[i])
for i := 1; i <= numWideCols; i++ {
bldr.Field(i).(*array.Int64Builder).Append(randVals[i])

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you'd need to do randVals[i-1], adds compexity and potential copy/paste errors, just to avoid an + 1

@disq disq added the automerge label Mar 6, 2024
@kodiakhq kodiakhq bot merged commit 3050443 into cloudquery:main Mar 6, 2024
7 checks passed
@disq disq deleted the chore/batchwriter-benchmarks branch March 6, 2024 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants