P99 레이턴시란?

P99 레이턴시라는 말을 가끔 듣지만, 그게 정확히 무엇을 의미하는 지표인지 모를 때가 있습니다. 과연 P99는 무엇을 나타내는 걸까요?

P99 레이턴시란?

프로그래밍 관련 아티클을 읽다보면 P99 또는 P95, P50 레이턴시와 같은 명칭을 마주할 때가 있습니다.

💡
P의 Percentage 즉, %를 의미하므로 P99 레이턴시는 99%에 해당하는
지연시간(레이턴시)를 의미합니다.

쉽게 설명하자면 다음과 같습니다.

요청 100개 중 99개는 이 시간 안에 끝난다.
나머지 1개는 이보다 더 느릴 수 있다.

예를 들어 P99 = 100ms 인 시스템이 있고, 100개의 요청이 들어왔다면,

빠른 99개의 요청은 1ms~100ms 정도에 수행되었음을 의미합니다.

그리고 가장 느린 마지막 요청은 500ms일 수도, 아예 뭔가 큰 문제가 생겨서 5sec이 걸렸을 수도 있습니다.

최악의 1%가 얼마가 됐던 P99는 100ms입니다. 어쨌든 99%의 요청까지는 100ms에 들어왔다는 말이니까요.

P99는 서비스 운영에서 성능 평가에 상당히 중요한 지표로 사용됩니다.

왜 평균이 아니라 99%일까?

언제나 그렇듯 통계에서 평균은 많은 함정을 갖고 있습니다.

1%안 되는 비정상적인 수치가 나머지 99%를 생각보다 크게 흔들어 놓을 수 있으며,

사용자가 느끼는 경험은, 평균적인 속도가 아니라 어느 느렸던 한 순간이기 때문입니다.

1만 명의 유저 중, 9900명이 10ms로 정말 원활하게 돌아간다고 해도, 100명의 유저가 경험을 뚝 떨어뜨리는 마의 3sec 지연이 발생했다면?

위 케이스를 평균으로 계산할 경우, 30ms로 사실상 대부분의 유저(99%)가 겪은 10ms라는 원활한 사용성의 3배에 달하는 수치이고, 나머지 1천 명의 유저의 불편함은 평균이라는 수치로는 보이지 않습니다.

그렇기 때문에 99%라는 기준 속에서, 대부분의 유저가 겪을 지연시간과 소수의 엣지 케이스를 찾아내는 것이죠.

그렇다면 P99 목표치만 낮추면 되나?

P99는 이상적인 목표치가 아닌 필수적인 최소치로써 받아들여야 합니다.

이와 관련된 Stack overflow의 글을 살펴보고 오면,

What is P99 latency?
What does P99 latency represent? I keep hearing about this in discussions about an application’s performance but couldn’t find a resource online that would talk about this.

해당 게시글의 여러 댓글이 will(도착할 것이다)이 아닌 should(도착해야 한다)의 의미로 써야한다고 말하고 있습니다.

이상적인 상황에서의 값이 아닌, 평소에나 언제든지 당연히 지켜져야 한다인 것이죠.

어느 네트워크 좋은 날,
"P99가 10ms가 나왔으니 우리 서비스의 P99는 10ms이야!"
가 아니라,

스위치 타들어가는 소리 들리면서도
"P99가 그래도 30ms는 지켜졌어! 우리 서비스는 P99 30ms를 지켜낸 거야!"
일 때 진정한 P99로 인정할 수 있는 것이죠.

왼쪽이 진정한 P99죠.

나머지 1% 또한 너무나 중요하다.

P99가 절대적으로 낮은 건 당연히 좋은 상태입니다.

대부분의 사용자가 서비스를 원활하게 사용하고 있다는 지표이기 때문이죠.

하지만, 나머지 1%에서 심각한 수준의 성능 하락이 보인다면 그 부분을 집중적으로 파고들 필요가 있습니다.

거기서 DB Lock 경합, GC Stop-the-world, 네트워크 순간 혼잡, 특정 shard 과부하, 특정 API 호출 병목 등, 반드시 짚고 넘어가야 할 문제를 쉽게 파악할 수 있을 겁니다.

성능 평가 지표로써 다양한 방식들

  • P50 : 지연시간의 중간값인 P50은 평균보다도 더 대부분의 일반적 사용자가 느끼는 성능에 가까운 지표라고 생각합니다. P50을 10ms 정도로 만들자! 라고 한다면 대부분의 사용자가 10ms +- 언저리에서 사용성을 느낄 수 있을 것입니다.
  • P95 : P99보다는 널럴하지만, 95%도 충분히 '대부분의 유저'라고 칭할 수 있으므로, 기준이 조금 널럴한 SLO로 삼을만한 지표입니다.
  • P99 : 가장 대표적으로 쓰이는 SLO라고 할 수 있겠습니다. 99% 유저가 경험할 수 있는 지연시간의 상한선이므로, 계속해서 줄여나가는 것을 목표로 달리면 되겠습니다. P95 또는 P99를 10ms로 만든다면, "대부분의 유저"는 10ms보다 쾌적한 사용성을 가지는 것이죠.
  • P999... : 숫자를 계속 붙여가며 0.1%, 0.01%... 극한까지 지연시간을 단축시키는 걸 목표로 하는 주식 채결 시스템에서는 P999도 부족하다고 한답니다.