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

kenny007one의 이미지

정말 평소엔 낭비라 생각했던 Windows의 이벤트방식과 쓰레드의 결합이란게 엄청난 효율을 발휘하는 것을 보고 놀랐습니다.

이렇듯 국내 대부분이 아니라 거의 모든 온라인 게임회사의 서버는 Windows NT 계열로 IOCP를 이용한 서버입니다.

이렇게 멀티소켓 컨넥션 쓰레드 처리라는 단 하나의 부분이 Linux나 오픈소스 OS가 Windows 에 뒤지는 퍼포먼스 벤치마크 분야라고 볼수 있는데요.

어떻게 대안이나 따라잡을 방법은 현재 없는것일까요?

kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

File attachments: 
첨부파일 크기
Image icon lighttpd-traffic-month.png5.93 KB
Image icon lighttpd-requests-month.png5.81 KB
다즐링의 이미지

펜티엄 4 2.8기가
메모리 2기가
linux rhel4 update2
현재 동접 10082 명

입니다.

게임써버는 아니고 이미지써버입니다.
트래픽 280메가쯤 나옵니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

cocas의 이미지

kenny007one wrote:
정말 평소엔 낭비라 생각했던 Windows의 이벤트방식과 쓰레드의 결합이란게 엄청난 효율을 발휘하는 것을 보고 놀랐습니다.

이렇듯 국내 대부분이 아니라 거의 모든 온라인 게임회사의 서버는 Windows NT 계열로 IOCP를 이용한 서버입니다.

처음 게임 서버들이 제작될 때는 성능 문제가 많았습니다. 그 시절에는 kqueue도 epoll도 없었을 시절이니까요. 하지만 현재는 성능이 주 문제가 아닙니다.

http://www.gpgstudy.com/forum/viewtopic.php?t=3942&postdays=0&postorder=asc&start=0

개발 환경의 편의성, 개발 관성이 게임 서버를 윈도로 결정하게 되는 가장 큰 요인으로 꼽히고 있습니다.

kenny007one wrote:

이렇게 멀티소켓 컨넥션 쓰레드 처리라는 단 하나의 부분이 Linux나 오픈소스 OS가 Windows 에 뒤지는 퍼포먼스 벤치마크 분야라고 볼수 있는데요.

어떻게 대안이나 따라잡을 방법은 현재 없는것일까요?
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

관련 자료를 보여주세요.

kenny007one의 이미지

다즐링 wrote:
펜티엄 4 2.8기가
메모리 2기가
linux rhel4 update2
현재 동접 10082 명

입니다.

게임써버는 아니고 이미지써버입니다.
트래픽 280메가쯤 나옵니다.

어떤기술로 서버를 구성한겁니까? 그냥 웹서버인거 같은데.. 그럼 그정도에서도 원할할수가 있지요..

체스맨의 이미지

IOCP 와 프로그래밍 방식이 비슷한 것으로 따지자면
RTS (Real Time Signal) 정도가 될 것 같네요. 이 또한 이벤트
방식입니다. 물론 RTS 가 구현하기 복잡하긴 합니다만.

제 생각엔 IOCP 나 RTS 나 어차피 I/O 이벤트가
발생하면 시그널 보내주는 건데, 이 효율이 얼마나 차이날지
모르겠네요.

물론 구현해 본 경험에 따르면, IOCP 가 효율적이면서도
쉽기도 하고, 파일 입출력 등도 같이 처리할 수 있어서 같은 기능을
더 나은 방식으로 지원한다는 것은 인정합니다.
하지만, 리눅스로 못하는 건 아니에요...

Orion Project : http://orionids.org

sangwoo의 이미지

kenny007one wrote:
<중략>
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

어떻게 검색하셨는지 저도 자료를 보고 싶습니다. 관심이 가네요. 부탁드립니다.

----
Let's shut up and code.

다즐링의 이미지

epoll 입니다.

게다가 요즘 N 모사 광고써버도 epoll 로 돕니다.

그놈도 동접 몇만되는걸로 압니다 -_-;

IIS 가 동접 만개에서도 잘도나요? ( 제가 윈도우는 잘 몰라서 그럽니다 )

kenny007one wrote:
다즐링 wrote:
펜티엄 4 2.8기가
메모리 2기가
linux rhel4 update2
현재 동접 10082 명

입니다.

게임써버는 아니고 이미지써버입니다.
트래픽 280메가쯤 나옵니다.

어떤기술로 서버를 구성한겁니까? 그냥 웹서버인거 같은데.. 그럼 그정도에서도 원할할수가 있지요..

------------------------------------------------------------------------------------------------
Life is in 다즐링

kenny007one의 이미지

링크의 내용과 얘기하신건 이해가 안됩니다.

그럼 단순히 그 돈많은 NC소프트가 사람을 못구해 IOCP로 서버를 몇백대를 계속 구성해온 걸까요?

돈만있으면 해외에서라도 사람은 옵니다. 게리엇형제를 데려온것처럼 말입니다.

국내뿐 아니라 해외에서도 온라인게임서버는 리눅스도 있긴한데 역시나 대부분은 윈도우즈입니다.

WoW 역시도 마찬가지고요. 사람을 못구한다느니 하는건 기업입장에선 성능에 비하면 크게 고려대상이 아닙니다.

cocas wrote:
kenny007one wrote:
정말 평소엔 낭비라 생각했던 Windows의 이벤트방식과 쓰레드의 결합이란게 엄청난 효율을 발휘하는 것을 보고 놀랐습니다.

이렇듯 국내 대부분이 아니라 거의 모든 온라인 게임회사의 서버는 Windows NT 계열로 IOCP를 이용한 서버입니다.

처음 게임 서버들이 제작될 때는 성능 문제가 많았습니다. 그 시절에는 kqueue도 epoll도 없었을 시절이니까요. 하지만 현재는 성능이 주 문제가 아닙니다.

http://www.gpgstudy.com/forum/viewtopic.php?t=3942&postdays=0&postorder=asc&start=0

개발 환경의 편의성, 개발 관성이 게임 서버를 윈도로 결정하게 되는 가장 큰 요인으로 꼽히고 있습니다.

kenny007one wrote:

이렇게 멀티소켓 컨넥션 쓰레드 처리라는 단 하나의 부분이 Linux나 오픈소스 OS가 Windows 에 뒤지는 퍼포먼스 벤치마크 분야라고 볼수 있는데요.

어떻게 대안이나 따라잡을 방법은 현재 없는것일까요?
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

관련 자료를 보여주세요.

wish의 이미지

kenny007one wrote:
링크의 내용과 얘기하신건 이해가 안됩니다.

그럼 단순히 그 돈많은 NC소프트가 사람을 못구해 IOCP로 서버를 몇백대를 계속 구성해온 걸까요?

돈만있으면 해외에서라도 사람은 옵니다. 게리엇형제를 데려온것처럼 말입니다.

국내뿐 아니라 해외에서도 온라인게임서버는 리눅스도 있긴한데 역시나 대부분은 윈도우즈입니다.

WoW 역시도 마찬가지고요. 사람을 못구한다느니 하는건 기업입장에선 성능에 비하면 크게 고려대상이 아닙니다.

글쎄요. 돈이 아무리 많더라도 못구하는 사람은 못구하죠. 예를 들어서 IOCP 할 줄 아는 프로그래머 100명 고용하는 것과 epoll 제대로 구현할 줄 아는 프로그래머 100명 고용하는 것중 어느 편이 사람구하기가 편할까요? 그 단위가 1000명으로 늘어난다면 더더욱 편차는 카지겠죠?

그리고 성능에 비해서 사람을 못구한다느니 하는 건 기업 입장에서는 고려 대상이 아니라고 하셨는데, 정말로 그렇게 성능이 중요하다면 구글처럼 OS 를 커스터미제이션 해서 싼 하드웨어로 분산 처리를 하는 법도 있을 것이고, 정말 네트워크 커넥션에 특화된 OS 를 새로 구성하는 방법도 있겠지만, 그렇게 못하는 이유는 그럴만한 인력이나 자금력을 구하기 힘들기 때문입니다. 그래서 보편화된 솔루션을 택하는 것이라고 생각합니다.

그리고 그런식으로 어떤 게임이 윈도우더라~ 는 식으로 할 거 같으면, n 모사 (nc, nhn 은 아닙니다) 의 온라인 게임은 솔라리스 위에서 돌고 있는 것으로 알고 있습니다. ;; 그리 작은 규모도 아니구요 ;;

cocas의 이미지

돈 많은 NC 소프트가 굳이 라이센스비용 + 기존 인력 + 축적된 윈도 서버 기술로 해결할 수 있는 걸 새로운 인력충원 + 바닥부터 쌓아올려야 할 비 윈도 서버 기술로 굳이 할 이유가 있을 지 모르겠습니다. 물론 저것들 외에도 고려해야 할 가격요소는 많고 그게 비 윈도쪽이 이겼을 때는 해볼 만 하겠죠.

성능은 하드웨어로도 얼마든지 극복할 수 있습니다. NC 입장에서는 신규 인력 고용하고 숙련시키고 삽질하느니 차라리 기존의 윈도 기반에서 하드웨어 좀 더 좋은 거 사는 게 훨씬 싸게 먹히는 장사입니다.

기업 입장에서는 약간의 돈으로 뽑을 수 있는 성능보다 그걸 유지, 관리, 개발할 인력을 구하는 게 더 큰 문제입니다. OS 선택이 단순한 성능 문제가 아닙니다.

kenny007one wrote:
링크의 내용과 얘기하신건 이해가 안됩니다.

그럼 단순히 그 돈많은 NC소프트가 사람을 못구해 IOCP로 서버를 몇백대를 계속 구성해온 걸까요?

돈만있으면 해외에서라도 사람은 옵니다. 게리엇형제를 데려온것처럼 말입니다.

국내뿐 아니라 해외에서도 온라인게임서버는 리눅스도 있긴한데 역시나 대부분은 윈도우즈입니다.

WoW 역시도 마찬가지고요. 사람을 못구한다느니 하는건 기업입장에선 성능에 비하면 크게 고려대상이 아닙니다.

cocas wrote:
kenny007one wrote:
정말 평소엔 낭비라 생각했던 Windows의 이벤트방식과 쓰레드의 결합이란게 엄청난 효율을 발휘하는 것을 보고 놀랐습니다.

이렇듯 국내 대부분이 아니라 거의 모든 온라인 게임회사의 서버는 Windows NT 계열로 IOCP를 이용한 서버입니다.

