proactor/reactor server io 성능 분석

77
131039 신동찬 Server io 작업 처리 성능 분석 proactor / reactor 서버 io thread 작업 처리 결과

Upload: dongchan-shin

Post on 26-May-2015

499 views

Category:

Engineering


7 download

DESCRIPTION

SW Architecture 과제

TRANSCRIPT

Page 1: Proactor/Reactor Server io 성능 분석

131039 신동찬

Server io 작업 처리 성능 분석proactor / reactor 서버 io thread 작업 처리 결과

Page 2: Proactor/Reactor Server io 성능 분석

실험 목표

proactor / reactor 서버 접속 개수 변경에 따라 서버처리 속도 변화 확인

실험 방법• 두가지방식에대해동일한실험진행

(512byte, 3Kb, 200Kb, 2Mb, 20Mb 스트림저장)• 접속 요청 개수 조절을통한 서버 반응 확인

(1, 3, 5, 20, 50, 100 개로 확인)

기타세부조정• 기본적으로 1접속당 100번씩요청하는것으로함

(동시 접속 3개 * 100 = 300회)• 2Mb, 20Mb 경우에는간략한 실험으로진행

(접속 1개 당 10회 요청으로축소)

Page 3: Proactor/Reactor Server io 성능 분석

Proactor

Page 4: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 1개

latency : 0 msThroughput : 917.4/sec

Page 5: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

latency : 0 msThroughput : 393.7/sec

접속 : 3개

Page 6: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 5개

latency : 0 msThroughput : 568.8/sec

Page 7: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 20개

latency : 0 msThroughput : 1858.7/sec

Page 8: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 50개

latency : 4 msThroughput : 2893.5/sec

Page 9: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 100개

latency : 16 msThroughput : 2527.8/sec

Page 10: Proactor/Reactor Server io 성능 분석

512 byte 정리

접속 개수 50개부터 latency가발생하기시작했음

Page 11: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 1개

latency : 0 msThroughput : 1087.0/sec

Page 12: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 3개

latency : 0 msThroughput : 393.2/sec

Page 13: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 5개

latency : 0 msThroughput : 573.4/sec

Page 14: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 20개

latency : 0 msThroughput : 1857.0/sec

Page 15: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 50개

latency : 4 msThroughput : 2612.3/sec

Page 16: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 100개

latency : 16 msThroughput : 2419.0/sec

Page 17: Proactor/Reactor Server io 성능 분석

3Kbyte 정리

역시 접속 개수 50개부터 latency가발생 시작

Page 18: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 1개

latency : 2 msThroughput : 381.7/sec

Page 19: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 3개

latency : 2 msThroughput : 337.8/sec

Page 20: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 5개

latency : 3 msThroughput : 410.2/sec

Page 21: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 20개

latency : 25 msThroughput : 479.6/sec

Page 22: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 50개

latency : 113 msThroughput : 369.9/sec

Page 23: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 100개

latency : 246 msThroughput : 375.0/sec

Page 24: Proactor/Reactor Server io 성능 분석

200Kbyte 정리

처음부터약간의 latency가발생 시작접속 20개에서조금증가

접속 50개이후 폭발적인 증가

Page 25: Proactor/Reactor Server io 성능 분석

2Mbyte(0x9004) 요청시 처리 결과

접속 : 1개

latency : 30 msThroughput : 32.9/sec

Page 26: Proactor/Reactor Server io 성능 분석

접속 : 3개

latency : 72 msThroughput : 37.7/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 27: Proactor/Reactor Server io 성능 분석

접속 : 5개

latency : 135 msThroughput : 34.0/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 28: Proactor/Reactor Server io 성능 분석

접속 : 20개

latency : 563 msThroughput : 33.1/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 29: Proactor/Reactor Server io 성능 분석

접속 : 50개

latency : 1685 msThroughput : 28.7/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 30: Proactor/Reactor Server io 성능 분석

접속 : 100개

