Skip to content

Commit

Permalink
Faster init for FixedSizeExemplarReservoir buffers.
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeBlanch committed Feb 16, 2024
1 parent 65e87eb commit aa0b3b5
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions src/OpenTelemetry/Metrics/Exemplar/FixedSizeExemplarReservoir.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
// SPDX-License-Identifier: Apache-2.0

using System.Diagnostics;
#if NET6_0_OR_GREATER
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
#endif
using OpenTelemetry.Internal;

namespace OpenTelemetry.Metrics;
Expand Down Expand Up @@ -59,13 +63,27 @@ internal sealed override void Initialize(AggregatorStore aggregatorStore)
{
var keyFilter = aggregatorStore.TagKeysInteresting;

for (int a = 0, b = 0;
a < this.bufferA.Length && b < this.bufferB.Length;
a++, b++)
#if NET6_0_OR_GREATER
var length = this.bufferA.Length;
ref var a = ref MemoryMarshal.GetArrayDataReference(this.bufferA);
ref var b = ref MemoryMarshal.GetArrayDataReference(this.bufferB);
do
{
this.bufferA[a].KeyFilter = keyFilter;
this.bufferB[b].KeyFilter = keyFilter;
a.KeyFilter = keyFilter;
b.KeyFilter = keyFilter;
a = ref Unsafe.Add(ref a, 1);
b = ref Unsafe.Add(ref b, 1);
}
while (--length > 0);
#else
for (int i = 0;
i < this.bufferA.Length && i < this.bufferB.Length;
i++)
{
this.bufferA[i].KeyFilter = keyFilter;
this.bufferB[i].KeyFilter = keyFilter;
}
#endif

base.Initialize(aggregatorStore);
}
Expand Down

0 comments on commit aa0b3b5

Please sign in to comment.