처음 게임 서버들이 제작될 때는 성능 문제가 많았습니다. 그 시절에는 kqueue도 epoll도 없었을 시절이니까요. 하지만 현재는 성능이 주 문제가 아닙니다.

http://www.gpgstudy.com/forum/viewtopic.php?t=3942&postdays=0&postorder=asc&start=0

개발 환경의 편의성, 개발 관성이 게임 서버를 윈도로 결정하게 되는 가장 큰 요인으로 꼽히고 있습니다.

kenny007one wrote:

이렇게 멀티소켓 컨넥션 쓰레드 처리라는 단 하나의 부분이 Linux나 오픈소스 OS가 Windows 에 뒤지는 퍼포먼스 벤치마크 분야라고 볼수 있는데요.

어떻게 대안이나 따라잡을 방법은 현재 없는것일까요?
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

관련 자료를 보여주세요.

serialx의 이미지

그리고 관련 자료좀 보여주세요.

저는 아무리 찾아봐도 없던데..

궁금해 죽겠습니다. :)

제가 찾은 게시물 내용들을 인용합니다.

Quote:
의외로 서버 프로그래머 중에서 정말 난감하게 프로그래밍 하는 사람들이 많습니다.
동접 500이래도 죽지않고 돌아간다면 오히려 칭찬을 해 줘야 되는 경우도 생깁니다.
게임 회사에서도 사람 좀 몰리면 그냥 서버 개수를 늘리지.. 라고 생각하는 경우가
많죠. 수치에 연연하는 사람은 개발자들 뿐... 서버 개발 및 유비 비용을 5분의 1로
줄여줄 수 있다고 해도 시큰둥해 하는 사람들 많이 봤습니다.

서버측 디자인을 하면서 무분별한 OOP를 도입해서 서로 얽히게 만들어 놓는 경우도
허다 합니다. 코드 보면 정말 난감 이라는 말이 실감나죠. 심지어 컴파일 자체가
일이 되는 경우도 생깁니다. 그런 경우 서버 설명해 달라고 하면 만든 사람도 난감해
합니다.

다시 말씀드리지만 절대로 서버의 퍼포먼스를 떨어뜨리는 것은 소켓 프로그래밍이 아닌
경우가 훨씬 더 많습니다. 아니 거의 대부분이라고 하는 것이 맞습니다. 하지만 보통
사람들은 원인을 여기서 찾으려고 합니다. 이쪽에 CPU타임이 많이 돌아가게 짠다면
그 프로그램은 많이 잘못된 경우죠. 동훈님이 쓴것처럼 기본만 지켜도 1000~2000 쯤은
거뜬하게 나오는 것을 그렇지 않게 하는 사람 정말 많죠. 소스를 암호로 바꿔 버려서
나중에 어떤 부분 때문에 퍼포먼스가 안나오는지 찾으려면 새로 만드는게 나은 경우도
생길 수 있습니다.

Quote:
그 메모리 재할당 문제 때문에 여러가지 다른 방법을 강구해야 하겠죠.
더불어 버퍼 오버플로 같은 녀석도 처리를 해야 하구요.

IOCP나 epoll이나 kqueue나 하는 것들에 대해서는 제가 보기에는 논의 대상으로
삼는것은 옳지 않다고 봅니다. 실재로 성능 차이가 별로 없을 뿐 아니라 어느것이
성능이 좋네 하는 것도 플랫폼의 특성을 최대로 이끌어 내는 것이 더 중요하기
때문이죠.

윈도를 서버로 선택했다면 어쩔 수 없는 선택으로 IOCP를 사용해야 하고, 리눅스를
버로 선택했다면 epoll을 신중히 검토해야 하며, BSD계열을 사용한다면 kqueue를
선택하는게 좋겠죠.

그리고 이 녀석들의 성능이 이제는 전체 성능에 그다지 영향을 미치지 않습니다.
시스템 성능과 운영체제의 튜닝이 그만큼 좋아졌기 때문입니다.

제가 온라인게임에서 동시 접속이 4000이상 나오는 서버들을 별로 본 적이 없습니다.
모 게임의 경우에는 IOCP를 쓰면서도 동접 500을 간신히 찍을 정도기도 하구요. 제가
기초를 만들어준 서버로 예전 회사에서 동접 750정도 밖에 내지 못한다는 소리를
들었죠. C++에서 지원하는 iostream이라는 녀석을 마음껏 사용한 결과가 아닐까
싶네요.

똑같은 서버 엔진으로 저는 8000을 찍었습니다. 그때 사용한 엔진이 성능이 안좋다는
select/poll을 사용한 녀석입니다. 시연을 해 주기 전까지는 못믿는 사람이 태반
이더군요. 이 게시판의 저 밑에 접속과 성능에 대해 테스트 한 결과가 있을 겁니다.
물론 완전히 객관적인 관점에서 테스트 한 것은 아니지만 대충 볼만을 할 겁니다.

결국 서버 성능은 서버를 구축하는 개발자의 디자인에 따라서 달라지는것이 맞다고
봅니다. 그리고 서버를 튜닝할 줄 아는 사람이 있다면 금상첨화 겠군요.

실제 게임 서버 제작자 분들의 글을 인용합니다. (그림자나라님 외..)

출처 : http://delmadang.com/ 게임제작 게시판

preisner의 이미지

음...
결국 문제는 사람이라는 거군요..

serialx wrote:
그리고 관련 자료좀 보여주세요.

저는 아무리 찾아봐도 없던데..

궁금해 죽겠습니다. :)

제가 찾은 게시물 내용들을 인용합니다.

Quote:
의외로 서버 프로그래머 중에서 정말 난감하게 프로그래밍 하는 사람들이 많습니다.
동접 500이래도 죽지않고 돌아간다면 오히려 칭찬을 해 줘야 되는 경우도 생깁니다.
게임 회사에서도 사람 좀 몰리면 그냥 서버 개수를 늘리지.. 라고 생각하는 경우가
많죠. 수치에 연연하는 사람은 개발자들 뿐... 서버 개발 및 유비 비용을 5분의 1로
줄여줄 수 있다고 해도 시큰둥해 하는 사람들 많이 봤습니다.

서버측 디자인을 하면서 무분별한 OOP를 도입해서 서로 얽히게 만들어 놓는 경우도
허다 합니다. 코드 보면 정말 난감 이라는 말이 실감나죠. 심지어 컴파일 자체가
일이 되는 경우도 생깁니다. 그런 경우 서버 설명해 달라고 하면 만든 사람도 난감해
합니다.

다시 말씀드리지만 절대로 서버의 퍼포먼스를 떨어뜨리는 것은 소켓 프로그래밍이 아닌
경우가 훨씬 더 많습니다. 아니 거의 대부분이라고 하는 것이 맞습니다. 하지만 보통
사람들은 원인을 여기서 찾으려고 합니다. 이쪽에 CPU타임이 많이 돌아가게 짠다면
그 프로그램은 많이 잘못된 경우죠. 동훈님이 쓴것처럼 기본만 지켜도 1000~2000 쯤은
거뜬하게 나오는 것을 그렇지 않게 하는 사람 정말 많죠. 소스를 암호로 바꿔 버려서
나중에 어떤 부분 때문에 퍼포먼스가 안나오는지 찾으려면 새로 만드는게 나은 경우도
생길 수 있습니다.

Quote:
그 메모리 재할당 문제 때문에 여러가지 다른 방법을 강구해야 하겠죠.
더불어 버퍼 오버플로 같은 녀석도 처리를 해야 하구요.

IOCP나 epoll이나 kqueue나 하는 것들에 대해서는 제가 보기에는 논의 대상으로
삼는것은 옳지 않다고 봅니다. 실재로 성능 차이가 별로 없을 뿐 아니라 어느것이
성능이 좋네 하는 것도 플랫폼의 특성을 최대로 이끌어 내는 것이 더 중요하기
때문이죠.

윈도를 서버로 선택했다면 어쩔 수 없는 선택으로 IOCP를 사용해야 하고, 리눅스를
버로 선택했다면 epoll을 신중히 검토해야 하며, BSD계열을 사용한다면 kqueue를
선택하는게 좋겠죠.

그리고 이 녀석들의 성능이 이제는 전체 성능에 그다지 영향을 미치지 않습니다.
시스템 성능과 운영체제의 튜닝이 그만큼 좋아졌기 때문입니다.

제가 온라인게임에서 동시 접속이 4000이상 나오는 서버들을 별로 본 적이 없습니다.
모 게임의 경우에는 IOCP를 쓰면서도 동접 500을 간신히 찍을 정도기도 하구요. 제가
기초를 만들어준 서버로 예전 회사에서 동접 750정도 밖에 내지 못한다는 소리를
들었죠. C++에서 지원하는 iostream이라는 녀석을 마음껏 사용한 결과가 아닐까
싶네요.

똑같은 서버 엔진으로 저는 8000을 찍었습니다. 그때 사용한 엔진이 성능이 안좋다는
select/poll을 사용한 녀석입니다. 시연을 해 주기 전까지는 못믿는 사람이 태반
이더군요. 이 게시판의 저 밑에 접속과 성능에 대해 테스트 한 결과가 있을 겁니다.
물론 완전히 객관적인 관점에서 테스트 한 것은 아니지만 대충 볼만을 할 겁니다.

결국 서버 성능은 서버를 구축하는 개발자의 디자인에 따라서 달라지는것이 맞다고
봅니다. 그리고 서버를 튜닝할 줄 아는 사람이 있다면 금상첨화 겠군요.

실제 게임 서버 제작자 분들의 글을 인용합니다. (그림자나라님 외..)

출처 : http://delmadang.com/ 게임제작 게시판

ixevexi의 이미지

off - topic이라 죄송한데

epoll에 대해 궁금한게 있습니다.
epoll이 poll에 대해 어떠한 점이 빠른 것입니까
외부로 들어난 api를 봤을때
poll은 모든 fd를 max_fd까지 검색해야하는것 (보통 linux에선 1024가
파일 디스크립터 맥스로 잡혀있으니 1024번 검색)인데
epoll은 result에 event 구조체를 하나씩 까보면서 검색을 하지 않고
이벤트가 일어난 부분만 처리할 수 있는 차이점 밖에 모르겠습니다.

과연 1024번 검색하는 루틴이 빠진것 만으로 그렇게 엄청난 성능 향상
(joinc wiki를 보면 간단한 에코서버에서 동접이 늘어나니까 말도 안되는
성능향상이 있더라구요) 이 일어 날 수 있는지 궁금합니다.
특히 동접 사용자가 많아지면 많아질수록 검색시 fail이 아닌 active한
descriptor들이 많아 오히려 오버헤드가 줄어들어 별 차이가 없을 거 같은데요.