latency : 3254 msThroughput : 27.3/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 31: Proactor/Reactor Server io 성능 분석

2Mbyte 정리

latency가이미 감당하지못 할 정도Reactor 결과를보고비교해봐야유의미할 것같음

Page 32: Proactor/Reactor Server io 성능 분석

20Mbyte(0x9005) 요청시 처리 결과

접속 : 1개

latency : 246 msThroughput : 4.1/sec

Page 33: Proactor/Reactor Server io 성능 분석

접속 : 3개

latency : 959 msThroughput : 3.1/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 34: Proactor/Reactor Server io 성능 분석

접속 : 5개

latency : 1532 msThroughput : 2.9/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 35: Proactor/Reactor Server io 성능 분석

접속 : 20개

latency : 6613 msThroughput : 2.8/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 36: Proactor/Reactor Server io 성능 분석

접속 : 50개

latency : 16132 msThroughput : 2.9/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 37: Proactor/Reactor Server io 성능 분석

접속 : 100개

latency : 32580 msThroughput : 2.9/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 38: Proactor/Reactor Server io 성능 분석

20Mbyte 정리

latency가지켜보기힘들 정도역시 Reactor와의비교로확인할수밖에없음

Page 39: Proactor/Reactor Server io 성능 분석

Reactor

Page 40: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 1개

latency : 5 msThroughput : 110.3/sec

Page 41: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

latency : 5 msThroughput : 102.1/sec

접속 : 3개

Page 42: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 5개

latency : 1 msThroughput : 296.6/sec

Page 43: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 20개

latency : 11 msThroughput : 596.3/sec

Page 44: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 50개

latency : 26 msThroughput : 737.8/sec

Page 45: Proactor/Reactor Server io 성능 분석

512byte(0x9001) 요청시처리 결과

접속 : 100개

latency : 92 msThroughput : 694.0/sec

Page 46: Proactor/Reactor Server io 성능 분석

512 byte 정리

조건에서뭔가 문제가있을 수 있어 보임(1개, 3개에서 5개보다더 높은 latency)

동일 조건 Proactor보다 상대적으로높음

Page 47: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 1개

latency : 1 msThroughput : 515.5/sec

Page 48: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 3개

latency : 0 msThroughput : 388.6/sec

Page 49: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 5개

latency : 0 msThroughput : 542.9/sec

Page 50: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 20개

latency : 4 msThroughput : 1207.0/sec

Page 51: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 50개

latency : 13 msThroughput : 905.3/sec

Page 52: Proactor/Reactor Server io 성능 분석

3Kbyte(0x9002) 요청시 처리 결과

접속 : 100개

latency : 40 msThroughput : 1359.6/sec

Page 53: Proactor/Reactor Server io 성능 분석

3Kbyte 정리

50개부터 latency가높아지고있음

동일 조건 Proactor보다 상대적으로높음

Page 54: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 1개

latency : 3 msThroughput : 253.8/sec

Page 55: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 3개

latency : 2 msThroughput : 328.9/sec

Page 56: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 5개

latency : 2 msThroughput : 483.1/sec

Page 57: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 20개

latency : 59 msThroughput : 253.3/sec

Page 58: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 50개

latency : 144 msThroughput : 296.6/sec

Page 59: Proactor/Reactor Server io 성능 분석

200Kbyte(0x9003) 요청시처리 결과

접속 : 100개

latency : 483 msThroughput : 191.6/sec

Page 60: Proactor/Reactor Server io 성능 분석

200Kbyte 정리

20개부터 latency가높아지고있으며,50개부터급격히높아지고 있음

동일 조건 Proactor보다 상대적으로높음(약 2배)

Page 61: Proactor/Reactor Server io 성능 분석

2Mbyte(0x9004) 요청시 처리 결과

접속 : 1개

latency : 27 msThroughput : 36.3/sec

Page 62: Proactor/Reactor Server io 성능 분석

접속 : 3개

latency : 51 msThroughput : 46.1/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 63: Proactor/Reactor Server io 성능 분석

