View
499
Download
7
Category
Preview:
DESCRIPTION
SW Architecture 과제
Citation preview
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
Recommended