아니면 그 api안에 숨겨진 다른 기술이 있나요?

PS. 여기에 질문을 하는게 좀 걸리므로 좋은 답변을 위해서 새로운
쓰레드를 여는게 낫나요?

C++, 그리고 C++....
죽어도 C++

kenny007one의 이미지

ixevexi wrote:
off - topic이라 죄송한데

epoll에 대해 궁금한게 있습니다.
epoll이 poll에 대해 어떠한 점이 빠른 것입니까
외부로 들어난 api를 봤을때
poll은 모든 fd를 max_fd까지 검색해야하는것 (보통 linux에선 1024가
파일 디스크립터 맥스로 잡혀있으니 1024번 검색)인데
epoll은 result에 event 구조체를 하나씩 까보면서 검색을 하지 않고
이벤트가 일어난 부분만 처리할 수 있는 차이점 밖에 모르겠습니다.

과연 1024번 검색하는 루틴이 빠진것 만으로 그렇게 엄청난 성능 향상
(joinc wiki를 보면 간단한 에코서버에서 동접이 늘어나니까 말도 안되는
성능향상이 있더라구요) 이 일어 날 수 있는지 궁금합니다.
특히 동접 사용자가 많아지면 많아질수록 검색시 fail이 아닌 active한
descriptor들이 많아 오히려 오버헤드가 줄어들어 별 차이가 없을 거 같은데요.

아니면 그 api안에 숨겨진 다른 기술이 있나요?

PS. 여기에 질문을 하는게 좀 걸리므로 좋은 답변을 위해서 새로운
쓰레드를 여는게 낫나요?

단순 에코서버라 그렇지 좀 더 복잡한 서버의 경우는 그리 성능향상폭이 크진 않습니다.

특히 컨넥션이 짧은 시간안에 작은 데이터들이 자주 보내고 받고 하는 게임 서버의 경우는 거의 기존 select poll과 비슷하다고 온라인게임서버 개발하는 제 친구가 그러더군요.

그 자료는 그쪽 회사 기밀이라 밝힐수가 없는게 안타깝습니다만,
거의 모든 Unix(Linux, 솔라리스, AIX, HP-UX, FreeBSD등) 을 비교하고 분석한 결과라고 합니다.

즉, 윈도우즈의 이벤트 기반의 쓰레드로 처리하는 IOCP만이 빨리 처리해서 딜레이를 없앨수 있다고 합니다. 솔라리스의 쓰레드만이 가장 근접하게 처리했다던데..

근데 여기 계신분들은 무조건적으로 Linux도 된다된다 하는쪽으로 흐르니 냉철한 비교와 시각이 없어져 편향적으로 흐르는거 같아 안타깝습니다.

윈도우즈의 커널 구조는 생각보다 Linux보다 우월한 구조도 있습니다.

cocas의 이미지

kenny007one wrote:
ixevexi wrote:
off - topic이라 죄송한데

epoll에 대해 궁금한게 있습니다.
epoll이 poll에 대해 어떠한 점이 빠른 것입니까
외부로 들어난 api를 봤을때
poll은 모든 fd를 max_fd까지 검색해야하는것 (보통 linux에선 1024가
파일 디스크립터 맥스로 잡혀있으니 1024번 검색)인데
epoll은 result에 event 구조체를 하나씩 까보면서 검색을 하지 않고
이벤트가 일어난 부분만 처리할 수 있는 차이점 밖에 모르겠습니다.

과연 1024번 검색하는 루틴이 빠진것 만으로 그렇게 엄청난 성능 향상
(joinc wiki를 보면 간단한 에코서버에서 동접이 늘어나니까 말도 안되는
성능향상이 있더라구요) 이 일어 날 수 있는지 궁금합니다.
특히 동접 사용자가 많아지면 많아질수록 검색시 fail이 아닌 active한
descriptor들이 많아 오히려 오버헤드가 줄어들어 별 차이가 없을 거 같은데요.

아니면 그 api안에 숨겨진 다른 기술이 있나요?

PS. 여기에 질문을 하는게 좀 걸리므로 좋은 답변을 위해서 새로운
쓰레드를 여는게 낫나요?

단순 에코서버라 그렇지 좀 더 복잡한 서버의 경우는 그리 성능향상폭이 크진 않습니다.

특히 컨넥션이 짧은 시간안에 작은 데이터들이 자주 보내고 받고 하는 게임 서버의 경우는 거의 기존 select poll과 비슷하다고 온라인게임서버 개발하는 제 친구가 그러더군요.

그 자료는 그쪽 회사 기밀이라 밝힐수가 없는게 안타깝습니다만,
거의 모든 Unix(Linux, 솔라리스, AIX, HP-UX, FreeBSD등) 을 비교하고 분석한 결과라고 합니다.

즉, 윈도우즈의 이벤트 기반의 쓰레드로 처리하는 IOCP만이 빨리 처리해서 딜레이를 없앨수 있다고 합니다. 솔라리스의 쓰레드만이 가장 근접하게 처리했다던데..

근데 여기 계신분들은 무조건적으로 Linux도 된다된다 하는쪽으로 흐르니 냉철한 비교와 시각이 없어져 편향적으로 흐르는거 같아 안타깝습니다.

윈도우즈의 커널 구조는 생각보다 Linux보다 우월한 구조도 있습니다.

제가 아는 선배는 같은 조사 결과 비슷비슷한 결과를 내서 라이센스비도 아낄꼄 '리눅스로 갑시다' 라고 했더니 '니가 혼자 개발할 수 있냐? 아니면 같은 가격에 개발자 쓸 수 있냐? 아니면 기존 인력 훈련 시킬 수 있냐?' 라는 물음에 답을 하지 못하고 좌절했습니다. 안타깝게도 이 조사 결과 역시 비공개입니다.

카더라 하는 건 저나 kenny007one 님이나 마찬가지입니다. 뭔가 납득할 수 있을만한 자료를 보여 주셔야 편향된 시각을 바로잡거나 하지 않겠습니까.

kasi의 이미지

학생일때는 joinc에 들락날락 많이 했었는데

한동안 잊고 있던 joinc 다시 한번 방문해봐야겠네요..ㅎ

옛날 생각이 나서 왠지 정겹네요

serialx의 이미지

Quote:
근데 여기 계신분들은 무조건적으로 Linux도 된다된다 하는쪽으로 흐르니 냉철한 비교와 시각이 없어져 편향적으로 흐르는거 같아 안타깝습니다.

답변할만한 충분한 질문을 답변을 안해주시면서 단순히 편향된 시각을 가졌다.. 라고 평가하시는군요.

기밀이라구요? 또 모르지요. 그런식으로 나오시면 "epoll 이나 kqueue 를 제대로 알지도 못하고 테스트한 사람이 대충 짜보구 성능 안나온다고 치부해 버릴지도." -> 이런식으로 나오게 됩니다.

제가 본 게시물 중에선 온라인 게임 실 테스트에서 리눅스 poll 기능만으로도 동접 5000+@ 에 CPU 점유율 20% 내외를 기록했다는 분도 있습니다.

애초에 편향된 시각으로 자신의 단편적인 정보원을 너무 믿지는 마십시요. 자신과 다른 시각을 가진 사람들을 일방적으로 매도하지는 더더욱 마시구요..

ydhoney의 이미지

kenny007one wrote:
ixevexi wrote:
off - topic이라 죄송한데

epoll에 대해 궁금한게 있습니다.
epoll이 poll에 대해 어떠한 점이 빠른 것입니까
외부로 들어난 api를 봤을때
poll은 모든 fd를 max_fd까지 검색해야하는것 (보통 linux에선 1024가
파일 디스크립터 맥스로 잡혀있으니 1024번 검색)인데
epoll은 result에 event 구조체를 하나씩 까보면서 검색을 하지 않고
이벤트가 일어난 부분만 처리할 수 있는 차이점 밖에 모르겠습니다.

과연 1024번 검색하는 루틴이 빠진것 만으로 그렇게 엄청난 성능 향상
(joinc wiki를 보면 간단한 에코서버에서 동접이 늘어나니까 말도 안되는
성능향상이 있더라구요) 이 일어 날 수 있는지 궁금합니다.
특히 동접 사용자가 많아지면 많아질수록 검색시 fail이 아닌 active한
descriptor들이 많아 오히려 오버헤드가 줄어들어 별 차이가 없을 거 같은데요.

아니면 그 api안에 숨겨진 다른 기술이 있나요?

PS. 여기에 질문을 하는게 좀 걸리므로 좋은 답변을 위해서 새로운
쓰레드를 여는게 낫나요?

단순 에코서버라 그렇지 좀 더 복잡한 서버의 경우는 그리 성능향상폭이 크진 않습니다.

특히 컨넥션이 짧은 시간안에 작은 데이터들이 자주 보내고 받고 하는 게임 서버의 경우는 거의 기존 select poll과 비슷하다고 온라인게임서버 개발하는 제 친구가 그러더군요.

그 자료는 그쪽 회사 기밀이라 밝힐수가 없는게 안타깝습니다만,
거의 모든 Unix(Linux, 솔라리스, AIX, HP-UX, FreeBSD등) 을 비교하고 분석한 결과라고 합니다.

즉, 윈도우즈의 이벤트 기반의 쓰레드로 처리하는 IOCP만이 빨리 처리해서 딜레이를 없앨수 있다고 합니다. 솔라리스의 쓰레드만이 가장 근접하게 처리했다던데..

근데 여기 계신분들은 무조건적으로 Linux도 된다된다 하는쪽으로 흐르니 냉철한 비교와 시각이 없어져 편향적으로 흐르는거 같아 안타깝습니다.

윈도우즈의 커널 구조는 생각보다 Linux보다 우월한 구조도 있습니다.

직접 해보고 말씀하십시오.

회사의 결과치는 회사의 결과치입니다.

직접 써보지도 않고 어디어디가 그랬다더라 해봐야 "카더라"밖에 안됩니다.

poll/epoll 안써보고 "카더라" 하는것으로밖에는 안보이는군요.

카더라 아닌 실제로 말씀하시려면 적어도 HP-UX, Solaris, Linux(RHEL, SLES), BSD 정도에서 관련 기능을 써보고 윈도우가 더 빠르더라 하고 말씀하시면 좀 써봤구나 하고 윈도우가 좋다고 말씀드리겠습니다.

