임계값 & 알림


Thresholds는 Bencher로 성능 퇴보를 포착하는 방법입니다. Threshold는 고유한 분기, 테스트베드, 및 측정치의 조합에 할당됩니다. Threshold는 특정 테스트를 사용하여 성능 퇴보를 감지합니다. 테스트와 그 매개변수의 조합을 모델이라고 합니다. 모델에는 하한 경계, 상한 경계 또는 둘 다를 지정해야 합니다.

  • 하한 경계
    • Throughput Measure와 같이 작은 값이 성능 퇴보를 나타낼 경우에는 하한 경계를 사용합니다.
  • 상한 경계
    • Latency Measure와 같이 큰 값이 성능 퇴보를 나타낼 경우에는 상한 경계를 사용합니다.

각 경계는 경계 제한을 계산하는 데 사용됩니다. 그런 다음 모든 새로운 메트릭이 각 경계 제한과 비교됩니다. 새로운 메트릭이 하한 경계 제한 아래나 상한 경계 제한 위에 있을 때 경고가 생성됩니다.

Continuous Benchmarking에서는 즉 CI를 사용하여 벤치마킹할 때, Thresholds를 만들어야 합니다. bencher run CLI 서브 커맨드를 사용할 때 --branch 옵션을 통해 분기를, --testbed 옵션을 통해 테스트베드를 이미 지정하므로, 지정해야 할 다른 차원은 --threshold-measure 옵션을 사용하여 측정치를 지정하는 것입니다. 그런 다음 해당 측정치에 사용할 테스트를 지정하려면 --threshold-test 옵션을 사용합니다. --threshold-min-sample-size, --threshold-max-sample-size--threshold-window 옵션을 사용하면 테스트에서 사용될 데이터를 제어할 수 있습니다. 마지막으로 --threshold-lower-boundary--threshold-upper-boundary 옵션을 사용하여 하한 경계와 상한 경계를 설정할 수 있습니다. 지정되지 않은 모든 모델을 제거하려면 --thresholds-reset 플래그를 사용할 수 있습니다.

  • Threshold가 존재하지 않으면 자동으로 생성됩니다.
  • Threshold가 존재하고 지정된 모델이 동일할 경우, 모델은 무시됩니다.
  • Threshold가 존재하고 지정된 모델이 다를 경우, Threshold에 대해 새로운 모델이 생성됩니다.
  • Threshold가 존재하고 그것이 리셋될 경우, 현재 모델이 Threshold에서 제거됩니다.

예를 들어, Student’s t-test 테스트를 사용하여 Latency Measure에만 Threshold를 사용하고 최대 샘플 크기를 64로 설정하고 상한 경계를 0.99로 설정하려면 다음과 같이 작성할 수 있습니다:

Terminal window
bencher run \
--project save-walter-white-1234abcd \
--branch main \
--testbed localhost \
--threshold-measure latency \
--threshold-test t_test \
--threshold-max-sample-size 64 \
--threshold-upper-boundary 0.99 \
--thresholds-reset \
--err \
--adapter json \
bencher mock

🐰 기능 분기에서 작업할 때는 기본 시작점 분기에서 기존의 Thresholds를 복사하고 싶을 수 있습니다. 이는 --start-point-clone-thresholds 플래그를 사용하여 가능합니다. --thresholds-reset 플래그는 명시적으로 지정되지 않은 모든 복사된 Thresholds를 여전히 제거합니다.

여러 임계값

동일한 bencher run 호출로 여러 임계값을 생성할 수 있습니다. 여러 임계값을 지정할 때에는 각 임계값에 대해 동일한 옵션을 사용해야 합니다. 특정 임계값에 대한 옵션을 무시하려면 언더스코어(_)를 사용하세요.

