[C# 벤치마크]BenchMarkDotNet 사용법 - RunStrategy 선택

참조


소개

  • 벤치마크를 실행하는 경우 항상 작업을 사용합니다.
  • 각 작업에는 서로 다른 벤치마크 모드들이 있고, 각 모드를 전환할 수도 있습니다.
  • 기본 RunStrategy는 처리랼이며 대부분의 경우 잘 작동합니다.


Throughput(처리량)

  • Throughput(처리량)은 기본 RunStrategy이며 벤치마킹에 완벽하게 작동합니다.
  • 파일럿 반복 세트 기반으로 기본 반복의 작업 양을 자동으로 선택합니다.
  • 반복 횟수도 정확도 작업 설정에 따라 자동으로 선택됩니다.
[SimpleJob(launchCount: 3, warmupCount: 10, targetCount: 30)]
public class MyBenchmarkClass


IntroColdStart 예제 코드

  • ColdStart를 측정하려면 ColdStart 전략을 선택하면 됩니다.
[SimpleJob(RunStrategy.ColdStart, launchCount:50)]
public class MyBenchmarkClass
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Running;
using System.Collections.Generic;

namespace BenchMarkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<IntroColdStart>();
        }
    }

    [SimpleJob(RunStrategy.ColdStart, targetCount:1)]
    [MinColumn, MaxColumn, MeanColumn, MedianColumn]
    public class IntroColdStart
    {
        public List<int> list = new();
        public void AddList()
        {
            int count = 10000000;
            for(int index = 0; index < count; index++)
            {
                list.Add(index);
            }
        }

        [Benchmark]
        public int ForTest()
        {
            int sum = 0;

            AddList();

            if (list.Count < 0 || list == null)
                return 0;

            for(int index = 0; index < list.Count; index++)
            {
                sum += list[index];
            }

            return sum;
        }

        [Benchmark]
        public int ForeachTest()
        {
            int sum = 0;

            AddList();

            if (list.Count < 0 || list == null)
                return 0;

            foreach (var item in list)
            {
                sum += item;
            }

            return sum;
        }
    }
}


실행 결과

  • Attribute에 설정한 값들이 결과값으로 나온 것을 확인할 수 있습니다.



IntroMonitoring 예제 코드

  • 벤치마크 시간이 100ms 이상 걸리는 경우에는 모니터링 전약을 사용할 수도 있습니다.
  • 모니터링 방법은 측정 셋을 수집하고 통계를 얻는데 유용합니다.
[SimpleJob(RunStrategy.Monitoring, launchCount: 10, warmupCount: 0, targetCount: 100)]
public class MyBenchmarkClass
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Running;
using System;
using System.Collections.Generic;
using System.Threading;

namespace BenchMarkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<IntroColdStart>();
        }
    }

    [SimpleJob(RunStrategy.Monitoring, targetCount:5, id:"MonitoringJob")]
    [MinColumn, Q1Column, Q3Column, MaxColumn]
    public class IntroColdStart
    {
        public List<int> list = new();
        public void AddList()
        {
            int count = 10000000;
            for(int index = 0; index < count; index++)
            {
                list.Add(index);
            }
        }

        [Benchmark]
        public int ForTest()
        {
            int sum = 0;

            AddList();

            if (list.Count < 0 || list == null)
                return 0;

            for(int index = 0; index < list.Count; index++)
            {
                sum += list[index];
            }

            return sum;
        }

        [Benchmark]
        public int ForeachTest()
        {
            int sum = 0;

            AddList();

            if (list.Count < 0 || list == null)
                return 0;

            foreach (var item in list)
            {
                sum += item;
            }

            return sum;
        }
    }
}


실행 결과

  • 모니터링 Attribute를 설정하게 되면 다음과 같이 결과들이 나열돼서 나온것을 확인할 수 있습니다.
// BeforeActualRun
WorkloadActual   1: 1 op, 137332500.00 ns, 137.3325 ms/op
WorkloadActual   2: 1 op, 120452200.00 ns, 120.4522 ms/op
WorkloadActual   3: 1 op, 216106300.00 ns, 216.1063 ms/op
WorkloadActual   4: 1 op, 165665500.00 ns, 165.6655 ms/op
WorkloadActual   5: 1 op, 202395900.00 ns, 202.3959 ms/op

// AfterActualRun
WorkloadResult   1: 1 op, 137332500.00 ns, 137.3325 ms/op
WorkloadResult   2: 1 op, 120452200.00 ns, 120.4522 ms/op
WorkloadResult   3: 1 op, 216106300.00 ns, 216.1063 ms/op
WorkloadResult   4: 1 op, 165665500.00 ns, 165.6655 ms/op
WorkloadResult   5: 1 op, 202395900.00 ns, 202.3959 ms/op

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY