페이지

글타래

2009년 6월 18일 목요일

Win32 IOCP를 따라잡을 Unix, Linux, *BSD계열의 방법은?

http://kldp.org/node/60222

정말 평소엔 낭비라 생각했던 Windows의 이벤트방식과 쓰레드의 결합이란게 엄청난 효율을 발휘하는 것을 보고 놀랐습니다.
이렇듯 국내 대부분이 아니라 거의 모든 온라인 게임회사의 서버는 Windows NT 계열로 IOCP를 이용한 서버입니다.
이렇게 멀티소켓 컨넥션 쓰레드 처리라는 단 하나의 부분이 Linux나 오픈소스 OS가 Windows 에 뒤지는 퍼포먼스 벤치마크 분야라고 볼수 있는데요.
어떻게 대안이나 따라잡을 방법은 현재 없는것일까요?
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

답변中
IOCP 와 프로그래밍 방식이 비슷한 것으로 따지자면RTS (Real Time Signal) 정도가 될 것 같네요. 이 또한 이벤트방식입니다. 물론 RTS 가 구현하기 복잡하긴 합니다만.
제 생각엔 IOCP 나 RTS 나 어차피 I/O 이벤트가발생하면 시그널 보내주는 건데, 이 효율이 얼마나 차이날지모르겠네요.
물론 구현해 본 경험에 따르면, IOCP 가 효율적이면서도쉽기도 하고, 파일 입출력 등도 같이 처리할 수 있어서 같은 기능을더 나은 방식으로 지원한다는 것은 인정합니다.하지만, 리눅스로 못하는 건 아니에요...

답변中

펜티엄 4 2.8기가 메모리 2기가 linux rhel4 update2 현재 동접 10082 명
입니다.
게임써버는 아니고 이미지써버입니다.트래픽 280메가쯤 나옵니다.

서버구성 기술은 epoll 입니다.
게다가 요즘 N 모사 광고써버도 epoll 로 돕니다.
그놈도 동접 몇만되는걸로 압니다 -_-;
IIS 가 동접 만개에서도 잘도나요? ( 제가 윈도우는 잘 몰라서 그럽니다 )

답변中

IOCP나 epoll이나 kqueue나 하는 것들에 대해서는 제가 보기에는 논의 대상으로삼는것은 옳지 않다고 봅니다. 실재로 성능 차이가 별로 없을 뿐 아니라 어느것이성능이 좋네 하는 것도 플랫폼의 특성을 최대로 이끌어 내는 것이 더 중요하기때문이죠.
ms-윈도우즈를 서버로 선택했다면 어쩔 수 없는 선택으로 IOCP를 사용해야 하고, 리눅스(Linux)를 서버로 선택했다면 epoll을 신중히 검토해야 하며, BSD계열을 사용한다면 kqueue를선택하는게 좋겠죠.
그리고 이 녀석들의 성능이 이제는 전체 성능에 그다지 영향을 미치지 않습니다.시스템 성능과 운영체제의 튜닝이 그만큼 좋아졌기 때문입니다.
제가 온라인게임에서 동시 접속이 4000이상 나오는 서버들을 별로 본 적이 없습니다.

댓글 1개:

  1. 그 쓰레드가 오래전꺼라 2009년 현재 기술과는 거리가 있는 내용이여서 전부 믿을건 못되고
    그동안 발전,LINUX계열에서도 요샌 다양한 방법이 있다!!
    뭐 그냥 Epoll이면 될듯 - 거의 대등하다고 하니..
    지양해야 될것은 1User 1Thread 방식도 고전방법이라는거.
    그나저나 윈도그가 딴건 다 뒤쳐져도 서버업계에서 IOCP만은 그 성능을 인정받은듯..

    답글삭제