예를 들어, 두 개의 임계값만 사용하고 싶다면, 하나는 지연 시간(measure)에 대한 것이고 하나는 처리량(measure)에 대한 것이라면, 지연 시간(measure)에는 상위 경계를 설정하고 처리량(measure)에는 하위 경계를 설정하고 싶을 것입니다. 따라서 지연 시간(measure)에는 --threshold-lower-boundary _을 사용하고, 처리량(measure)에는 --threshold-upper-boundary _을 사용합니다. 이렇게 작성할 수 있습니다:

Terminal window
bencher run \
--project save-walter-white-1234abcd \
--branch main \
--testbed localhost \
--threshold-measure latency \
--threshold-test t_test \
--threshold-max-sample-size 64 \
--threshold-lower-boundary _ \
--threshold-upper-boundary 0.99 \
--threshold-measure throughput \
--threshold-test t_test \
--threshold-max-sample-size 64 \
--threshold-lower-boundary 0.99 \
--threshold-upper-boundary _ \
--thresholds-reset \
--err \
--adapter json \
bencher mock --measure latency --measure throughput

--threshold-measure <MEASURE>


지정된 측정 이름, 슬러그, 또는 UUID를 임계치로 사용하십시오. 지정된 값이 이름이나 슬러그일 때 아직 측정이 존재하지 않는다면, 자동으로 생성됩니다. 하지만, 지정된 값이 UUID일 경우에는 이미 존재해야 합니다.

예를 들어, Latency 측정에 대한 임계치를 사용하려면, --threshold-measure latency라고 작성할 수 있습니다.

--threshold-test <TEST>


지정된 테스트를 사용하여 성능 저하를 감지합니다.

사용할 수 있는 여러 가지 테스트가 있습니다:

예를 들어, 학생의 t-테스트와 함께 임계값을 사용하려면, --threshold-test t_test라고 쓸 수 있습니다.

퍼센트

퍼센트 테스트(percentage)는 가장 간단한 통계 테스트입니다. 새로운 메트릭이 평균의 특정 퍼센트 아래(하한 경계) 또는 평균의 특정 퍼센트 위(상한 경계)인 경우 경고가 생성됩니다. 하한 경계, 상한 경계 또는 둘 다 설정해야 합니다. 퍼센트 테스트는 메트릭 값이 알려진 적절한 범위 내에 있어야 할 때 가장 효과적입니다.

  • 퍼센트 하한 경계

    • 퍼센트 테스트 하한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예: 10%0.10 사용). 더 작은 값이 성능 저하를 나타낼 때 사용합니다.
    • 예를 들어, 하한 경계를 0.10으로 설정한 퍼센트 테스트가 있고, 과거 메트릭의 평균이 100이라면 하한 경계 한계는 90이 됩니다. 90보다 작은 값이 측정되면 경고가 생성됩니다.
  • 퍼센트 상한 경계

    • 퍼센트 테스트 상한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예: 10%0.10 사용). 더 큰 값이 성능 저하를 나타낼 때 사용합니다.
    • 예를 들어, 상한 경계를 0.10으로 설정한 퍼센트 테스트가 있고, 과거 메트릭의 평균이 100이라면 상한 경계 한계는 110이 됩니다. 110보다 큰 값이 측정되면 경고가 생성됩니다.

z-점수

z-점수 테스트 (z_score)는 새로운 메트릭이 역사적 메트릭의 평균에서 표준 편차 (σ) 만큼 얼마나 떨어져 있는지를 z-점수를 사용하여 측정합니다.

z-점수 테스트는 다음의 경우에 최적입니다:

  • 벤치마크 실행 간 극단적인 차이가 없을 때
  • 벤치마크 실행이 서로 완전히 독립적일 때
  • 단일 벤치마크 실행의 반복 횟수가 역사적 메트릭의 10% 미만일 때
  • 최소 30개의 역사적 메트릭이 있을 때 (최소 샘플 크기 >= 30)