참고로 저는 윈도우만 빼고 제가 위에서 언급한 OS상에서는 다 써봤습니다. 덕분에 윈도우가 얼마나 빠른지를 모르겠네요.

Tony의 이미지

select, poll은 iocp보다 확실히 느립니다. 리눅이라면 epoll이나 rt_signal, 솔라라면 /dev/poll 정도는 되어야 비교가 가능...

foo의 이미지

serialx wrote:
Quote:
근데 여기 계신분들은 무조건적으로 Linux도 된다된다 하는쪽으로 흐르니 냉철한 비교와 시각이 없어져 편향적으로 흐르는거 같아 안타깝습니다.

답변할만한 충분한 질문을 답변을 안해주시면서 단순히 편향된 시각을 가졌다.. 라고 평가하시는군요.

기밀이라구요? 또 모르지요. 그런식으로 나오시면 "epoll 이나 kqueue 를 제대로 알지도 못하고 테스트한 사람이 대충 짜보구 성능 안나온다고 치부해 버릴지도." -> 이런식으로 나오게 됩니다.

제가 본 게시물 중에선 온라인 게임 실 테스트에서 리눅스 poll 기능만으로도 동접 5000+@ 에 CPU 점유율 20% 내외를 기록했다는 분도 있습니다.

애초에 편향된 시각으로 자신의 단편적인 정보원을 너무 믿지는 마십시요. 더더욱이 자신과 다른 시각을 가진 사람들을 일방적으로 매도하지는 더더욱 마시구요..


동의~

요즘들어 게시판 활성화에 기여하시는 kenny007one님의 활동에 격려 반 우려반 하자면,

자신이 한것을 믿고 다른사람이 한 것에 대해 믿지 않는것은 실무에는 비교적 좋은(?) 습관임에 분명합니다만, 게시판에 글 올리실때는 자신이 내린 결론이라고 할지라도 너무 과신하고 글을 올리지 마시길.

그런식으로 쉽게 일반화 해서 내린 결론을 스스로 고착화 하시면 나중에 그 함정에 스스로 빠지게 됩니다. 게다가 일반적인 상황이 아닌, 미션 critical한 상황에서, 리눅스라는 넘은 몇개월전에 최악이었던 퍼포먼스가 엄청 좋아진다거나, 몇개월전에 엄청 좋았는데 갑자기 다른 곳에 발목잡히거나 하는 경우도 종종 있기 때문에, 벤치마크라는 그 특성상 (벤치마크가 모든 변수를 제대로 고려해내기란 쉽지 않죠) 정도껏 믿어야 합니다. ^^;;

그리고 다른 분들이 내린 결론을 존중해주는 것이 또한 게시판이 기본 道이기도 하니 불필요한 잡음이나 자존심 세우기 보다 "내가 보기엔 이러한데 너희들은 어떠니?"라는 식으로 가볍게 대화하시길...

달구지의 이미지

Quote:
"내가 보기엔 이러한데 너희들은 어떠니?"라는 식으로 가볍게 대화하시길...

오랜만에 참 좋은 댓글을 보네요.

foo wrote:
동의~

요즘들어 게시판 활성화에 기여하시는 kenny007one님의 활동에 격려 반 우려반 하자면,

자신이 한것을 믿고 다른사람이 한 것에 대해 믿지 않는것은 실무에는 비교적 좋은(?) 습관임에 분명합니다만, 게시판에 글 올리실때는 자신이 내린 결론이라고 할지라도 너무 과신하고 글을 올리지 마시길.

그런식으로 쉽게 일반화 해서 내린 결론을 스스로 고착화 하시면 나중에 그 함정에 스스로 빠지게 됩니다. 게다가 일반적인 상황이 아닌, 미션 critical한 상황에서, 리눅스라는 넘은 몇개월전에 최악이었던 퍼포먼스가 엄청 좋아진다거나, 몇개월전에 엄청 좋았는데 갑자기 다른 곳에 발목잡히거나 하는 경우도 종종 있기 때문에, 벤치마크라는 그 특성상 (벤치마크가 모든 변수를 제대로 고려해내기란 쉽지 않죠) 정도껏 믿어야 합니다. ^^;;

그리고 다른 분들이 내린 결론을 존중해주는 것이 또한 게시판이 기본 道이기도 하니 불필요한 잡음이나 자존심 세우기 보다 "내가 보기엔 이러한데 너희들은 어떠니?"라는 식으로 가볍게 대화하시길...

voljin의 이미지

왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

1day1의 이미지

voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

그런데, NT(윈도우) 쪽이 개발하기 용이한/빠른(?) 이유가 무엇인가요?
개발자료가 많다? 개발하는 사람들이 많다? 개발툴이 잘 되어 있다?

어떤 이유인가요?(몰라서 여쭙는 것입니다.)

F/OSS 가 함께하길..

정태영의 이미지

1day1 wrote:
voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

그런데, NT(윈도우) 쪽이 개발하기 용이한/빠른(?) 이유가 무엇인가요?
개발자료가 많다? 개발하는 사람들이 많다? 개발툴이 잘 되어 있다?

어떤 이유인가요?(몰라서 여쭙는 것입니다.)

윈도우 개발자 수가 훨씬 많거든요 ... 거기다가 게임회사 같은 곳이라면 따로 unix 개발자들을 구할 필요 없이 데리고 있는 직원을 서버쪽으로 돌리면 되니까요

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

다즐링의 이미지

정말궁금해서 그런데..

어떤일이셧는지 구체적으로 이야기 해주실수 있나요?

voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

------------------------------------------------------------------------------------------------
Life is in 다즐링

cocas의 이미지

voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

voljin님. 반대로 NT로 했다가 돈은 돈대로 더 먹고 Linux보다 느리게 처리하는 회사도 있습니다.

'숙련된 리눅스 엔지니어가 별로 없고 비싸서 상대적으로 수준 낮은 엔지니어를 썼더니 윈도보다 성능이 안 나왔더라. '도 아니고 '이것저것 다 없이 NT가 리눅스보다 일처리 잘하더라.' 하는 건 전혀 의미가 없습니다.

'성능'을 끌어올리기 위한 숙련된 인력이 부족한 건 맞습니다. 인력 구하기 힘든것도 그렇고요. 구인/구직을 봐도 윈도 인력의 수요, 공급이 더 많지요. 그러니 실제 회사 입장에선 리눅스 성능이 안나온다고 생각하게 되고요. 하지만 kenny007one 님이 주장하시는대로 전반적이건 어느 특정한 한 분야가 되었건 '리눅스가 NT보다 성능이 개차반이라 안 쓰는거다.' 그건 아니라는겁니다.

ddoman의 이미지

근데 왜 벤치마크 결과나 구체적인 경험담을 한분도 말씀하지않으시는거죠? :shock:

예전에 윈도로 할껄 리눅스로 해서 곤란했다 정도의 경험담이 아니라 좀 더 구체적이고 기술적인 경험담과 토론이 되었으면 좋겠네요.

그리고 제가 보기에 의견이 엇갈리는 부분은

리눅스가 윈도우보다 좋다 vs 아니다 윈도우가 더 좋다

가 아니라
윈도 iocp을 따라올 대안이 linux,unix에는 없다 vs 충분히 있다( 리눅스가 더 좋다가 아닌! )

인것 같습니다.
답글을 다실 때 리눅스가 더 좋다고 주장한 답글이 많다라고 오해하셔서 리눅스 vs 윈도우라는 주제랑 전혀상관없는 방향으로 흘러가지않았음 좋겠네요.

저도 리눅스쪽에서만 길진않지만 몇년 네트웍 데몬 개발을 해보면서 느끼는건 항상 병목은 서버구조가 아니다라는 생각을 해왔는데 ( 물론 어이없이 빈번한 접속구조에 fork를 쓴다던지 애초에 잘못된 구조 설계를 제외하고 )

예시를 정말 듣고싶네요. 궁금합니다.
아님 누가 해봤는데 몇%정도의 성능향상이 있다더라 식의 벤치마크가 아닌

적어도 벤치마크라면 비교대상의 테스트조건과 테스트데이터
입력데이터등에 대해 표시되어있는 벤치마크 데이터라고 할만한 자료를 보고 싶네요.

가령 동시에 100번의 접속을 했을때의 latency에 대한 그래프라던지 그런식으로 말이죠

kenny007one의 이미지

예 ddoman님의 말씀이 맞습니다.

저는 리눅스가 모든면에서 윈도우즈보다 후지다라는게 아니라,

IOCP와 epoll과 같은 대체 가능한 기술의 비교를 하는겁니다.

지금까지 저한테 자료를 공개하라는데 그건 다른분도 마찬가지 아닙니까?

ddoman의 이미지

kenny007one wrote:

지금까지 저한테 자료를 공개하라는데 그건 다른분도 마찬가지 아닙니까?

그거야 그렇지만
보통 토론을 처음 이끌어내신분이 자신의 주장에 대해
먼저 근거를 제시하는게 토론을 좋은 방향으로 이끌어 갑니다.

대뜸 주장만 하시고 자료를 제시하라는 반박이 올라오자 너희들도 자료를 제시해라 라고 하시기보단
쓰레드를 열으신만큼 먼저 적극적으로( 객관적인 자료나 근거를 제시 )하실 책임이 있는거죠.

chunsj의 이미지

kenny007one wrote:
예 ddoman님의 말씀이 맞습니다.

저는 리눅스가 모든면에서 윈도우즈보다 후지다라는게 아니라,

IOCP와 epoll과 같은 대체 가능한 기술의 비교를 하는겁니다.

지금까지 저한테 자료를 공개하라는데 그건 다른분도 마찬가지 아닙니까?

그 답은 이미 나온 것 같은데요? 아니면 이미 알고 계신 것 같기도 하고... 지금 중요한 것은 테스트를 수행한 조건, 코드 그리고 그에 따른 결과에 대한 "자료"입니다. 제가 보기엔 이 말을 먼저 꺼내신 분이 자료를 먼저 보여주는 것이 좋을 것 같은데요? 자료 없이 말로만이라면 이 논의가 계속될 의미는 없다고 봅니다. POSIX계열의 OS에서 서로 비교한 결과는 있는 것으로 알고 있습니다. 예를 들어서 FreeBSD의 kqueue나 Linux의 epoll같은 것 말이죠.

각설하고 먼저 "자료"를 제시하세요. 만약 자료가 없이 "카더라"라는 말로만 시작하신 거라면 처음 시작하신 글을 수정하시든지 말입니다. 아, 꼭 이 자료가 먼저 나올 필요는 없겠지요? 다른 쪽의 자료라도 아시는 분은 먼저 올려주세요. 그래야 논의가 의미가 있을 것 같습니다.

