epoll을 사용한 서버 프로그램, e1000 튜닝 (InterruptThrottleRate=0) 적용후.
| 프로그래밍/System (Linux/FreeBSD) 2007. 10. 4. 11:55기존의 구조 변경 없이 튜닝값만 적용하고, 적용하지 않고 테스트를 진행했다.
결론적으로 튜닝값을 적용한 후에, 더 많은 초당 Interrupt를 처리하는 것이 확인되었다. 하지만 그것이 문제가 아니라 부하가 올라간다는 것인데,
전체 CPU 사용율 뿐만 아니라, Send와 Receive를 담당하는 프로세스 자체의 부하도 약 43%, 21%에서 60%, 67%로 늘었다.
그것 뿐만 아니라 메시지를 처리하는 프로세스들의 부하도 늘었는데, 그 원인은 초당 Interrupt를 더 많이 처리함에 따라 한 Interrupt당 들어오는 메시지의 숫자도 줄은것 같다. 그러므로 구조상 Receive를 담당하는 프로세스는 recv 시스템 콜 하나당 하나의 이벤트를 발생하도록 되어 있는데, 이 이벤트의 갯수가 늘어난 것이다 (그러니까 recv 시스템 콜이 더 많은 빈도로 불린다). 만일 Receive를 담당하는 프로세스가 하나의 (논리적인) 메시지당 하나의 이벤트를 발생한다면, 두 경우의 부하가 거의 비슷했을 것 같다. (Send와 Receive를 담당하는 프로세스는 여전히 높은 부하를 가지고 있겠지만.)
아니면 약간의 버퍼 영역을 두고 recv 시스템 콜 n개당 하나의 이벤트를 발생하도록 하면 뒤의 처리 프로세스들의 부하는 다소 줄어들 것 같다.
2007/09/28 - [작업로그(SE)/Linux (배포본)] - linux: e1000 device parameters
결론적으로 튜닝값을 적용한 후에, 더 많은 초당 Interrupt를 처리하는 것이 확인되었다. 하지만 그것이 문제가 아니라 부하가 올라간다는 것인데,
Before. CPU Time이 상당히 많이 남아 있는것을 볼 수 있다.
After. CPU를 상당히 많이 쓰고 있다.
전체 CPU 사용율 뿐만 아니라, Send와 Receive를 담당하는 프로세스 자체의 부하도 약 43%, 21%에서 60%, 67%로 늘었다.
그것 뿐만 아니라 메시지를 처리하는 프로세스들의 부하도 늘었는데, 그 원인은 초당 Interrupt를 더 많이 처리함에 따라 한 Interrupt당 들어오는 메시지의 숫자도 줄은것 같다. 그러므로 구조상 Receive를 담당하는 프로세스는 recv 시스템 콜 하나당 하나의 이벤트를 발생하도록 되어 있는데, 이 이벤트의 갯수가 늘어난 것이다 (그러니까 recv 시스템 콜이 더 많은 빈도로 불린다). 만일 Receive를 담당하는 프로세스가 하나의 (논리적인) 메시지당 하나의 이벤트를 발생한다면, 두 경우의 부하가 거의 비슷했을 것 같다. (Send와 Receive를 담당하는 프로세스는 여전히 높은 부하를 가지고 있겠지만.)
아니면 약간의 버퍼 영역을 두고 recv 시스템 콜 n개당 하나의 이벤트를 발생하도록 하면 뒤의 처리 프로세스들의 부하는 다소 줄어들 것 같다.
2007/09/28 - [작업로그(SE)/Linux (배포본)] - linux: e1000 device parameters
'프로그래밍 > System (Linux/FreeBSD)' 카테고리의 다른 글
linux로 포팅된 setproctitle 소스 (0) | 2007.10.22 |
---|---|
atomic_t를 System V IPC의 Shared Memory에 올리다. (0) | 2007.10.05 |
epoll, 몇가지 사항 (9) | 2007.09.20 |
System V IPC Semaphore로 구현한 read / write lock (0) | 2007.08.23 |
서버의 Local IP 가져오기, 단상 (0) | 2007.08.16 |