[번역] epoll : level triggered patch 를 내놓으면서.
어제 서버실 정리도중 개발서버 파워부분이 나가서 구굴링을 하던중 발견한
lt epoll에 관한 글입니다. 원문보기
LT는 level triggered , ET는 외계인 ET가 아니라Edge triggered 의 약자 입니다.
꽤 까마득한 글이지만. ET방식이 기본이었던 epoll이 왜 LT기본으로 바뀌었는지에 대해 알려주는 중요한 역사적인 글 같아서 번역해 봅니다.
요즘 LT를 쓸까 ET를 쓸까 고민하고 있던때라서 저같은 고민이 있는 분에게 도움이 될듯 합니다. ^^ (더 복잡해 지려나 ㅎㅎㅎ)
(번역)
lt-epoll (level triggered epoll)
지난 3달동안 나는 꽤 많은 시간을 개발자들에게 edge triggered API들이 어떻게 동작하는지, epoll을 어떻게 써야 할지 설명하는데 보냈다. 그건 내게 현실을 알게해준 시간이었다. 이게 바로 그 현실이다.
1) 개발자들은 ET API에 대해 전혀 이해하지 못하고 있다.
2) 대부분의 존재하는 어플리케이션들은 LT API를 사용한다.
ET 인터페이스와 와 LT 인터페이스의 차이를 간단히 설명하기 위해 다음 상황을 가정해 보자.
1) pipe writer가 2kb의 데이터를 썼다.
2) pipe reader가 1kb를 읽었다.
3) pipe reader가 epoll_wait 을 호출한다.
ET API 에서는 I/O space가 다 비워지지 않으면 어플리케이션은 3)에서 멈춘다. because to trasition 0->1 won't be possible (<<- 이부분은 번역불가 -_-; ) LT API에서는 어플리케이션은 poll() 때처럼 EPOLLIN event를 받을 것이다.
지난 주말에 Niels 과 Marius 의 도움으로 epoll을 LT API로 구현하는것을 시도했다. 이것이 바로 epoll을 LT API로 바꾸는 patch이다. 이 patch는 2.5.64 kernel을 기준으로 작업되었다. 오리지널 버전에서 정말로 최소한의 부분만 수정되었다. 내 기계에서 테스트 해본 결과 ET API과 비교해도 손색없는 결과가 나왔다. 내 의견으로는 LT API가 두가지 면에서 잇점이 있는거 같다.
1) 개발자들은 ET API에 비해 이것을 훨씬 잘 이해하고 잘 쓰고 있다.
2) 현존하는 많은 어플리케이션들이 poll/select같은 LT epoll이 포팅하기 쉬운 형태로 되어 있다.
LT epoll은 모든면에서 poll보다 빠르고 모든 poll을 대체할 수 있다. 이걸 테스트 하기 위해서 thttped를 LT poll로 포팅해 봤는데 LT epoll은 나를 실망시키지 않았다. Niels 과 Marius는 또한 꽤 괜찮은 이벤트 라이브러리를 만들었다.
[url]http://monkey.org/~provos/libevent/[/url]
LT epoll을 사용하는건 poll과 select를 사용하는것과 같다고 보면 된다. ET epoll과는 전혀 다른 사용 패턴이다. ET epoll을 쓸때는 fd를 epoll에 등록할때 EPOLLIN|EPOLLOUT 옵션으로 등록해야 하지만 LT epoll은 간단하게 epoll_ctl(EPOLL_CTL_MOD)를 써서 EPOLLIN 과 EPOLLOUT을 전환해주면된다. 이런상황에서 3가지 선택사항이 있었다.
1) epoll을 그냥 ET 로 둔다. (패치를 적용하지 않는다.)
2) 이 패치를 적용해서 LT상태로 만든다.
3) 파라메터를 epoll_create등에 적용해서 생성때 선택한다.
2)와 3)에 대한 man page는 Andries에 의해 다시 쓰여져서 포스팅되었다.
코멘트?
___________________________________________________________________________________
PS. (nomoreid주)
현재 대부분의 커널 2.6 배포판들은 위 패치가 적용된 상태입니다. (sys/epoll)
즉 기본적으로 아무런 옵션을 주지 않으면 LT epoll로 동작합니다.
LT epoll은 파일(소켓)디스크립터가 많으면 ET epoll보다 성능저하가 있을 수 있습니다.
하지만 그래도 여전히 poll이나 select보다 빠릅니다.
PS2. 위의 번역불가인 부분 번역해 주실분 손!!
PS3. 오역수정은 언제나 환영입니다
http://www.joinc.co.kr/modules/moniwiki/
http://www.joinc.co.kr/modules/moniwiki/wiki.php/epoll
우선 joinc 위키에 관련된 부분이 한글로 잘 정리되어 있는 듯 하군요 :)
because to trasition 0->1 won't be possible
말 그대로 해석하면 0->1 로 변하는건 불가능하다. (실제로 일어나지 않는다)
정도일 듯 하군요..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote="정태영"]http://www.joinc.co.kr/modu
위에도 썻듯이 왜 ET 기본에서 LT로 바뀌었는지 알려주는 문서라서 번역해 본것입니다. 위에서 썻듯이 역사적인 가치(?)가 있어서.. ㅎㅎ "know how" 라기보단 "know why" 쪽 문서죠.
아 방금 서버 파워 교체가 이루어졌습니다. T_T
Never Ending 삽질.
댓글 달기