z-점수 테스트의 경우, 표준 편차는 소수 누적 백분율로 표현됩니다. 새로운 메트릭이 특정 왼쪽 누적 백분율(하한 경계) 이하이거나 특정 오른쪽 누적 백분율(상한 경계)을 초과할 때 경고가 생성됩니다. 하한 경계, 상한 경계, 또는 둘 다 설정되어야 합니다.

  • z-점수 하한 경계

    • z-점수 테스트의 하한 경계는 0.51.0 사이의 모든 양의 소수가 될 수 있습니다. 0.5는 평균을 나타내며 1.0은 가능한 모든 왼쪽 값(-∞)을 나타냅니다. 더 작은 값이 성능 저하를 나타낼 때 사용됩니다.
    • 예를 들어, z-점수 테스트를 0.977의 하한 경계와 함께 사용하고 역사적 메트릭이 평균 100과 표준 편차 10을 가지고 있다면, 하한 경계 한계는 80.05가 될 것이고 80.05보다 작은 값은 경고를 생성할 것입니다.
  • z-점수 상한 경계

    • z-점수 테스트의 상한 경계는 0.51.0 사이의 모든 양의 소수가 될 수 있습니다. 0.5는 평균을 나타내며 1.0은 가능한 모든 오른쪽 값(∞)을 나타냅니다. 더 큰 값이 성능 저하를 나타낼 때 사용됩니다.
    • 예를 들어, z-점수 테스트를 0.977의 상한 경계와 함께 사용하고 역사적 메트릭이 평균 100과 표준 편차 10을 가지고 있다면, 상한 경계 한계는 119.95가 될 것이고 119.95보다 큰 값은 경고를 생성할 것입니다.

t-test

t-테스트(t_test)는 스튜던트 t-테스트를 사용하여 새로운 메트릭이 과거 메트릭의 평균보다 위 또는 아래에 있을 가능성에 대한 신뢰 구간 (CI)을 측정합니다.

t-테스트는 다음과 같은 경우에 가장 잘 작동합니다:

  • 벤치마크 실행 간에 극단적인 차이가 없는 경우
  • 벤치마크 실행이 서로 완전히 독립적인 경우
  • 단일 벤치마크 실행의 반복 횟수가 과거 메트릭의 10% 미만인 경우

t-테스트의 경우, 신뢰 구간은 소수 신뢰 백분율로 표현됩니다. 새로운 메트릭이 특정 좌측 신뢰 백분율(하한계)보다 아래에 있거나 특정 우측 신뢰 백분율(상한계)보다 위에 있는 경우 알림이 생성됩니다. 하한계, 상한계, 또는 둘 다 설정되어야 합니다.

  • t-test 하한계

    • t-테스트 하한계는 0.51.0 사이의 어떤 양수 소수도 될 수 있습니다. 0.5는 평균을 나타내고 1.0은 가능한 모든 좌측 값을 나타냅니다 (-∞). 더 작은 값이 성능 퇴행을 나타내는 경우에 사용됩니다.
    • 예를 들어, 하한계가 0.977인 t-테스트를 사용하였고, 25개의 과거 메트릭에 평균 100과 표준 편차 10이 있는 경우, 하한계 제한은 78.96이 되고 78.96 미만의 값은 알림을 생성합니다.
  • t-test 상한계

    • t-테스트 상한계는 0.51.0 사이의 어떤 양수 소수도 될 수 있습니다. 0.5는 평균을 나타내고 1.0은 가능한 모든 우측 값을 나타냅니다 (∞). 더 큰 값이 성능 퇴행을 나타내는 경우에 사용됩니다.
    • 예를 들어, 상한계가 0.977인 t-테스트를 사용하였고, 25개의 과거 메트릭에 평균 100과 표준 편차 10이 있는 경우, 상한계 제한은 121.04가 되고 121.04 초과의 값은 알림을 생성합니다.

로그 정규

로그 정규 테스트 (log_normal)는 로그 정규 분포를 사용하여 새로운 메트릭이 과거 메트릭의 중심 위치보다 위 또는 아래에 있을 가능성을 측정합니다.

로그 정규 테스트는 다음의 경우에 가장 효과적입니다:

  • 벤치마크 실행이 서로 완전히 독립적인 경우
  • 단일 벤치마크 실행의 반복 횟수가 과거 메트릭의 10% 미만인 경우
  • 모든 데이터가 양수인 경우 (음수의 자연 로그는 정의되지 않음)

