-
Notifications
You must be signed in to change notification settings - Fork 206
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into fix/baggage-prefix-on-labels
- Loading branch information
Showing
45 changed files
with
1,356 additions
and
610 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
130 changes: 130 additions & 0 deletions
130
benchmarks/Elastic.Apm.Benchmarks/CgroupMetricsProviderBenchmarks.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
// Licensed to Elasticsearch B.V under one or more agreements. | ||
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License. | ||
// See the LICENSE file in the project root for more information | ||
|
||
using System.Collections.Generic; | ||
using System.IO; | ||
using BenchmarkDotNet.Attributes; | ||
using BenchmarkDotNet.Engines; | ||
using Elastic.Apm.Helpers; | ||
using Elastic.Apm.Metrics.MetricsProvider; | ||
using Elastic.Apm.Tests.Utilities; | ||
using static Elastic.Apm.Metrics.MetricsProvider.CgroupMetricsProvider; | ||
using static Elastic.Apm.Tests.TestHelpers.CgroupFileHelper; | ||
|
||
namespace Elastic.Apm.Benchmarks; | ||
|
||
[MemoryDiagnoser] | ||
public class CgroupMetricsProviderBenchmarks | ||
{ | ||
private CgroupPaths _cgroupPaths; | ||
private CgroupMetricsProvider _cgroupMetricsProvider; | ||
private readonly Consumer _consumer = new(); | ||
|
||
[GlobalSetup] | ||
public void Setup() | ||
{ | ||
_cgroupPaths = CreateDefaultCgroupFiles(CgroupVersion.CgroupV2); | ||
_cgroupMetricsProvider = TestableCgroupMetricsProvider(new NoopLogger(), new List<WildcardMatcher>(), _cgroupPaths.RootPath, true); | ||
} | ||
|
||
[GlobalSetup(Target = nameof(GetSamplesUnlimited))] | ||
public void SetupUnlimited() | ||
{ | ||
_cgroupPaths = CreateDefaultCgroupFiles(CgroupVersion.CgroupV2); | ||
UnlimitedMaxMemoryFiles(_cgroupPaths); | ||
_cgroupMetricsProvider = TestableCgroupMetricsProvider(new NoopLogger(), new List<WildcardMatcher>(), _cgroupPaths.RootPath, true); | ||
} | ||
|
||
private static void UnlimitedMaxMemoryFiles(CgroupPaths paths) | ||
{ | ||
if (paths.CgroupVersion == CgroupVersion.CgroupV1) | ||
{ | ||
using var sr = new StreamWriter(File.Create(Path.Combine(paths.CgroupV1MemoryControllerPath, "memory.limit_in_bytes"))); | ||
sr.WriteAsync($"9223372036854771712\n"); | ||
} | ||
|
||
if (paths.CgroupVersion == CgroupVersion.CgroupV2) | ||
{ | ||
using var sr = new StreamWriter(File.Create(Path.Combine(paths.CgroupV2SlicePath, "memory.max"))); | ||
sr.WriteAsync($"max\n"); | ||
} | ||
} | ||
|
||
[GlobalCleanup] | ||
public void Cleanup() | ||
=> Directory.Delete(_cgroupPaths.RootPath, true); | ||
|
||
[Benchmark] | ||
public void GetSamples() | ||
{ | ||
foreach (var metricSet in _cgroupMetricsProvider.GetSamples()) | ||
{ | ||
metricSet.Samples.Consume(_consumer); | ||
} | ||
} | ||
|
||
// WINDOWS: | ||
//| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|--------:|---------:|---------:|--------:|-------:|----------:|------------:| | ||
//| GetSamplesOriginal | 433.0 us | 8.39 us | 11.20 us | baseline | | 1.9531 | 29.4 KB | | | ||
//| GetSamplesOptimised | 409.9 us | 5.11 us | 4.53 us | -5% | 3.0% | - | 1.47 KB | -95% | | ||
|
||
// WINDOWS: After yield return | ||
//| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|--------:|---------:|---------:|--------:|-------:|----------:|------------:| | ||
//| GetSamplesOriginal | 429.1 us | 8.08 us | 13.93 us | baseline | | 1.9531 | 29.44 KB | | | ||
//| GetSamplesOptimised | 419.7 us | 6.83 us | 6.39 us | -5% | 3.3% | - | 1.46 KB | -95% | | ||
|
||
// WINDOWS: Remove metric | ||
//| Method | Mean | Error | StdDev | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|--------:|--------:|----------:|------------:| | ||
//| GetSamples | 296.9 us | 3.46 us | 3.23 us | 1.05 KB | -96% | | ||
|
||
// LINUX: After yield return | ||
//| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|----------:|----------:|---------:|--------:|-------:|-------:|----------:|------------:| | ||
//| GetSamplesOriginal | 9.643 us | 0.1600 us | 0.1418 us | baseline | | 2.3346 | 0.0610 | 29328 B | | | ||
//| GetSamplesOptimised | 5.525 us | 0.0580 us | 0.0569 us | -43% | 1.6% | 0.0534 | - | 680 B | -98% | | ||
|
||
// LINUX: Remove metric | ||
//| Method | Mean | Error | Ratio | StdDev | Gen0 | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|----------:|---------:|----------:|-------:|----------:| | | ||
//| GetSamples | 4.363 us | 0.0458 us | -55% | 0.0382 us | 0.0381 | 496 B | -98% | | ||
|
||
[Benchmark] | ||
public void GetSamplesUnlimited() | ||
{ | ||
foreach (var metricSet in _cgroupMetricsProvider.GetSamples()) | ||
{ | ||
metricSet.Samples.Consume(_consumer); | ||
} | ||
} | ||
|
||
// WINDOWS: | ||
//| Method | Mean | Error | StdDev | Gen0 | Allocated | | ||
//|-------------------- |---------:|--------:|--------:|-------:|----------:| | ||
//| GetSamplesUnlimited | 467.1 us | 9.28 us | 9.11 us | 0.4883 | 9.5 KB | | ||
|
||
// WINDOWS: Optimised | ||
//| Method | Mean | Error | StdDev | Allocated | | ||
//|-------------------- |---------:|--------:|--------:|----------:| | ||
//| GetSamplesUnlimited | 444.9 us | 8.46 us | 8.69 us | 1.88 KB | | ||
|
||
// WINDOWS: Remove metric | ||
//| Method | Mean | Error | StdDev | Allocated | Alloc Ratio | | ||
//|-------------------- |---------:|--------:|--------:|----------:| | | ||
//| GetSamplesUnlimited | 305.4 us | 5.04 us | 4.71 us | 1.43 KB | -85% | | ||
|
||
// LINUX: Optimised | ||
//| Method | Mean | Error | StdDev | Gen0 | Allocated | | ||
//|-------------------- |---------:|----------:|----------:|-------:|----------:| | ||
//| GetSamplesUnlimited | 7.217 us | 0.1375 us | 0.1350 us | 0.0687 | 864 B | | ||
//** NOTE: This includes some overhead (176 bytes) for building the test path which is not incurred | ||
//in production. This is there equivient to the limited benchmark when this is taken into account. | ||
|
||
// LINUX: Remove metric | ||
//| Method | Mean | Error | StdDev | Gen0 | Allocated | | ||
//|-------------------- |---------:|----------:|----------:|-------:|----------:| | ||
//| GetSamplesUnlimited | 4.908 us | 0.0736 us | 0.0688 us | 0.0534 | 680 B | | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
benchmarks/Elastic.Apm.Benchmarks/FreeAndTotalMemoryProviderBenchmarks.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Licensed to Elasticsearch B.V under one or more agreements. | ||
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License. | ||
// See the LICENSE file in the project root for more information | ||
|
||
using System.Collections.Generic; | ||
using System.IO; | ||
using BenchmarkDotNet.Attributes; | ||
using BenchmarkDotNet.Engines; | ||
using Elastic.Apm.Helpers; | ||
using Elastic.Apm.Metrics.MetricsProvider; | ||
using Elastic.Apm.Tests.Utilities; | ||
using static Elastic.Apm.Tests.TestHelpers.CgroupFileHelper; | ||
|
||
namespace Elastic.Apm.Benchmarks; | ||
|
||
[MemoryDiagnoser] | ||
public class FreeAndTotalMemoryProviderBenchmarks | ||
{ | ||
private CgroupPaths _cgroupPaths; | ||
private FreeAndTotalMemoryProvider _freeAndTotalMemoryProvider; | ||
private readonly Consumer _consumer = new(); | ||
|
||
[GlobalSetup] | ||
public void Setup() | ||
{ | ||
_cgroupPaths = CreateDefaultCgroupFiles(CgroupVersion.CgroupV2); | ||
_freeAndTotalMemoryProvider = FreeAndTotalMemoryProvider | ||
.TestableFreeAndTotalMemoryProvider(new NoopLogger(), new List<WildcardMatcher>(), _cgroupPaths.RootPath, true); | ||
} | ||
|
||
[GlobalCleanup] | ||
public void Cleanup() | ||
=> Directory.Delete(_cgroupPaths.RootPath, true); | ||
|
||
[Benchmark] | ||
public void GetSamples() | ||
{ | ||
foreach (var metricSet in _freeAndTotalMemoryProvider.GetSamples()) | ||
{ | ||
metricSet.Samples.Consume(_consumer); | ||
} | ||
} | ||
|
||
// WINDOWS | ||
//| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio | | ||
//|------------------- |---------:|---------:|---------:|---------:|--------:|-------:|----------:|------------:| | ||
//| GetSamplesOriginal | 600.1 ns | 12.00 ns | 17.22 ns | baseline | | 0.0277 | 352 B | | | ||
//| GetSamples | 553.8 ns | 10.57 ns | 12.98 ns | -8% | 3.2% | 0.0162 | 208 B | -41% | | ||
|
||
// LINUX | ||
//| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio | | ||
//|------------------- |-----------:|---------:|----------:|---------:|--------:|-------:|-------:|----------:|------------:| | ||
//| GetSamplesOriginal | 3,693.2 ns | 73.86 ns | 108.27 ns | baseline | | 0.7324 | 0.0191 | 9216 B | | | ||
//| GetSamples | 438.7 ns | 8.57 ns | 8.41 ns | -88% | 3.1% | 0.0215 | - | 272 B | -97% | | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
benchmarks/Elastic.Apm.Profiling/Elastic.Apm.Profiling.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<OutputType>Exe</OutputType> | ||
<TargetFramework>net7.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
<IsTestProject>false</IsTestProject> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="JetBrains.Profiler.Api" Version="1.4.0" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\..\src\Elastic.Apm\Elastic.Apm.csproj" /> | ||
<ProjectReference Include="..\..\test\Elastic.Apm.Tests\Elastic.Apm.Tests.csproj" /> | ||
<ProjectReference Include="..\Elastic.Apm.Benchmarks\Elastic.Apm.Benchmarks.csproj" /> | ||
</ItemGroup> | ||
|
||
</Project> |
Oops, something went wrong.