Proactor/Reactor Server io 성능 분석

Post on 26-May-2015

504 views 7 download

description

SW Architecture 과제

Transcript of Proactor/Reactor Server io 성능 분석

131039 신동찬

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

실험 목표

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

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

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

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

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

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

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

Proactor

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

접속 : 1개

latency : 0 msThroughput : 917.4/sec

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

latency : 0 msThroughput : 393.7/sec

접속 : 3개

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

접속 : 5개

latency : 0 msThroughput : 568.8/sec

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

접속 : 20개

latency : 0 msThroughput : 1858.7/sec

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

접속 : 50개

latency : 4 msThroughput : 2893.5/sec

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

접속 : 100개

latency : 16 msThroughput : 2527.8/sec

512 byte 정리

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

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

접속 : 1개

latency : 0 msThroughput : 1087.0/sec

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

접속 : 3개

latency : 0 msThroughput : 393.2/sec

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

접속 : 5개

latency : 0 msThroughput : 573.4/sec

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

접속 : 20개

latency : 0 msThroughput : 1857.0/sec

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

접속 : 50개

latency : 4 msThroughput : 2612.3/sec

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

접속 : 100개

latency : 16 msThroughput : 2419.0/sec

3Kbyte 정리

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

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

접속 : 1개

latency : 2 msThroughput : 381.7/sec

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

접속 : 3개

latency : 2 msThroughput : 337.8/sec

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

접속 : 5개

latency : 3 msThroughput : 410.2/sec

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

접속 : 20개

latency : 25 msThroughput : 479.6/sec

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

접속 : 50개

latency : 113 msThroughput : 369.9/sec

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

접속 : 100개

latency : 246 msThroughput : 375.0/sec

200Kbyte 정리

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

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

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

접속 : 1개

latency : 30 msThroughput : 32.9/sec

접속 : 3개

latency : 72 msThroughput : 37.7/sec

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

접속 : 5개

latency : 135 msThroughput : 34.0/sec

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

접속 : 20개

latency : 563 msThroughput : 33.1/sec

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

접속 : 50개

latency : 1685 msThroughput : 28.7/sec

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

접속 : 100개

latency : 3254 msThroughput : 27.3/sec

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

2Mbyte 정리

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

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

접속 : 1개

latency : 246 msThroughput : 4.1/sec

접속 : 3개

latency : 959 msThroughput : 3.1/sec

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

접속 : 5개

latency : 1532 msThroughput : 2.9/sec

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

접속 : 20개

latency : 6613 msThroughput : 2.8/sec

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

접속 : 50개

latency : 16132 msThroughput : 2.9/sec

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

접속 : 100개

latency : 32580 msThroughput : 2.9/sec

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

20Mbyte 정리

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

Reactor

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

접속 : 1개

latency : 5 msThroughput : 110.3/sec

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

latency : 5 msThroughput : 102.1/sec

접속 : 3개

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

접속 : 5개

latency : 1 msThroughput : 296.6/sec

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

접속 : 20개

latency : 11 msThroughput : 596.3/sec

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

접속 : 50개

latency : 26 msThroughput : 737.8/sec

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

접속 : 100개

latency : 92 msThroughput : 694.0/sec

512 byte 정리

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

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

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

접속 : 1개

latency : 1 msThroughput : 515.5/sec

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

접속 : 3개

latency : 0 msThroughput : 388.6/sec

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

접속 : 5개

latency : 0 msThroughput : 542.9/sec

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

접속 : 20개

latency : 4 msThroughput : 1207.0/sec

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

접속 : 50개

latency : 13 msThroughput : 905.3/sec

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

접속 : 100개

latency : 40 msThroughput : 1359.6/sec

3Kbyte 정리

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

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

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

접속 : 1개

latency : 3 msThroughput : 253.8/sec

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

접속 : 3개

latency : 2 msThroughput : 328.9/sec

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

접속 : 5개

latency : 2 msThroughput : 483.1/sec

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

접속 : 20개

latency : 59 msThroughput : 253.3/sec

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

접속 : 50개

latency : 144 msThroughput : 296.6/sec

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

접속 : 100개

latency : 483 msThroughput : 191.6/sec

200Kbyte 정리

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

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

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

접속 : 1개

latency : 27 msThroughput : 36.3/sec

접속 : 3개

latency : 51 msThroughput : 46.1/sec

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

접속 : 5개

latency : 132 msThroughput : 34.8/sec

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

접속 : 20개

latency : 547 msThroughput : 34.1/sec

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

접속 : 50개

latency : 1625 msThroughput : 29.5/sec

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

접속 : 100개

latency : 3546 msThroughput : 27.2/sec

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

2Mbyte 정리

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

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

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

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

접속 : 1개

latency : 385 msThroughput : 2.6/sec

접속 : 3개

latency : 1093 msThroughput : 2.7/sec

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

접속 : 5개

latency : 1791 msThroughput : 2.5/sec

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

접속 : 20개

latency : 9403 msThroughput : 2.1/sec

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

접속 : 50개

latency : 19888 msThroughput : 2.5/sec

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

접속 : 100개

latency : 35306 msThroughput : 2.6/sec

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

20Mbyte 정리

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

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

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

정리하기

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

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

그 원인은 무엇인가?

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

그 외에도...

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

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

한계점

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

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

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

Q & A