임계값 & 알림
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
로 설정하려면 다음과 같이 작성할 수 있습니다:
🐰 기능 분기에서 작업할 때는 기본 시작점 분기에서 기존의 Thresholds를 복사하고 싶을 수 있습니다. 이는 그
--start-point-clone-thresholds
플래그를 사용하여 가능합니다.--thresholds-reset
플래그는 명시적으로 지정되지 않은 모든 복사된 Thresholds를 여전히 제거합니다.
여러 임계값
동일한 bencher run
호출로 여러 임계값을 생성할 수 있습니다.
여러 임계값을 지정할 때에는 각 임계값에 대해 동일한 옵션을 사용해야 합니다.
특정 임계값에 대한 옵션을 무시하려면 언더스코어(_
)를 사용하세요.
예를 들어, 두 개의 임계값만 사용하고 싶다면,
하나는 지연 시간(measure)에 대한 것이고 하나는 처리량(measure)에 대한 것이라면,
지연 시간(measure)에는 상위 경계를 설정하고
처리량(measure)에는 하위 경계를 설정하고 싶을 것입니다.
따라서 지연 시간(measure)에는 --threshold-lower-boundary _
을 사용하고,
처리량(measure)에는 --threshold-upper-boundary _
을 사용합니다.
이렇게 작성할 수 있습니다:
--threshold-measure <MEASURE>
지정된 측정 이름, 슬러그, 또는 UUID를 임계치로 사용하십시오. 지정된 값이 이름이나 슬러그일 때 아직 측정이 존재하지 않는다면, 자동으로 생성됩니다. 하지만, 지정된 값이 UUID일 경우에는 이미 존재해야 합니다.
예를 들어, Latency 측정에 대한 임계치를 사용하려면,
--threshold-measure latency
라고 작성할 수 있습니다.
--threshold-test <TEST>
지정된 테스트를 사용하여 성능 저하를 감지합니다.
사용할 수 있는 여러 가지 테스트가 있습니다:
- Percentage (
percentage
) - z-score (
z_score
) - t-test (
t_test
) - Log Normal (
log_normal
) - Interquartile Range (
iqr
) - Delta Interquartile Range (
delta_iqr
) - Static (
static
)
예를 들어, 학생의 t-테스트와 함께 임계값을 사용하려면, --threshold-test t_test
라고 쓸 수 있습니다.
퍼센트
퍼센트 테스트(percentage
)는 가장 간단한 통계 테스트입니다. 새로운 메트릭이 평균의 특정 퍼센트 아래(하한 경계) 또는 평균의 특정 퍼센트 위(상한 경계)인 경우 경고가 생성됩니다. 하한 경계, 상한 경계 또는 둘 다 설정해야 합니다. 퍼센트 테스트는 메트릭 값이 알려진 적절한 범위 내에 있어야 할 때 가장 효과적입니다.
-
퍼센트 하한 경계
- 퍼센트 테스트 하한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예:
10%
는0.10
사용). 더 작은 값이 성능 저하를 나타낼 때 사용합니다. - 예를 들어, 하한 경계를
0.10
으로 설정한 퍼센트 테스트가 있고, 과거 메트릭의 평균이100
이라면 하한 경계 한계는90
이 됩니다.90
보다 작은 값이 측정되면 경고가 생성됩니다.
- 퍼센트 테스트 하한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예:
-
퍼센트 상한 경계
- 퍼센트 테스트 상한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예:
10%
는0.10
사용). 더 큰 값이 성능 저하를 나타낼 때 사용합니다. - 예를 들어, 상한 경계를
0.10
으로 설정한 퍼센트 테스트가 있고, 과거 메트릭의 평균이100
이라면 상한 경계 한계는110
이 됩니다.110
보다 큰 값이 측정되면 경고가 생성됩니다.
- 퍼센트 테스트 상한 경계는 0 이상의 어떤 퍼센트 값도 소수점 형태로 사용할 수 있습니다(예:
z-점수
z-점수 테스트 (z_score
)는 새로운 메트릭이 역사적 메트릭의 평균에서 표준 편차 (σ) 만큼 얼마나 떨어져 있는지를 z-점수를 사용하여 측정합니다.
z-점수 테스트는 다음의 경우에 최적입니다:
- 벤치마크 실행 간 극단적인 차이가 없을 때
- 벤치마크 실행이 서로 완전히 독립적일 때
- 단일 벤치마크 실행의 반복 횟수가 역사적 메트릭의 10% 미만일 때
- 최소 30개의 역사적 메트릭이 있을 때 (최소 샘플 크기 >= 30)
z-점수 테스트의 경우, 표준 편차는 소수 누적 백분율로 표현됩니다. 새로운 메트릭이 특정 왼쪽 누적 백분율(하한 경계) 이하이거나 특정 오른쪽 누적 백분율(상한 경계)을 초과할 때 경고가 생성됩니다. 하한 경계, 상한 경계, 또는 둘 다 설정되어야 합니다.
-
z-점수 하한 경계
- z-점수 테스트의 하한 경계는
0.5
와1.0
사이의 모든 양의 소수가 될 수 있습니다.0.5
는 평균을 나타내며1.0
은 가능한 모든 왼쪽 값(-∞)을 나타냅니다. 더 작은 값이 성능 저하를 나타낼 때 사용됩니다. - 예를 들어, z-점수 테스트를
0.977
의 하한 경계와 함께 사용하고 역사적 메트릭이 평균100
과 표준 편차10
을 가지고 있다면, 하한 경계 한계는80.05
가 될 것이고80.05
보다 작은 값은 경고를 생성할 것입니다.
- z-점수 테스트의 하한 경계는
-
z-점수 상한 경계
- z-점수 테스트의 상한 경계는
0.5
와1.0
사이의 모든 양의 소수가 될 수 있습니다.0.5
는 평균을 나타내며1.0
은 가능한 모든 오른쪽 값(∞)을 나타냅니다. 더 큰 값이 성능 저하를 나타낼 때 사용됩니다. - 예를 들어, z-점수 테스트를
0.977
의 상한 경계와 함께 사용하고 역사적 메트릭이 평균100
과 표준 편차10
을 가지고 있다면, 상한 경계 한계는119.95
가 될 것이고119.95
보다 큰 값은 경고를 생성할 것입니다.
- z-점수 테스트의 상한 경계는
t-test
t-테스트(t_test
)는 스튜던트 t-테스트를 사용하여 새로운 메트릭이 과거 메트릭의 평균보다 위 또는 아래에 있을 가능성에 대한 신뢰 구간 (CI)을 측정합니다.
t-테스트는 다음과 같은 경우에 가장 잘 작동합니다:
- 벤치마크 실행 간에 극단적인 차이가 없는 경우
- 벤치마크 실행이 서로 완전히 독립적인 경우
- 단일 벤치마크 실행의 반복 횟수가 과거 메트릭의 10% 미만인 경우
t-테스트의 경우, 신뢰 구간은 소수 신뢰 백분율로 표현됩니다. 새로운 메트릭이 특정 좌측 신뢰 백분율(하한계)보다 아래에 있거나 특정 우측 신뢰 백분율(상한계)보다 위에 있는 경우 알림이 생성됩니다. 하한계, 상한계, 또는 둘 다 설정되어야 합니다.
-
t-test 하한계
- t-테스트 하한계는
0.5
와1.0
사이의 어떤 양수 소수도 될 수 있습니다.0.5
는 평균을 나타내고1.0
은 가능한 모든 좌측 값을 나타냅니다 (-∞). 더 작은 값이 성능 퇴행을 나타내는 경우에 사용됩니다. - 예를 들어, 하한계가
0.977
인 t-테스트를 사용하였고,25
개의 과거 메트릭에 평균100
과 표준 편차10
이 있는 경우, 하한계 제한은78.96
이 되고78.96
미만의 값은 알림을 생성합니다.
- t-테스트 하한계는
-
t-test 상한계
- t-테스트 상한계는
0.5
와1.0
사이의 어떤 양수 소수도 될 수 있습니다.0.5
는 평균을 나타내고1.0
은 가능한 모든 우측 값을 나타냅니다 (∞). 더 큰 값이 성능 퇴행을 나타내는 경우에 사용됩니다. - 예를 들어, 상한계가
0.977
인 t-테스트를 사용하였고,25
개의 과거 메트릭에 평균100
과 표준 편차10
이 있는 경우, 상한계 제한은121.04
가 되고121.04
초과의 값은 알림을 생성합니다.
- t-테스트 상한계는
로그 정규
로그 정규 테스트 (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보다 크거나 같은 모든 배수일 수 있습니다(예:
-
사분범위 상한 경계
- 사분범위 테스트 상한 경계는 0보다 크거나 같은 모든 배수일 수 있습니다(예:
2x
의 경우2.0
사용). 큰 값이 성능 저하를 나타내는 경우 사용됩니다. - 예를 들어, 상한 경계를
2.0
으로 설정한 사분범위 테스트가 있고 역사적 메트릭의 중앙값이100
, 사분범위가10
일 경우 상한 경계 제한은120
이 되며120
보다 큰 값은 경고를 생성합니다.
- 사분범위 테스트 상한 경계는 0보다 크거나 같은 모든 배수일 수 있습니다(예:
델타 사분위 범위
델타 사분위 범위 테스트 (delta_iqr
)는 새로운 메트릭이 역사적인 메트릭의 중위수에 비해 평균 백분율 변화 (Δ) 사분위 범위 (IQR)의 몇 배인지를 측정합니다. 새로운 메트릭이 중위수에서 ΔIQR의 특정 배수 아래(하한) 또는 중위수에서 ΔIQR의 특정 배수 위(상한)에 있을 경우 경고가 생성됩니다. 하한, 상한 혹은 둘 다 설정되어야 합니다.
-
델타 사분위 범위 하한
- 델타 사분위 범위 테스트 하한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예:
2.0
은2배
를 의미). 이는 작은 값이 성능 퇴보를 나타내는 경우에 사용됩니다. - 예를 들어, 하한이
2.0
으로 설정된 델타 사분위 범위 테스트가 있고 역사적인 메트릭의 중위수가100
, 사분위 범위가10
, 평균 델타 사분위 범위가0.2
(20%
)인 경우 하한 제한은60
이 되며,60
보다 작은 값은 경고를 생성합니다.
- 델타 사분위 범위 테스트 하한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예:
-
델타 사분위 범위 상한
- 델타 사분위 범위 테스트 상한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예:
2.0
은2배
를 의미). 이는 큰 값이 성능 퇴보를 나타내는 경우에 사용됩니다. - 예를 들어, 상한이
2.0
으로 설정된 델타 사분위 범위 테스트가 있고 역사적인 메트릭의 중위수가100
, 사분위 범위가10
, 평균 델타 사분위 범위가0.2
(20%
)인 경우 상한 제한은140
이 되며,140
보다 큰 값은 경고를 생성합니다.
- 델타 사분위 범위 테스트 상한은 0보다 크거나 같은 임의의 배수일 수 있습니다 (예:
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
주어진 Branch 및 Testbed에 대해 지정되지 않은 모든 Threshold를 재설정합니다. Threshold가 이미 존재하고 지정되지 않은 경우, 현재의 Model이 제거됩니다.
예를 들어, main
Branch와 localhost
Testbed에 두 개의 Threshold가 있었을 경우:
만약 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
로 저장됩니다. 접미사를 제거하고 원래 벤치마크 이름으로 돌아가면, 원래 위치에서 다시 시작됩니다.
🐰 축하합니다! 이제 임계값 & 알림에 대해 모두 배웠습니다! 🎉