접속 : 5개

latency : 132 msThroughput : 34.8/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 64: Proactor/Reactor Server io 성능 분석

접속 : 20개

latency : 547 msThroughput : 34.1/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 65: Proactor/Reactor Server io 성능 분석

접속 : 50개

latency : 1625 msThroughput : 29.5/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 66: Proactor/Reactor Server io 성능 분석

접속 : 100개

latency : 3546 msThroughput : 27.2/sec

2Mbyte(0x9004) 요청시 처리 결과

Page 67: Proactor/Reactor Server io 성능 분석

2Mbyte 정리

20개부터 latency가높아지고있으며,50개부터급격히높아지고 있음

동일 조건 Proactor와 거의 차이가 없음하지만 실제 실험 시간이 훨씬 오래 걸림

(데이터 상으로표시는 안 됨)

Page 68: Proactor/Reactor Server io 성능 분석

20Mbyte(0x9005) 요청시 처리 결과

접속 : 1개

latency : 385 msThroughput : 2.6/sec

Page 69: Proactor/Reactor Server io 성능 분석

접속 : 3개

latency : 1093 msThroughput : 2.7/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 70: Proactor/Reactor Server io 성능 분석

접속 : 5개

latency : 1791 msThroughput : 2.5/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 71: Proactor/Reactor Server io 성능 분석

접속 : 20개

latency : 9403 msThroughput : 2.1/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 72: Proactor/Reactor Server io 성능 분석

접속 : 50개

latency : 19888 msThroughput : 2.5/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 73: Proactor/Reactor Server io 성능 분석

접속 : 100개

latency : 35306 msThroughput : 2.6/sec

20Mbyte(0x9005) 요청시 처리 결과

Page 74: Proactor/Reactor Server io 성능 분석

20Mbyte 정리

20개부터 latency가높아지고있으며,50개부터급격히높아지고 있음

동일 조건 Proactor 보다 latency가 3000ms 높음하지만 실제 실험 시간이 훨씬 오래 걸림

(데이터 상으로표시는 안 됨)

Page 75: Proactor/Reactor Server io 성능 분석

정리하기

20개까지는괜찮은데, 50개 부터는 어떠한문제가 발생하는가?

• 평균적으로 50개부터 latency가급격히증가하는 상황이발생• latency가증가하며동시간처리량이 떨어지기 시작• 용량 처리가커지면커질 수록 20개까지도그영향이 미침(뒤쪽프로토콜)

그 원인은 무엇인가?

• Proactor의경우에는 Thread가직접 처리하지않지만, NIO(커널에서처리하는)에서처리하는한계에 도달하는지점이 20~50개이기 때문이라생각한다• Reactor는동기식으로 Thread가일일이처리하기때문에대기 시간이발생하기 때문이라생각한다.

그 외에도...

• Reactor 고용량 실험이 Proactor보다더 오래 걸리는이유?Thread가일일이받아 처리하기때문에모든 업무가줄을 서서대기하는 상태가됨게다가파일을 쓰는것은 커널을거쳐서 진행하는것이기때문에 IO가 일어나게하는동안 중간 동작이개입 될 수있다 생각

반면 Proactor는실제 처리는커널이하고 요청을받고 결과를돌려주는 것만 Thread가하기 때문에 대기 상태가최소가됨또한 커널에서처리하는상태에서바로 디스크 IO로 전이 되는과정에서중간 동작이없음

Page 76: Proactor/Reactor Server io 성능 분석

한계점

Jmeter 사용과본 PPT에서의수치에대한이야기

사실모든데이터를 Jmeter에서 보내야정확한 Throughput이 나온다(보낸 데이터량 / latency)

하지만본 실험에서사용한코드는서버내버퍼에서각용량을생성해파일에입력하는형태로실제 Throughput이라할수 없다.(단, 계획된값으로계산은가능하다)

Page 77: Proactor/Reactor Server io 성능 분석

Q & A