kall의 이미지

kenny007one wrote:
예 ddoman님의 말씀이 맞습니다.

저는 리눅스가 모든면에서 윈도우즈보다 후지다라는게 아니라,

IOCP와 epoll과 같은 대체 가능한 기술의 비교를 하는겁니다.

지금까지 저한테 자료를 공개하라는데 그건 다른분도 마찬가지 아닙니까?


먼저 얘기를 꺼내셨으니 어느 자료를 검색하셨는지 부터 좀 공개해 주세요.

sangwoo wrote:
kenny007one wrote:
<중략>
kqueue나 epoll 등 현존 기술 모두 뒤져봐도 못따라잡는거로 검색결과 나타나던데, 다른 기술이라던가 아니면 앞으로 곧 나타날 신기술이 있는지 아니면 색다른 조합으로 가능한지?

어떻게 검색하셨는지 저도 자료를 보고 싶습니다. 관심이 가네요. 부탁드립니다.

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

voljin의 이미지

다즐링 wrote:
정말궁금해서 그런데..

어떤일이셧는지 구체적으로 이야기 해주실수 있나요?

voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

다른 분들도 자료가 궁금하신 것 같은데...현업에서 다루다 보면 이런 이야기는 함부로 하기 힘든 법입니다. 그럴듯한 근거를 제시하려면 개인정보가 추적될 수도 있으니..
이렇게 자료를 요청하는 말이 많은건 그만큼 이 글타래에 종사자가 참여하는 비율이 적다는 반증도 되겠고.. 실제 경험해본 사람은 이런 곳에서 굳이 자료를 제시하며 주장할 필요를 못 느끼는 법이죠. (그리고 제 경우에는 상대를 대박 깬 입장이라 더 입조심해야 -_-)

...사실 리눅스를 쓰건 NT를 쓰건 돈은 오라클이 버니까 이걸 쓰나 저걸 쓰나 그게 그거라고 생각합니다만.

참, 혹시나 오해가 있을까 싶어서 그러는데 리눅스가 비교해보면 느리다는 것은 이 글타래 처음에 언급된 것 같은 조건에서의 이야기입니다.

chunsj의 이미지

voljin wrote:
다즐링 wrote:
정말궁금해서 그런데..

어떤일이셧는지 구체적으로 이야기 해주실수 있나요?

voljin wrote:
왠지 한 사람을 몰아치는 분위기인데...

비교해보면 느리긴 하죠... 리눅스로 일 추진했다가 같은 급의 일처리를 NT로 훨씬 가볍게 처리하는 회사랑 비교되서 대박 깨지는 일도 있고 말입니다. (수습하기 위한 추가 하드웨어 비용이 NT로 했을 때의 소프트 비용을 사뿐히 넘어섰을때 특히..)

다른 분들도 자료가 궁금하신 것 같은데...현업에서 다루다 보면 이런 이야기는 함부로 하기 힘든 법입니다. 그럴듯한 근거를 제시하려면 개인정보가 추적될 수도 있으니..
이렇게 자료를 요청하는 말이 많은건 그만큼 이 글타래에 종사자가 참여하는 비율이 적다는 반증도 되겠고.. 실제 경험해본 사람은 이런 곳에서 굳이 자료를 제시하며 주장할 필요를 못 느끼는 법이죠. (그리고 제 경우에는 상대를 대박 깬 입장이라 더 입조심해야 -_-)

...사실 리눅스를 쓰건 NT를 쓰건 돈은 오라클이 버니까 이걸 쓰나 저걸 쓰나 그게 그거라고 생각합니다만.

참, 혹시나 오해가 있을까 싶어서 그러는데 리눅스가 비교해보면 느리다는 것은 이 글타래 처음에 언급된 것 같은 조건에서의 이야기입니다.

글쎄요, 제 생각은 다릅니다. 이런데 결과가 잘 나오지 않는 경우는 그 벤치마크를 수행한 사람들이 대체로 두 플랫폼에 대해서 다 프로그램을 잘 작성하는 경우가 없기 때문입니다. 때문에 공개를 하면 곤란해지는 경우가 많습니다. 비단 꼭 이런 경우만 그런 것도 아니고 심지어는 같은 플랫폼에서도 Multiplexing/Multi Threading/Multi Processing등의 비교를 할 때도 자주 일어나는 일입니다. 게다가 epoll이 select보다 효율이 다들 좋다고 알고 계시고 대부분의 경우 그렇지만 USENIX의 논문을 보면 User Space Select를 통해서 더 나은 성능을 보이도록 만든 경우도 있으므로 대략적인 경험이나 "카더라"는 의미가 없습니다. 실제 코드와 테스트 조건이 중요한 이유가 바로 이것입니다.

차라리 이런식으로 무의미한 논의가 계속되느니 차라리 동접자를 많이 처리할 수 있는 echo server만들기 같은 것을 해 보는 것이 더 나을 듯 하네요.

kalstein의 이미지

ACE는 멀티 플랫폼 네트웍 라이브러리입니다.

비동기쪽 구현인...ACE_Proactor 쪽이...NT쪽은 IOCP로 되어있구요. (NT는 IOCP를 제외하면 전혀 없다고 보면 되니까요 ^^;)
UNIX 계열 쪽은 POSIX 의 AIO를 이용해서 구현하고 있습니다만... NT와 Solaris, Linux를 비교했을때, 속도는

NT > Solaris > Linux 의 순서로 알고있습니다.

대신...Linux쪽을 위해서 `/dev/poll' or `/dev/epoll' 가 베이스인 동기쪽 구현을 따로 마련해두고 있네요.

그런데...왠만한걸로 짜도...네트웍쪽 자체의 부하보다는...발로짠;; 비즈니스 로직부, DB 쿼리부 쪽때문에 많은 시간을 잡아먹는데 일반적인 상황이라...일반 상황의 벤치마킹하기가 참 쉽진 않을것 같네요...

막말로 무식한 방법으로 알려져있는 fork 후 read, write 도...실질적으로 fork시에 실제 메모리 복사는 거의 일어나지않기때문에 (Copy On Write 라고 해서...뭔가 상속받은 부모에게서 고쳐지는 부분이 필요할때만 카피해오죠. 물론...멀티스레드로 메모리 공유가 가능해지는 장점은 버리게 되지만요 ^^) 많은 옛날 소스들이 삐걱거리면서도 의외로 잘 돌아들가고있죠;;;


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

skjk의 이미지

에코서버로는 ICOP의 강점을 제대로 활용못합니다.
온러안게임서버같이 클라이언트끼리의 인터렉션이 많을 때를 기준으로 비교를 해보는 게 좋을 것 같습니다.

다즐링의 이미지

구체적인 데이터라고 볼수 있을런지 모르겠는데
동시 request 및 traffic 데이터입니다.
위에 올린 이미지써버입니다.

c10k 를 넘긴건 저기 초반의 8k 부근입니다.
(월 데이터라 -_-; )

그리고 netstat 결과는 아닙니다. netstat 으로는..
당연히 더나오는 -_-;
물려있고 처리중인 fd수만 센거죠

댓글 첨부 파일: 
첨부파일 크기
Image icon 0바이트
Image icon 0바이트

------------------------------------------------------------------------------------------------
Life is in 다즐링

ddoman의 이미지

voljin wrote:

실제 경험해본 사람은 이런 곳에서 굳이 자료를 제시하며 주장할 필요를 못 느끼는 법이죠.

비록 얼마 안되지만 현업에서 3~4년 정도밖에 일하지못한 입장에서는 전혀 공감이 가지 않습니다.
현업에서 일하면 일할수록 단정적인 발언은 삼가게 되고
나와 다른의견을 들었을때 상대방의 근거에 대해 충분히 고려하고 자세히들을려고 바뀌던데
vojin님은 종사자가 되신지 몇년이 되신지 모르겠지만 경력이 얼마나 되야
근거를 제시해달라는 사람들에게 경험이 없어서 묻는거라는 생각을 하게되는거죠?

kalstein wrote:

ACE는 멀티 플랫폼 네트웍 라이브러리입니다.