로그 정규 테스트의 경우, 가능성은 소수 퍼센트로 표시됩니다. 새로운 메트릭이 특정 왼쪽 비중 이하 (하한) 또는 오른쪽 비중 이상 (상한)일 경우 경고가 생성됩니다. 하한, 상한, 또는 둘 다 설정해야 합니다.

  • 로그 정규 하한

    • 로그 정규 테스트 하한은 0.5에서 1.0 사이의 양의 소수일 수 있습니다. 0.5는 중심 위치를 나타내며 1.0은 가능한 모든 왼쪽 값 (-∞)을 나타냅니다. 작은 값이 성능 퇴행을 나타낼 때 사용합니다.
    • 예를 들어, 로그 정규 테스트를 하한 0.977로 사용하고, 과거 메트릭이 100을 중심으로 25개 있으며 이전에 200인 이상치가 하나 있었다면, 하한 임계값은 71.20이 되고, 71.20 미만의 값은 경고를 생성합니다.
  • 로그 정규 상한

    • 로그 정규 테스트 상한은 0.5에서 1.0 사이의 양의 소수일 수 있습니다. 0.5는 중심 위치를 나타내며 1.0은 가능한 모든 오른쪽 값 (∞)을 나타냅니다. 큰 값이 성능 퇴행을 나타낼 때 사용합니다.
    • 예를 들어, 로그 정규 테스트를 상한 0.977로 사용하고, 과거 메트릭이 100을 중심으로 25개 있으며 이전에 200인 이상치가 하나 있었다면, 상한 임계값은 134.18이 되고, 134.18 이상의 값은 경고를 생성합니다.

사분범위

사분범위 테스트(iqr)는 새 메트릭이 역사적 메트릭의 중앙값에 비해 사분범위 (IQR)의 몇 배인지를 측정합니다. 새로운 메트릭이 중앙값에서 IQR의 특정 배수 이하(하한 경계) 또는 역사적 메트릭의 중앙값에서 IQR의 특정 배수 이상(상한 경계)일 경우 경고가 생성됩니다. 하한 경계, 상한 경계 또는 둘 다를 설정해야 합니다.

  • 사분범위 하한 경계

    • 사분범위 테스트 하한 경계는 0보다 크거나 같은 모든 배수일 수 있습니다(예: 2x의 경우 2.0 사용). 작은 값이 성능 저하를 나타내는 경우 사용됩니다.
    • 예를 들어, 하한 경계를 2.0으로 설정한 사분범위 테스트가 있고 역사적 메트릭의 중앙값이 100, 사분범위가 10일 경우 하한 경계 제한은 80이 되며 80 미만의 값은 경고를 생성합니다.
  • 사분범위 상한 경계

    • 사분범위 테스트 상한 경계는 0보다 크거나 같은 모든 배수일 수 있습니다(예: 2x의 경우 2.0 사용). 큰 값이 성능 저하를 나타내는 경우 사용됩니다.
    • 예를 들어, 상한 경계를 2.0으로 설정한 사분범위 테스트가 있고 역사적 메트릭의 중앙값이 100, 사분범위가 10일 경우 상한 경계 제한은 120이 되며 120보다 큰 값은 경고를 생성합니다.

델타 사분위 범위

