TPS 산출공식을 알고싶습니다.

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

TPS 산출공식을 알고싶습니다.

개발신입
This post was updated on .
서버 테스트툴을 직접 개발하고있습니다....
TPS를 산출하고 싶은데 일반적인 공식은 밑의 공식으로 알고있습니다.....
①   TPS = (Active User) / (Average Response Time) – F1
②   TPS = (Concurrent User) / (Request Interval) – F2
③   Active User = TPS * (Average Response Time) – F3
④   Active User = (Concurrent User) * (Average Response Time) / (Request Interval) – F4
⑤   Active User = (Concurrent User) * (Average Response Time) / [ (Average Response Time) + (Average Think Time) ] – F5

클라이언트에서 Agent(process*thread)를 만들어 목표 서버의 요청 패킷을 보내고 응답 패킷을 받는 시간을 구하고 각 모든 Agent가 구한 시간을 합산하여 Agent수 만큼 나누어 Average response time을 구하여  TPS를 구하는 방법과 프로그램이 돌아하는 총 런닝타임인 Runnig Time을 모든 Thread의 합산시간에서 나누는 공식인

process*thread/Average response time과
process&thread/running time 으로 둘 다 해봤는데 다른 테스트툴에서 측정되는 TPS와 큰 차이를 보였습니다.....

실질적으로서버는 8개의 working Thread가 돌아가서 8개씩 처리를 하고 있어서 9번째 응답시간부터 점점 체크시간이 늘어나는 현상을 보이고 있구요 이것을 다더해서 Agent수로 나누어 평균을 구하고있습니다.....

결론적으로 현재 구할수 있는시간

프로그램 running time(모든 쓰레드가 요청을 하고 응답을 받고 출력하는 시간는 RealTtime)
응답 평균 시간 (각 쓰레드가 응답 패킷을 받는데 걸린 모든 시간을 합산 하여 쓰레드 수 만큼 나눈 시간)
응답 총 시간(모든 쓰레드가 응답패킷을 받는 시간을 더 한 수)
이 세가지의 시간으로 TPS를 구할수 있을지 의문입니다.....

100개의 Agent를 만들고 응답을 받은 예시로
1번째 Agent 응답시간 time:0.064000
100번쨰 Agent 응답시간 time:0.873000
total time: 46.594996
Average time 0.465950
running time :0.954

등이 있습니다. 제가 구한 바로는 100(Agent수)/0.465950(Average time)=214.6.... 이 나오는데.....
이값이 맞나 싶기도 하구요.... grinder테스트툴 체크 TPS보다 터무니 없이 빠른 속도 입니다.

아직 답변이 없네요 추가 적으로 시간개념과 처리량 개념을 넣었습니다.
Agent수를 설정하고 그 Agent가 1분동안 받은 패킷의 수를 처리량으로 설정하여
처리량/60 과 같이 계산을 해보았습니다.

TPS에 어떤것이 제일 근접한 수치일까요?

Reply | Threaded
Open this post in threaded view
|

Re: TPS 산출공식을 알고싶습니다.

YoungWoo Kim
전 nGrinder사용자인데요, 아는 한도 내에서 위에 부분에 대해서 잘못된 부분을 설명드릴께요..

아래 공식(F1 ~ F5) 맞지만 TPS산출 방법이 잘못되신거 같습니다.

Running Time : 0.954 초로 보면, 아마 8개의 쓰래드가 돌아가면서 1번 ~ 8번을 순차적으로 가져오면서 부하를 준것이기 때문에

아래 100개로 잡으신 것은 Concurrent User 수 입니다.

Active User는 실제 서버에 부하를 주고 있는 사용자를 의미하며,

Concurrent User는 서비스를 사용하고 있는 모든 사용자 (Think Time하는 사용자 = 부하를 주지 않고 있는 사용자)도 포함된 수입니다.

아래 계산 하신 것은 Concurrent User / Average Response Time 방식으로 계산 하셨기 때문에 너무나 큰 값이 나오게 된 것입니다.

1번 Agent는 처음 1번 부하를 주고, 0.89초 동안 Think Time(Running Time - Response Time)을 하고 있었던 것이지요

100번 Agent의 경우 약 0.081초 동안 기다리다가(Think Time) 부하를 주었습니다.

(1번 Think Time + 100번 Think Time) / 2개 = 평균 Think Time이라 하면 약 0.4855라는 값이 나옵니다.

Request Interval = (Average Response Time) + (Average Think Time) 입니다.

Request Interval =  0.4855 + 0.4659 = 0.954 입니다.

TPS = 100 (Concurrent User) / 0.954 (Request Interval) = 104.82 입니다.

사실 TPS 의 기본 공식은 Transaction / Seconds = 100건 요청 / 0.954 (수행시간) = 104.82로 같은 값이 나옵니다.

아래 처리량/60초로 하시면 평균 TPS가 나옵니다.

TPS는 초당위의 처리량값을 구하셔서 임계치 TPS값을 구하는게 좋습니다.