비동기쪽 구현인...ACE_Proactor 쪽이...NT쪽은 IOCP로 되어있구요. (NT는 IOCP를 제외하면 전혀 없다고 보면 되니까요 ^^
UNIX 계열 쪽은 POSIX 의 AIO를 이용해서 구현하고 있습니다만... NT와 Solaris, Linux를 비교했을때, 속도는

NT > Solaris > Linux 의 순서로 알고있습니다.

저도 ACE에 관심이 많아 현업에도 적용시켜보고 살펴보는 편입니다만 NT > Solaris > Linux 라는 의견에 대해서는 본적이 없습니다.

"알고있습니다" 의 표현을 한것을 보면 어디서 보신거 같은데 도대체 그런 비유가 어디있는거죠?

그리고 Linux쪽을 위해서 /dev/poll /dev/epoll을 따로 마련한건
Reactor 프레임워크쪽에 마련한거지 위에서 비유한 IOCP와 AIO로 구현한 Proactor 프레임워크가 아닙니다.
Linux의 AIO구현은 비용이 커서 epoll이 더 성능이 낫다는 말을 저도 들은거 같습니다만 그건 Proactor 모델로 국한시켰을 경우지 NT > Solaris > Linux 라는 말로 OS의 네트웍 도구에 대한 전반적인 비교를 할수는 없습니다.

그리고 fork후 read,write의 예를 들으셨는데 copy on write때문에 옛날 소스들이 잘 돌아가고 있다고 말씀을 하셨는데
fork모델에서 비용이 많이 드는건 단지 메모리 복사뿐이 아니라 프로세스 생성 비용과 빈번한 context switching으로 인한 비용입니다. 위에서 예로들은 iocp,aio,epoll 등은 context switching을 하지않거나 줄여서 얻는 이익이 가장 큰 목적 중 하나입니다.

예전에 만든 프로그램들이 잘돌아가는 이유는 당연히 병목지점이 프로세스 비용이 아니었기때문입니다.

^_^의 이미지

프비로 겜서버 돌아가는곳두 몇곳 있구요
윈도우 겜서버로 운영하다가 리눅스로 마이그레이션한 겜회사도 있구요
윈도우로 운영하는 회사인데 신규 겜 런칭은 리눅스로 한 회사도 있구요

머든지 잘만들면 됩니다.

----------------------------------------------------------------------
웃는 얼굴 헤죽 헤죽

voljin의 이미지

ddoman wrote:
voljin wrote:

실제 경험해본 사람은 이런 곳에서 굳이 자료를 제시하며 주장할 필요를 못 느끼는 법이죠.

비록 얼마 안되지만 현업에서 3~4년 정도밖에 일하지못한 입장에서는 전혀 공감이 가지 않습니다.
현업에서 일하면 일할수록 단정적인 발언은 삼가게 되고
나와 다른의견을 들었을때 상대방의 근거에 대해 충분히 고려하고 자세히들을려고 바뀌던데
vojin님은 종사자가 되신지 몇년이 되신지 모르겠지만 경력이 얼마나 되야
근거를 제시해달라는 사람들에게 경험이 없어서 묻는거라는 생각을 하게되는거죠?

kalstein wrote:

ACE는 멀티 플랫폼 네트웍 라이브러리입니다.

비동기쪽 구현인...ACE_Proactor 쪽이...NT쪽은 IOCP로 되어있구요. (NT는 IOCP를 제외하면 전혀 없다고 보면 되니까요 ^^
UNIX 계열 쪽은 POSIX 의 AIO를 이용해서 구현하고 있습니다만... NT와 Solaris, Linux를 비교했을때, 속도는

NT > Solaris > Linux 의 순서로 알고있습니다.

저도 ACE에 관심이 많아 현업에도 적용시켜보고 살펴보는 편입니다만 NT > Solaris > Linux 라는 의견에 대해서는 본적이 없습니다.

"알고있습니다" 의 표현을 한것을 보면 어디서 보신거 같은데 도대체 그런 비유가 어디있는거죠?

그리고 Linux쪽을 위해서 /dev/poll /dev/epoll을 따로 마련한건
Reactor 프레임워크쪽에 마련한거지 위에서 비유한 IOCP와 AIO로 구현한 Proactor 프레임워크가 아닙니다.
Linux의 AIO구현은 비용이 커서 epoll이 더 성능이 낫다는 말을 저도 들은거 같습니다만 그건 Proactor 모델로 국한시켰을 경우지 NT > Solaris > Linux 라는 말로 OS의 네트웍 도구에 대한 전반적인 비교를 할수는 없습니다.

그리고 fork후 read,write의 예를 들으셨는데 copy on write때문에 옛날 소스들이 잘 돌아가고 있다고 말씀을 하셨는데
fork모델에서 비용이 많이 드는건 단지 메모리 복사뿐이 아니라 프로세스 생성 비용과 빈번한 context switching으로 인한 비용입니다. 위에서 예로들은 iocp,aio,epoll 등은 context switching을 하지않거나 줄여서 얻는 이익이 가장 큰 목적 중 하나입니다.

예전에 만든 프로그램들이 잘돌아가는 이유는 당연히 병목지점이 프로세스 비용이 아니었기때문입니다.

리눅스가 빠르다고 주장하는 사람이나, NT가 빠르다고 주장하는 사람이나, 직접 경험하고 적용하는 사람이라면(비교를 해야 뭘로 구축할 것인지 결정을 하겠죠? 결정이 아닌 구축 작업을 하는 사람을 이런 이야기를 할 때 현업에 종사한다고 말하지는 않을 것입니다.) 굳이 남에게 자료를 요청할 필요를 느끼지 못할 것이라는 이야기입니다. 그리고 스스로 검증해본 정도의 준비도 없는 사람이 무턱대고 근거를 주시면 감사히 배우겠다고 나오는 자세도 그리 바람직해보이진 않습니다. 그런 사람에게 교양 이상의 의미가 있을까요? 두 가지 중 하나를 선택할 수 있는 환경이나 지위를 가진 사람이 굳이 여기에서 그러겠습니까? 조건도 적용분야도 다른 사람의 믿을 수 없는 근거보다 직접 확인하는 것이 확실한데...말씀하셨듯이 전반적인 비교 자체가 힘드니까요.
물론...물론, 글타래를 시작하신 분이 마음에 안들어서 좀 야박하게 댓글을 달았을 수도 있을거라고 생각합니다만.

경력을 들이미신 부분에 대해서는 굳이 짚고 넘어가지 않겠습니다. 하지만 아직 3~4년정도라는게 빈말이 아니라 정말이라면 어설픈 훈계는 앞으로 삼가시기를 바랍니다.

방랑자의 이미지

voljin wrote:
ddoman wrote:
voljin wrote:

실제 경험해본 사람은 이런 곳에서 굳이 자료를 제시하며 주장할 필요를 못 느끼는 법이죠.

비록 얼마 안되지만 현업에서 3~4년 정도밖에 일하지못한 입장에서는 전혀 공감이 가지 않습니다.
현업에서 일하면 일할수록 단정적인 발언은 삼가게 되고
나와 다른의견을 들었을때 상대방의 근거에 대해 충분히 고려하고 자세히들을려고 바뀌던데
vojin님은 종사자가 되신지 몇년이 되신지 모르겠지만 경력이 얼마나 되야
근거를 제시해달라는 사람들에게 경험이 없어서 묻는거라는 생각을 하게되는거죠?

kalstein wrote:

ACE는 멀티 플랫폼 네트웍 라이브러리입니다.

비동기쪽 구현인...ACE_Proactor 쪽이...NT쪽은 IOCP로 되어있구요. (NT는 IOCP를 제외하면 전혀 없다고 보면 되니까요 ^^
UNIX 계열 쪽은 POSIX 의 AIO를 이용해서 구현하고 있습니다만... NT와 Solaris, Linux를 비교했을때, 속도는

NT > Solaris > Linux 의 순서로 알고있습니다.

저도 ACE에 관심이 많아 현업에도 적용시켜보고 살펴보는 편입니다만 NT > Solaris > Linux 라는 의견에 대해서는 본적이 없습니다.

"알고있습니다" 의 표현을 한것을 보면 어디서 보신거 같은데 도대체 그런 비유가 어디있는거죠?

그리고 Linux쪽을 위해서 /dev/poll /dev/epoll을 따로 마련한건
Reactor 프레임워크쪽에 마련한거지 위에서 비유한 IOCP와 AIO로 구현한 Proactor 프레임워크가 아닙니다.
Linux의 AIO구현은 비용이 커서 epoll이 더 성능이 낫다는 말을 저도 들은거 같습니다만 그건 Proactor 모델로 국한시켰을 경우지 NT > Solaris > Linux 라는 말로 OS의 네트웍 도구에 대한 전반적인 비교를 할수는 없습니다.

그리고 fork후 read,write의 예를 들으셨는데 copy on write때문에 옛날 소스들이 잘 돌아가고 있다고 말씀을 하셨는데
fork모델에서 비용이 많이 드는건 단지 메모리 복사뿐이 아니라 프로세스 생성 비용과 빈번한 context switching으로 인한 비용입니다. 위에서 예로들은 iocp,aio,epoll 등은 context switching을 하지않거나 줄여서 얻는 이익이 가장 큰 목적 중 하나입니다.

예전에 만든 프로그램들이 잘돌아가는 이유는 당연히 병목지점이 프로세스 비용이 아니었기때문입니다.

리눅스가 빠르다고 주장하는 사람이나, NT가 빠르다고 주장하는 사람이나, 직접 경험하고 적용하는 사람이라면(비교를 해야 뭘로 구축할 것인지 결정을 하겠죠? 결정이 아닌 구축 작업을 하는 사람을 이런 이야기를 할 때 현업에 종사한다고 말하지는 않을 것입니다.) 굳이 남에게 자료를 요청할 필요를 느끼지 못할 것이라는 이야기입니다. 그리고 스스로 검증해본 정도의 준비도 없는 사람이 무턱대고 근거를 주시면 감사히 배우겠다고 나오는 자세도 그리 바람직해보이진 않습니다. 그런 사람에게 교양 이상의 의미가 있을까요? 두 가지 중 하나를 선택할 수 있는 환경이나 지위를 가진 사람이 굳이 여기에서 그러겠습니까? 조건도 적용분야도 다른 사람의 믿을 수 없는 근거보다 직접 확인하는 것이 확실한데...말씀하셨듯이 전반적인 비교 자체가 힘드니까요.
물론...물론, 글타래를 시작하신 분이 마음에 안들어서 좀 야박하게 댓글을 달았을 수도 있을거라고 생각합니다만.

경력을 들이미신 부분에 대해서는 굳이 짚고 넘어가지 않겠습니다. 하지만 아직 3~4년정도라는게 빈말이 아니라 정말이라면 어설픈 훈계는 앞으로 삼가시기를 바랍니다.


근거 없이 무엇을 주장하고 그 의견을 관철시키는것은
불가능 합니다. 근거 없이 어떻게 상대방을 설득할 수 있겠습니까?
고딩들 논술 쓸때도 논리적으로 글쓰기 위해서 주장에 대한 근거를
항상 제시하지 않습니까?

위에 님은 그것을 말씀하신것 같습니다.

신승한의 이미지

A link that is worth reading, IMO.
http://www.kegel.com/c10k.html

다즐링의 이미지

voljin wrote:

리눅스가 빠르다고 주장하는 사람이나, NT가 빠르다고 주장하는 사람이나, 직접 경험하고 적용하는 사람이라면(비교를 해야 뭘로 구축할 것인지 결정을 하겠죠? 결정이 아닌 구축 작업을 하는 사람을 이런 이야기를 할 때 현업에 종사한다고 말하지는 않을 것입니다.) 굳이 남에게 자료를 요청할 필요를 느끼지 못할 것이라는 이야기입니다. 그리고 스스로 검증해본 정도의 준비도 없는 사람이 무턱대고 근거를 주시면 감사히 배우겠다고 나오는 자세도 그리 바람직해보이진 않습니다. 그런 사람에게 교양 이상의 의미가 있을까요? 두 가지 중 하나를 선택할 수 있는 환경이나 지위를 가진 사람이 굳이 여기에서 그러겠습니까? 조건도 적용분야도 다른 사람의 믿을 수 없는 근거보다 직접 확인하는 것이 확실한데...말씀하셨듯이 전반적인 비교 자체가 힘드니까요.
물론...물론, 글타래를 시작하신 분이 마음에 안들어서 좀 야박하게 댓글을 달았을 수도 있을거라고 생각합니다만.

경력을 들이미신 부분에 대해서는 굳이 짚고 넘어가지 않겠습니다. 하지만 아직 3~4년정도라는게 빈말이 아니라 정말이라면 어설픈 훈계는 앞으로 삼가시기를 바랍니다.

문제를 제기한 제가 설명을 드리자면 정말 저는 몰라서 그럽니다 -_-;
윈도우를 리눅스로 깬적은 있어도 반대인 경우는 정말 없어서 몰라서 문의드리는겁니다. 저도 대충 6년차는 됩니다. SI는 2년 반쯤 되구요. ( 개발자가 아니고 se입니다. 대충 ne도 들은바대로는 하구요. php , perl , python , jsp , asp , sh 정도는 압니다. 메신저도 대충 만든바 있고 그럭저럭은 한다고 생각합니다. )

제가 윈도우를 서버로 쓰는걸 보거나 들은 예는 다음과 같습니다.

    야후 미디어 서버군 -> 바뀐다고 들었습니다.
    게임서버들 ( ncsoft 나 머 그런 업체들
    작은 회사의 smb 환경에서 파일 공유 , 메일 , 웹 환경

비교자체가 힘든건 알겠는데 정말 그런 경우를 본적이 없어서 그럽니다.
그래서 보고 싶은겁니다. 위에 제시한 외의 경우를 말입니다.

서울외의 모 대학에서는 윈도우를 서버로 제시한 을을 깨고 리눅스로 바꿔서 동접 2000을 넘겼습니다. ( OS만 바꾼겁니다. 전에는 50명이었죠 )

이런걸 듣고 싶은거죠. 이야기좀 해주세요. ( 싸이트는 이야기 않해주셔도 됩니다 )

[/][/][/]

------------------------------------------------------------------------------------------------
Life is in 다즐링

voljin의 이미지

전 다른 경우는 모르겠습니다. 제가 애초에 말한게 예로 드신 "위에 제시한 예"에 들어가다보니...이걸 제외하고 나면 말할게 없군요.

게임서버 같은 환경에서 왜 윈도 서버가 득세하고 리눅이로 커버할 방법은 무엇인지 이야기가 흘러갈까 했는데 이 글도 그냥 뭐가 낫냐 논쟁글이 되고 말았네요. 자꾸 글 중간에 웹서버 이야기가 끼어들어서 혼란스러워진 감도 있고...

다즐링의 이미지

적다가 voljin 님께서 적은 글을 보고 흥분해서 지웠는데
요즘 개발자들의 추세는 epoll + nptl , RTS 이정도로 흘러다니고 있습니다. (freebsd라면 당연히 kqueue 겠죠 )
epoll 성능 이야기가 나와서 웹서버 이야기를 한거구요. 저정도면 문제가 없지 않나요?

제가 다니는고에서는 저 환경으로 회사의 게임서버도 이전작업중입니다. ( ACE이고 epoll 을 쓰기로 했습니다. ) 다만 언제끝날지는 -_-; (기존에 윈도우 10대인데 1~2대로 줄여야겠지요 )
그리고 기존의 회사들에서 못쓰는건 인력문제와 믿음성때문이겠지요. 작은 회사에서 비용문제를 생각하면 linux 말고는 답이 없다는겁니다.

사실 OS 는 어차피 방법론일 뿐입니다. 머가 좋다느니 머가 나쁘다느니 이런건 문제삼을 것이 아닌데 써보지도 않고 제대로 해보지도 않고 평가를 내리는건 문제가 되는거 같습니다. 저는 윈도우 경험이 부족해서 관련해서 문의드렸던것인데 현업이 어쩌고 하시니 흥분을 하고 말았군요. 죄송합니다.

voljin wrote:
전 다른 경우는 모르겠습니다. 제가 애초에 말한게 예로 드신 "위에 제시한 예"에 들어가다보니...이걸 제외하고 나면 말할게 없군요.

게임서버 같은 환경에서 왜 윈도 서버가 득세하고 리눅이로 커버할 방법은 무엇인지 이야기가 흘러갈까 했는데 이 글도 그냥 뭐가 낫냐 논쟁글이 되고 말았네요. 자꾸 글 중간에 웹서버 이야기가 끼어들어서 혼란스러워진 감도 있고...

------------------------------------------------------------------------------------------------
Life is in 다즐링

우수한의 이미지

epoll로 테스트해보다가 iocp로 바꾸고는 그 성능 향상에 감탄해서 윈도우에 정착한 대표적인 회사가 아마 NC소프트, 그라비티일텐데요.
과연 그 분야에 숙련된 고급프로그래머가 테스트한 것일까 의심스럽습니다.
(여기 KLDP 게시판에서도 IOCP 등의 단어로 검색해보면 제법 많은 글들이 나옵니다만, 윈도우에서는 IOCP가 최적이라는 결론만 있지 *nix보다 윈도우가 우월하다는 증거는 없습니다.)

앞서 다른 분이 언급한 바와 같이, 많은 게임회사에서 윈도우서버를 사용하는 이유는 결국 인력 수급 및 비용상의 문제 때문입니다.
PDA, PMP 분야에서 약진하던 리눅스가 최근 쇠퇴의 낌새를 보이고 있는 것도 마찬가지구요.

아무튼 "윈도우 vs 리눅스" 식의 이야기는 별도의 쓰레드에서 다루기로 하고, IOCP나 epoll, kqueue 등의 기술적인 주제에 집중하면 좋겠네요.

우수하지 않아요. '우수한'은 옛날 만화 CityHunter에서 따와서 쓰던 별명. ;-)

yykim의 이미지

ㅎㅎㅎ 이거저거 다 버리고서라도, IOCP로 개발하는 이유중의 큰 이유는 클라이언트 개발과 서버개발을 동시에 시키는 비용의 감소가 아닐까 하네요. 실제로 둘다 하는데도 많고 ^^

kenny007one의 이미지

우수한 wrote:
epoll로 테스트해보다가 iocp로 바꾸고는 그 성능 향상에 감탄해서 윈도우에 정착한 대표적인 회사가 아마 NC소프트, 그라비티일텐데요.
과연 그 분야에 숙련된 고급프로그래머가 테스트한 것일까 의심스럽습니다.
(여기 KLDP 게시판에서도 IOCP 등의 단어로 검색해보면 제법 많은 글들이 나옵니다만, 윈도우에서는 IOCP가 최적이라는 결론만 있지 *nix보다 윈도우가 우월하다는 증거는 없습니다.)

앞서 다른 분이 언급한 바와 같이, 많은 게임회사에서 윈도우서버를 사용하는 이유는 결국 인력 수급 및 비용상의 문제 때문입니다.
PDA, PMP 분야에서 약진하던 리눅스가 최근 쇠퇴의 낌새를 보이고 있는 것도 마찬가지구요.

아무튼 "윈도우 vs 리눅스" 식의 이야기는 별도의 쓰레드에서 다루기로 하고, IOCP나 epoll, kqueue 등의 기술적인 주제에 집중하면 좋겠네요.

인력이라..

그럼 제 주변에 남아돌아 취직도 못하고 있는 리눅스/유닉스 프로그래머들은 무엇일까요?

물론 초보수준은 아니고 위에서 말한 epoll은 물론 네트웍 프로그래밍은 다 기본적인수준으로는 할줄 압니다.

게임서버 만든 경력은 없지만.. 그들은 지금 게임회사에 취직못해 놀고 있습니다.

제가 볼땐 게임회사에서는 기존의 윈도우 프로그래머들의 텃새때문에 뛰어난 고수 리눅스 프로그래머들이 진입해버리면 자기네들 유윈도우밖에 모르는 컴맹 실력이 뽀록나는걸 두려워하기 때문인거 같습니다.

어디서든 텃새가 문제입니다.

Tony의 이미지

"그럼 제 주변에 남아돌아 취직도 못하고 있는 리눅스/유닉스 프로그래머들은 무엇일까요? "

헉!! 그런분들 있나요? 저희회사에서 중급수준의 리눅스/유닉스 프로그래머를 8명이나 면접봤는데 완전 좌절이었는데요. 아직도 사람 못뽑는중...

IsExist의 이미지

인력 수급도 빈익빈 부익부 -.-;;

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

cjh의 이미지

정말 좋은 프로그래머가 놀고 있다면 소개시켜 주십시오. ^^

--
익스펙토 페트로눔

warpdory의 이미지

kenny007one wrote:
인력이라..

그럼 제 주변에 남아돌아 취직도 못하고 있는 리눅스/유닉스 프로그래머들은 무엇일까요?

물론 초보수준은 아니고 위에서 말한 epoll은 물론 네트웍 프로그래밍은 다 기본적인수준으로는 할줄 압니다.

게임서버 만든 경력은 없지만.. 그들은 지금 게임회사에 취직못해 놀고 있습니다.

그분들의 간단한 이력서와 포트폴리오를 보여 주셨으면 합니다.
제가 가려고 면접 본 회사 중 몇군데서 '제대로 된' 유닉스/리눅스 프로그래머 못 구해서 사장이 눈이 벌개서 뛰어 다니더군요.

거기에 면접보게 된 계기도 그쪽에서 kldp 에 제가 글 쓴 것 보고 제가 '프로그래머' 라고 생각해서 연락이 온 것이었는데, 아쉽게도 저는 프로그래밍하고는 담 쌓고 있어서 저녁 한끼 얻어 먹고 나왔습니다. 대신 좋은 사람 있으면 추천해 준다고는 했으니 저녁 밥값은 해야죠.


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

소타의 이미지

게임회사에서는 게임이 비즈니스와 직접 연관되는데 경험없는 개발자를 데려가겠습니까? 회사에 인턴제도가 있다면 모를까요

저는 "게임서버를 만든적은 없지만 게임회사에 취직못해서 놀고 있다"고 주변에서 말하면 주제파악 하라고 합니다. 뭐라도 하나 만들어 보라고 하죠
인력 수급이 빈익빈 부익빈이 맞는것 같습니다. 채용공고 올려놓으면 이력서는 많이 쏟아지는데 막상 뽑을만한 사람은 없습니다. 잘하는 사람들은 주변에 많지만 이미 좋은곳에서 자리 잡고 있고요..

괜찮은 개발자가 휴식 말고 취업을 못해서 놀고 있다는게 말이 안된다고 생각합니다..

corba의 이미지

kenny007one wrote:
인력이라..

그럼 제 주변에 남아돌아 취직도 못하고 있는 리눅스/유닉스 프로그래머들은 무엇일까요?

물론 초보수준은 아니고 위에서 말한 epoll은 물론 네트웍 프로그래밍은 다 기본적인수준으로는 할줄 압니다.

게임서버 만든 경력은 없지만.. 그들은 지금 게임회사에 취직못해 놀고 있습니다.

제가 볼땐 게임회사에서는 기존의 윈도우 프로그래머들의 텃새때문에 뛰어난 고수 리눅스 프로그래머들이 진입해버리면 자기네들 유윈도우밖에 모르는 컴맹 실력이 뽀록나는걸 두려워하기 때문인거 같습니다.

어디서든 텃새가 문제입니다.


한때 제 주위에 게임프로그래머가 남아도는 시절도 있었습니다.
그땐 시장에서의 수요가 적었죠.
저도 게임회사의 윈도우 밖에 모르는 컴맹 중의 하나이지만 실력이 뽀록나는걸 두려워 하진 않습니다. :twisted:
nainu의 이미지

게임 업계 서버 개발자는 게임관련 개발 경력이나, 관심, 열정이 없으면 잘 뽑으려 하지 않습니다. 신입이나, 게임 외 서버개발자 지원은 많은 편입니다.

wontop의 이미지

epoll이 좋은지 iocp가 좋은지 결론이 났나요?
--------------------------------------------------
그걸 이루던지 이루지 못하던지 사람은 꿈에 이끌리는 법이죠.
'꿈'이라는 이름의 신의 순교자로서의 일생을

--------------------------------------------------
그걸 이루던지 이루지 못하던지 사람은 꿈에 이끌리는 법이죠.
'꿈'이라는 이름의 신의 순교자로서의 일생을

지리즈의 이미지

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

다즐링의 이미지

libevent 는 래퍼입니다.;;

그리고 몇년이 흘러서 생각해보건데
(이제는 늙어서 ㅎㅎ )

결론은 사람의 문제입니다.

실력있는 사람의 풀이 있어야하고 ( 불행히도 리눅스 계열은 매우 적습니다. )

그쪽의 비지니스 계획에 맞는 경험이 있어야합니다.

회사가 그런 결정을 내린다고 문제가 있는것이 아니고..

제가 주장했던바는.. epoll 이 딸린것은 없다는 정도로 이해해주시면 될듯하네요.

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

송효진의 이미지

libevent 가 epoll 같은것을 래핑해서 iocp 처럼 프로그래밍 할 수 있게 해 주는 건가 보군요.
윈도도 저수준까지 가면 구현방식이 비슷한거라고 봐도 무방할까요?

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

다즐링의 이미지

epoll 래핑만이 아니라..

기존의 프로그래밍방식은 os 별로 현재 다른 지원으로 인해 제각각이었습니다.
그부분을 통합해서 만든 부분이죠.

select , poll , kqueue , epoll 등 os 별로..;

요즘 대부분의 네트워크 프로그래밍은 저걸 빼고 이야기가 불가능합니다.

물론 성능은 각각의 것을 세밀하게 사용하는것이 더 빠릅니다.

범용적으로다가 생각하면 libevent 가 짱이죠.

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

nineye의 이미지


옛날 글에 답글 달지 맙시다...
많은 사람이 시간 낭비 한다는...

_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

송효진의 이미지

이번경우는 의미없는 댓글은 아니라고 봅니다.
궁금했고, 새로 올릴 필요가 없는, 논의가 있었던 글이기 때문입니다.
주제에 대해 뭔가 변화가 있다는 것을 아는 분이 보신다면 새 정보가 추가되겠고,
아니면 다시 묻히겠죠.
그냥 덜렁 질문만 올라오는것 보다는 월등히 낫다고 생각합니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

nineye의 이미지


글의 내용이나 덧글의 내용들이 모두 그 당시를 기준으로 쓴 글들입니다.
예를 들면, iocp와 비교할 만한 linux의 기술을 select나 poll로 소개하고 있는데,
그건 이미 대부분의 사람들이 linux에서는 epoll이나 rt signal이
iocp와 견줄만한 기술이라는 것을 현재는 알고 있습니다.
또한 이 내용을 처음 접하는 사람은 linux에서는 select나 poll이 모두라고 생각하는
오류를 범할 수도 있겠죠...
최근에도 iocp와 epoll에 대해 비교한 글들이 많이 있습니다. 굳이 옛날 글을 다시 올릴 필요는 없다고 생각되네요..

_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

bootmeta의 이미지

새로 추가된 덧글의 libevent가 특히 도움이 되는군요.
나중에 net관련 작업이 있다면 libevent 사용을 진지하게 고려해야할 것 같습니다.

neogeo의 이미지


C++ 유저라면 boost 의 asio 를 추천합니다.

iocp 부터 epoll 까지 전부 cover 하고 있지요.

Neogeo - Future is Now.

Neogeo - Future is Now.

오리가날지못해우물에빠진날의 이미지

댓글 단 사람보단 날짜확인을 안하고 글 읽은 사람이 잘못한거죠.
그리고 옛날 글이라고해도 이 토론 내용들이 쓸모없는것도 아니고요.

jaurang2908의 이미지

2011년이 되도 IOCP가 최고입니다.

리눅스가 나았으면 지금 국내 모든 게임회사들이 리눅스 서버로 다들 바껏겠지요??

근데?? 국내 온라인게임서버는 100% 윈도우즈서버입니다. 비용을 들이더라도 리눅스로는 안되기때메..

ddoman의 이미지

사실 대용량 처리를 생각한다면
온라인 게임 서버들이 가장 큰 프로그램들은 아니고

웹서버들이 더 많은 용량을 처리합니다. 그리고 리눅스는 웹기반 서비스들의
( 웹기반 서비스란게 꼭, http 서버, php, asp, jsp, apache, 등등을 의미하는게 아닙니다. )
가장 대중적인 플랫폼 같습니다.

구글은 대부분의 서비스가 리눅스 기반이고, 리눅스 기술은 대부분의 구글 잡 포스팅에
기본적으로 들어가 있습니다. ( 최소한 북미 구글은.. )

아마존도 리눅스 기반으로 알고있습니다. AWS, ECS 2/3 클러스터들이 리눅스 기반이라 들었습니다.

야후는 10,000의 리눅스 클러스터들을 hadoop에 얹어놓고 서비스를 하고 있다고 합니다. (http://en.wikipedia.org/wiki/Hadoop)

온라인 게임따위의 규모로 ( :P 농담입니다. 하지만, 구글, 야후, 아마존의 웹서비스 규모랑 비교하면 새발의 피죠. )
그것도 국내 온라인 게임 서버들이 윈도우라고

IOCP + MS Window가 성능이 중요한 분야에 서버 플랫폼으로
많이 쓰이고 있다고 생각하면 큰 오해입니다.

아직까지는 대용량 처리를 해야하고, 성능이 민감한 핵심 서버 플랫폼으로는 리눅스가 대세인것 같습니다.
물론, 중소 규모에서야 개발비용이니 뭐니 신경쓸게 많으니..성능만 보고 선택할순 없겠죠.

magingax의 이미지

빵빵한 IBM AIX 와
허접한 서버급 Linux 를 여러대 Hadoop 으로 묶는것.
비용이 비슷하다면.
모든면을 고려했을때 뭐가 좋은 선택일까요?

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

rubenz의 이미지

현장에서 빈번하게 확장이 일어나지 않는한 무조건 IBM으로 하지 않을까요? 관리상..

김정균의 이미지

여러대로 분산이 가능하지 못한 서비스의 경우에는 빵빵한 사양이 좋지만, 웹처럼 옆으로 쭈욱 늘릴 수 있는 서비스의 경우에는 빵빵한 사양 1개 보다 그보다 못한 여러대의 서버로 구성 하는 것이 효율적입니다. 그 이유로는 OS가 가진 한계 때문이죠. 예를 들어 OS에서 열 수 있는 최대 파일 수라든지.. 등등이 제약 조건이 있기 때문입니다.

tj의 이미지

게임회사들이 윈도우 서버 쓰는 건 성능때문이 아니구요. 그 동네 개발자들이 대게 윈도우 플랫폼에 훨씬 더 익숙해서 그래요. IOCP를 쓰건 epoll/pthread를 쓰건 성능이나 확장성에 차이가 날 이유는 없구요. IOCP나 kqueue 처음 나왔을 때는 select/poll 썼었고 NPTL도 없었으니까 더 좋았던 건데 벌써 십년도 더 전 얘긴걸요. 그 때는 c10k problem이라고 나름 말도 많았지만 이젠 대게의 오에스에서 이미 풀린 문제에요.

neocoin의 이미지

온라인 게임 클라이언트 개발자에게 Windows에서의 프로그래밍을 가르친후, 서버 개발까지 담당 시킬수 있기 때문입니다.

그외 이유가 있겠습니까. 벤치 마크에서 한쪽이 100~ 1000배 수준의 대단한 차이가 아닌 이상은, 유지 보수 비용이 더 큰 영향을 주게됩니다.

만약 앞으로 온라인 클라이언트 사용 머신이 윈도우에서 다른 플렛폼으로 바뀐다면 서버군도 자연스럽게 영향을 받겠죠.

agora의 이미지

참고할만한 테스트 결과가 있어 공유합니다.

지인이 작년에 이 문제로 테스트 했습니다.
처음 이슈가 제기된게 2005년인데, 제대로 테스트한 결과는 2013년에나 나왔네요.

결과론적으로 IOCP 가 epoll 에 비해 약간 우세한 것으로 보입니다. (정확히는 CPU 의 멀티코어 활용능력이 우세)
NIC에 RSS 를 키면 차이가 좀 더 줄어듭니다.

http://www.slideshare.net/sm9kr/iocp-vs-epoll-perfor?qid=3c154372-42f3-4505-aa95-2cb21ab78984&v=qf1&b=&from_search=2

참고가 되었으면 하네요

emptynote의 이미지

와....

다시한번 와....

세상에 IOCP 와 리눅스 EPOLL 를 비교하셨네요.

리눅스를 좋아 하지만.. 쩝.. 인정할것은 인정해야 겠네요.

자바로 TCP/IP 기반으로 하는 메시지 송수신을 할 수 있는 개발 프레임워크 만드는 중이라 너무 좋은 정보네요.

자바 프로그래머로써 리눅스에서 돌아가는 자바는 EPOLL 를 사용한다고 하는데 아쉽네요.

iamready의 이미지

windows 서버의 경우
nio -> sun.nio.ch.WindowsSelectorImpl (epoll)
nio2 -> sun.nio.ch.WindowsAsynchronousSocketChannelImpl (iocp)


유닉스계열의 경우
nio -> epoll
nio2 -> sun.nio.ch.UnixAsynchronousSocketChannelImpl (aio)

출처 : http://seban21.blog.me/220038884597