델타 사분위 범위 테스트 (delta_iqr)는 새로운 메트릭이 역사적인 메트릭의 중위수에 비해 평균 백분율 변화 (Δ) 사분위 범위 (IQR)의 몇 배인지를 측정합니다. 새로운 메트릭이 중위수에서 ΔIQR의 특정 배수 아래(하한) 또는 중위수에서 ΔIQR의 특정 배수 위(상한)에 있을 경우 경고가 생성됩니다. 하한, 상한 혹은 둘 다 설정되어야 합니다.

  • 델타 사분위 범위 하한

    • 델타 사분위 범위 테스트 하한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예: 2.02배를 의미). 이는 작은 값이 성능 퇴보를 나타내는 경우에 사용됩니다.
    • 예를 들어, 하한이 2.0으로 설정된 델타 사분위 범위 테스트가 있고 역사적인 메트릭의 중위수가 100, 사분위 범위가 10, 평균 델타 사분위 범위가 0.2(20%)인 경우 하한 제한은 60이 되며, 60보다 작은 값은 경고를 생성합니다.
  • 델타 사분위 범위 상한

    • 델타 사분위 범위 테스트 상한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예: 2.02배를 의미). 이는 큰 값이 성능 퇴보를 나타내는 경우에 사용됩니다.
    • 예를 들어, 상한이 2.0으로 설정된 델타 사분위 범위 테스트가 있고 역사적인 메트릭의 중위수가 100, 사분위 범위가 10, 평균 델타 사분위 범위가 0.2(20%)인 경우 상한 제한은 140이 되며, 140보다 큰 값은 경고를 생성합니다.

Static

정적 테스트(static)는 가장 간단한 테스트입니다. 새로운 메트릭이 설정된 하한 경계 아래 또는 상한 경계 위에 있을 경우 경고가 생성됩니다. 즉, 하한/상한 경계는 명시적인 하한/상한 경계 제한입니다. 하한 경계, 상한 경계, 두 가지 중 하나 이상을 설정해야 합니다. 정적 테스트는 코드 커버리지와 같이 모든 벤치마크에서 메트릭의 값이 일정 범위 내에 있어야 할 때 가장 효과적입니다.

🐰 각 벤치마크에 대해 다른 정적 하한/상한 경계를 원하신다면, 퍼센티지 테스트(percentage)를 사용하시고 하한/상한 경계를 0.0으로 설정하시고 최대 샘플 크기2로 설정하세요.

  • 정적 하한 경계

    • 정적 테스트 하한 경계는 임의의 부동소수점 수가 될 수 있습니다. 작은 값이 성능 회귀를 나타낼 경우 사용됩니다. 하한 경계는 상한 경계가 지정된 경우 상한 경계보다 작거나 같아야 합니다.
    • 예를 들어, 하한 경계가 100으로 설정된 정적 테스트가 있는 경우 하한 경계 제한 역시 100이 되며 100보다 작은 모든 값은 경고를 생성합니다.
  • 정적 상한 경계

    • 정적 테스트 상한 경계는 임의의 부동소수점 수가 될 수 있습니다. 큰 값이 성능 회귀를 나타낼 경우 사용됩니다. 상한 경계는 하한 경계가 지정된 경우 하한 경계보다 크거나 같아야 합니다.
    • 예를 들어, 상한 경계가 100으로 설정된 정적 테스트가 있는 경우 상한 경계 제한 역시 100이 되며 100보다 큰 모든 값은 경고를 생성합니다.

--threshold-min-sample-size <SAMPLE_SIZE>


테스트를 실행하기 위해 요구되는 메트릭의 최소 개수를 선택적으로 지정할 수 있습니다. 이 최소값이 충족되지 않으면 테스트는 실행되지 않습니다. 지정된 샘플 크기는 2 이상이어야 합니다. 또한 --threshold-max-sample-size 옵션이 설정된 경우, 지정된 샘플 크기는 --threshold-max-sample-size 이하이어야 합니다. 이 옵션은 정적(static) 테스트와 함께 사용할 수 없습니다.

예를 들어 최소 샘플 크기가 10인 임계값을 사용하려면, --threshold-min-sample-size 10으로 작성할 수 있습니다. 만약 10개 미만의 메트릭이 있다면, 테스트는 실행되지 않습니다. 반대로 10개 이상의 메트릭이 있다면, 테스트는 실행됩니다.

--threshold-max-sample-size <SAMPLE_SIZE>


