[OneCollector] Add benchmark project #1088
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes
Benchmarks
Analysis
The chart above looks intimidating so I'll try to break it down 😄
TL;DR: The perf is where I would expect it to be and it is really good.
Here is the key bit:
The number of records in a batch does NOT increase the amount of memory allocated. That means converting a
LogRecord
to JSON we are not allocating any strings, boxing any value types, or anything. That is great! The 857 bytes are mostlyHttpClient
artifacts. A given export needs to allocate a bunch of stuff for theHttpClient
API.HttpRequestMessage
,HttpResponseMessage
, stuff for headers. We also have some allocations forSuppressInstrumentationScope
(should improve with open-telemetry/opentelemetry-dotnet#4304). These allocations don't concern me much. Exports trigger when either a batch is full or a time limit is reached. It is an occasional thing and a few allocations shouldn't add much pressure to the GC for the process. What we don't want to see is allocations growing based on the number of items.When compression is used (enabled by default) it costs more CPU time and more memory is allocated but we have the same flat amount regardless of the number of records.