Skip to content

Commit 6f4e460

Browse files
committed
Benchmarks and optimizations
1 parent d156151 commit 6f4e460

File tree

3 files changed

+70
-15
lines changed

3 files changed

+70
-15
lines changed

exporter/exporterhelper/logs.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ var (
2626
)
2727

2828
type logsRequest struct {
29-
ld plog.Logs
30-
pusher consumer.ConsumeLogsFunc
29+
ld plog.Logs
30+
pusher consumer.ConsumeLogsFunc
31+
byteSize int
3132
}
3233

3334
func newLogsRequest(ld plog.Logs, pusher consumer.ConsumeLogsFunc) Request {

exporter/exporterhelper/logs_batch.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,22 @@ func (req *logsRequest) mergeSplitBasedOnByteSize(cfg exporterbatcher.MaxSizeCon
4646
continue
4747
}
4848

49-
ByteSize := srcReq.ld.ByteSize()
49+
ByteSize := srcReq.byteSize
50+
if ByteSize == 0 {
51+
ByteSize = srcReq.ld.ByteSize()
52+
}
53+
// if ByteSize > capacityLeft && capacityLeft < cfg.MaxSizeBytes {
54+
// res = append(res, destReq)
55+
// destReq = nil
56+
// capacityLeft = cfg.MaxSizeBytes
57+
// }
58+
5059
if ByteSize <= capacityLeft {
5160
if destReq == nil {
5261
destReq = srcReq
5362
} else {
5463
srcReq.ld.ResourceLogs().MoveAndAppendTo(destReq.ld.ResourceLogs())
64+
destReq.byteSize += ByteSize
5565
}
5666
capacityLeft -= ByteSize
5767
continue

exporter/exporterhelper/logs_batch_test.go

+56-12
Original file line numberDiff line numberDiff line change
@@ -252,42 +252,86 @@ func TestMergeSplitLogsBasedOnByteSize(t *testing.T) {
252252
}
253253
}
254254

255-
func BenchmarkSplittingBasedOnItemCountManyLogs(b *testing.B) {
256-
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10}
255+
func BenchmarkSplittingBasedOnItemCountManySmallLogs(b *testing.B) {
256+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10000}
257257
for i := 0; i < b.N; i++ {
258-
lr1 := &logsRequest{ld: testdata.GenerateLogs(9)}
258+
lr1 := &logsRequest{ld: testdata.GenerateLogs(10)}
259259
for j := 0; j < 1000; j++ {
260-
lr2 := &logsRequest{ld: testdata.GenerateLogs(9)}
260+
lr2 := &logsRequest{ld: testdata.GenerateLogs(10)}
261261
lr1.MergeSplit(context.Background(), cfg, lr2)
262262
}
263263
}
264264
}
265265

266-
func BenchmarkSplittingBasedOnByteSizeManyLogs(b *testing.B) {
267-
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 1010}
266+
func BenchmarkSplittingBasedOnByteSizeManySmallLogs(b *testing.B) {
267+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 1010000}
268268
for i := 0; i < b.N; i++ {
269-
lr1 := &logsRequest{ld: testdata.GenerateLogs(9)}
269+
lr1 := &logsRequest{ld: testdata.GenerateLogs(10)}
270270
for j := 0; j < 1000; j++ {
271-
lr2 := &logsRequest{ld: testdata.GenerateLogs(9)}
271+
lr2 := &logsRequest{ld: testdata.GenerateLogs(10)}
272+
lr1.MergeSplit(context.Background(), cfg, lr2)
273+
}
274+
}
275+
}
276+
277+
func BenchmarkSplittingBasedOnItemCountManyLogsSlightlyAboveLimit(b *testing.B) {
278+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10000}
279+
for i := 0; i < b.N; i++ {
280+
lr1 := &logsRequest{ld: testdata.GenerateLogs(10001)}
281+
for j := 0; j < 10; j++ {
282+
lr2 := &logsRequest{ld: testdata.GenerateLogs(10001)}
283+
lr1.MergeSplit(context.Background(), cfg, lr2)
284+
}
285+
}
286+
}
287+
288+
func BenchmarkSplittingBasedOnByteSizeManyLogsSlightlyAboveLimit(b *testing.B) {
289+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 960052} // 960052 corresponds to 10000 generated logs
290+
for i := 0; i < b.N; i++ {
291+
lr1 := &logsRequest{ld: testdata.GenerateLogs(10001)}
292+
for j := 0; j < 10; j++ {
293+
lr2 := &logsRequest{ld: testdata.GenerateLogs(10001)}
294+
lr1.MergeSplit(context.Background(), cfg, lr2)
295+
}
296+
}
297+
}
298+
299+
func BenchmarkSplittingBasedOnItemCountManyLogsSlightlyBelowLimit(b *testing.B) {
300+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10000}
301+
for i := 0; i < b.N; i++ {
302+
lr1 := &logsRequest{ld: testdata.GenerateLogs(9999)}
303+
for j := 0; j < 10; j++ {
304+
lr2 := &logsRequest{ld: testdata.GenerateLogs(9999)}
305+
lr1.MergeSplit(context.Background(), cfg, lr2)
306+
}
307+
}
308+
}
309+
310+
func BenchmarkSplittingBasedOnByteSizeManyLogsSlightlyBelowLimit(b *testing.B) {
311+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 960052} // 960052 corresponds to 10000 generated logs
312+
for i := 0; i < b.N; i++ {
313+
lr1 := &logsRequest{ld: testdata.GenerateLogs(9999)}
314+
for j := 0; j < 10; j++ {
315+
lr2 := &logsRequest{ld: testdata.GenerateLogs(9999)}
272316
lr1.MergeSplit(context.Background(), cfg, lr2)
273317
}
274318
}
275319
}
276320

277321
func BenchmarkSplittingBasedOnItemCountHugeLog(b *testing.B) {
278-
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10}
322+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeItems: 10000}
279323
for i := 0; i < b.N; i++ {
280324
lr1 := &logsRequest{ld: testdata.GenerateLogs(1)}
281-
lr2 := &logsRequest{ld: testdata.GenerateLogs(1000)}
325+
lr2 := &logsRequest{ld: testdata.GenerateLogs(100000)} // l2 is of size 9.600054 MB
282326
lr1.MergeSplit(context.Background(), cfg, lr2)
283327
}
284328
}
285329

286330
func BenchmarkSplittingBasedOnByteSizeHugeLog(b *testing.B) {
287-
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 1010}
331+
cfg := exporterbatcher.MaxSizeConfig{MaxSizeBytes: 970000}
288332
for i := 0; i < b.N; i++ {
289333
lr1 := &logsRequest{ld: testdata.GenerateLogs(1)}
290-
lr2 := &logsRequest{ld: testdata.GenerateLogs(1000)}
334+
lr2 := &logsRequest{ld: testdata.GenerateLogs(100000)}
291335
lr1.MergeSplit(context.Background(), cfg, lr2)
292336
}
293337
}

0 commit comments

Comments
 (0)