최대 Metric 수를 지정하여 테스트를 실행할 수 있습니다. 이 최대치를 초과하면 가장 오래된 Metric이 무시됩니다. 지정된 샘플 크기는 2 이상이어야 합니다. --threshold-min-sample-size 옵션이 설정된 경우, 지정된 샘플 크기는 --threshold-min-sample-size 이상이어야 합니다. 이 옵션은 정적(static) 테스트와 함께 사용할 수 없습니다.

예를 들어, 최대 샘플 크기가 100인 Threshold를 사용하려면, --threshold-max-sample-size 100이라고 작성할 수 있습니다. Metric이 100개 이상이면 가장 최근의 100개의 Metric만 포함됩니다. 반대로, Metric이 100개 이하라면 모든 Metric이 포함됩니다.

--threshold-window <WINDOW>


메트릭을(를) 사용하여 테스트를 수행하기 위한 시간 창을 초 단위로 선택적으로 지정합니다. 지정된 창은 0보다 커야 합니다. 이 옵션은 정적인(static) 테스트와 함께 사용할 수 없습니다.

예를 들어, 4주 또는 2419200초의 창을 갖는 임계값을 사용하려면, --threshold-window 2419200이라고 작성할 수 있습니다. 4주보다 오래된 메트릭은 제외됩니다. 반대로, 모든 메트릭이 지난 4주 내에 포함되어 있다면, 모두 포함됩니다.

--threshold-lower-boundary <BOUNDARY>


하한 경계를 지정합니다. 하한 경계의 제약 조건은 사용된 테스트에 따라 다릅니다. 하한 경계, 상한 경계, 또는 둘 다를 지정해야 합니다.

자세한 내용은 사용 중인 특정 테스트의 문서를 참조하세요:

--threshold-upper-boundary <BOUNDARY>


상한선을 지정합니다. 상한선의 제약 조건은 사용되는 테스트에 따라 달라집니다. 하한선, 상한선, 또는 둘 다를 지정해야 합니다.

자세한 내용은 사용 중인 특정 테스트의 문서를 참조하십시오:

---thresholds-reset


주어진 BranchTestbed에 대해 지정되지 않은 모든 Threshold를 재설정합니다. Threshold가 이미 존재하고 지정되지 않은 경우, 현재의 Model이 제거됩니다.

예를 들어, main Branch와 localhost Testbed에 두 개의 Threshold가 있었을 경우:

  • main Branch, localhost Testbed, latency Measure
  • main Branch, localhost Testbed, throughput Measure

만약 bencher run 하위 명령어에서 latency Measure만 지정되고 --thresholds-reset이 사용되면, throughput Measure의 Model은 제거됩니다.

--err


경고가 생성될 때 선택적으로 오류가 발생합니다. 새로운 측정치가 하한선보다 낮거나 상한선을 초과할 때 경고가 생성됩니다.

경고 억제하기

특정 벤치마크에 대해 경고를 억제하는 것이 유용할 수 있습니다. 이를 수행하는 가장 좋은 방법은 해당 벤치마크 이름에 다음과 같은 특수 접미사 중 하나를 추가하는 것입니다:

  • _bencher_ignore
  • BencherIgnore
  • -bencher-ignore

예를 들어, 벤치마크가 my_flaky_benchmark로 명명되었다면 my_flaky_benchmark_bencher_ignore로 이름을 변경하면 해당 특정 벤치마크는 앞으로 무시됩니다. 무시된 벤치마크는 기존의 임계값에 대해 여전히 검사됩니다. 그러나, 이들에 대해 경고는 생성되지 않습니다. 무시된 벤치마크의 측정치는 여전히 저장됩니다. my_flaky_benchmark_bencher_ignore의 결과는 여전히 벤치마크 my_flaky_benchmark로 저장됩니다. 접미사를 제거하고 원래 벤치마크 이름으로 돌아가면, 원래 위치에서 다시 시작됩니다.



🐰 축하합니다! 이제 임계값 & 알림에 대해 모두 배웠습니다! 🎉


계속하십시오: 벤치마크 하네스 어댑터 ➡

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Sat, October 19, 2024 at 1:27:00 PM UTC