2011-11-24 2 views
3

select를 사용하여 연결을 처리했습니다. 최근에 소켓 라이브러리가 변경되었으며 select가 Linux 플랫폼의 epoll로 바뀌 었습니다.epoll 대 매우 적은 수의 연결을 선택합니다.

내 응용 프로그램 아키텍처는 단일 스레드에서 최대 2 개의 소켓 연결과 epoll/select를 만드는 것과 같습니다.

최근에 epoll로 전환하면 응용 프로그램의 성능이 저하되었음을 알게되었습니다. 실제로 놀랐으며 성능이 올라가거나 같은 것을 기대하고있었습니다. 다른 여러 부분을 살펴 보았는데 이것은 변경된 유일한 코드 조각입니다.

매우 적은 수의 소켓 (예 : 1 또는 2)에 사용되는 경우 epoll은 속도 측면에서 성능상의 불이익을 갖습니다.

또한 동일한 상자 (8cpu 코어)에서 125 개의 프로세스를 실행한다는 점에 유의해야합니다. 이 경우 동일한 시스템에서 epoll_wait를 실행하는 프로세스가 너무 많을 수 있습니다.이 설정은 select를 사용할 때 비슷합니다.

로드 평균은 훨씬 높지만 CPU 사용량은 상당히 같아서 epoll 관련 변경에서 오는 I/O 및 probaly에 더 많은 시간이 소요된다고 생각하게합니다.

문제를 식별하기 위해 더 자세히보아야 할 아이디어/포인터.

비록 평균 대기 시간이 평균 1 밀리 초만큼 증가하지만 이것은 실시간 시스템이며 이러한 대기 시간은 일반적으로 불가능합니다.

덕분에 최신 findinds에이 질문을 업데이트

안녕,

은 떨어져 epoll에 할 선택에서 전환에서 나는 또 다른 10 밀리를 변경, 이전의 제한 시간이 선택으로 한 관련이 있지만, epoll에와 방식 타임 아웃 방법입니다 발견 (1 마이크로 ..)보다 작고, select 또는 epoll 결과에서 너무 적은 시간 제한을 설정하면 어쨌든 성능이 저하 될 수 있습니까?

감사

그것의 소리에서
+0

관련 질문 http://stackoverflow.com/questions/4093185/whats-the-difference-between-epoll-poll-threadpool –

+0

가능한 복제본 [매우 적은 수의 파일로 epoll을 사용하면 어떤 이점이 있습니까? 설명자?] (http://stackoverflow.com/questions/8597452/is-there-any-benefit-to-using-epoll-with-a-very-small-number-of-file-descriptors) – gavv

답변

3

는, 처리량은 select()epoll()에 영향을받지 않을 수 있지만 epoll()의 사용과 관련된 것으로 보인다 개별 요청에 여분의 대기 시간을 찾고 있습니다.

하나 또는 두 개의 소켓 만보고있는 경우 epoll()select()과 비슷해야합니다. epoll()은 더 많은 디스크립터를 볼 때 선형으로 확장되는 반면, select()은 나쁘게 조정됩니다 (&은 #/디스크립터에 하드 제한이 있음). 따라서 작은 숫자의 설명자에 대해서는 epoll()에 벌금이 부과되지 않지만이 경우에는 select() 이상의 성능 이점을 상실합니다.

& 두 이벤트 알림 메커니즘 사이에 쉽게 돌아갈 수 있도록 코드를 변경할 수 있습니까? 성능 차이에 대한 더 많은 데이터를 얻으십시오. 결론적으로 select()의 대기 시간이 &이라면 상황에 따라 동일한 처리량을 얻을 수 있습니다. 그런 다음 주저없이 '이전 &'API로 다시 전환해야합니다.이 특정 코드와의 성능 차이를 측정한다면 나에게 상당히 확실합니다. 변화. 아마도 epoll()select()의 이전 테스트는 처리량 대 개별 요청 대기 시간에 중점을 둡니까?

관련 문제