시간 구성 216

EWOULDBLOCK/EAGAIN

넌블럭킹 소켓 socket() 으로 생성되는 소켓은 기본값으로 Blocking 소켓이다. 하지만 이미 생성된 소켓을 fcntl() 함수를 사용하여 nonblocking socket으로 변경 가능하다. ※ Blocking Socket(B)/Nonblocking Socket(N) (여기서 errno는 errno.h를 인클루드해야 이용할수 있다.) - read B : read 버퍼가 비어있을때 block N : read 버퍼가 비어있을때 -1 return, errno==EWOULDBLOCK/EAGAIN * Blocking socket의 경우에 read 버퍼에 존재하는 데이터의 크기가 read시 요청한 데이터의 크기보다 작은 경우라도 read 버퍼에 존재하는 데이터만큼 리턴되며 block 되지 않음. - wri..

Public/tip & tech 2011.08.05

libevent - an event notification library

libevent는 파일 디스크립터에서 이벤트가 발생 했을 때 지정된 콜백 함수를 실행시켜주는 라이브러리이다. 이 라이브러리는 시스템마다 서로 다른 I/O Multiplexing Method를 추상화시켜주는데 현재 버전에서는 /dev/poll, kqueue, event ports, select, poll, epoll을 지원한다. 그리고 리눅스, 맥, 윈도우즈, BSD, 솔라리스에서 모두 사용 가능하기 때문에 OS에 독립적인 event notification routine을 만들 수 있다. 참고로 이 라이브러리는 멀티쓰레드 환경에서도 사용이 가능하다. 그리고 파일 디스크립터별로 타임아웃을 지정하는 기능이 있는데, 접속한 클라이언트 중에서 지정된 시간 이상 활동이 없는 것들을 찾아서 연결을 끊는데 유용하게 사..

Public/tip & tech 2011.08.05

나는 개발을 왜 하는가..

"절망, 배신, 분노, 자책, 미움, 그리고 죽음. 나 또한 이것들과 싸워왔던 시간이 있었다." 옛 동료 이라부 히데키(42)의 자살 소식에 `코리안특급` 박찬호(38·오릭스 버팔로스)가 아쉬운 마음을 전했다. 박찬호는 2일 자신의 공식 홈페이지에 `행복은 성적이 아닌 노력순`이라는 제목으로 글을 올려 자신의 심경을 나타냈다. 이 글에서 박찬호는 "선수인 내게 목표가 좋은 성적이 아닐 수는 없다. 하지만 그 목표를 어느 정도 이루고 나면 다시금 불편한 마음은 찾아왔다. 그래서 완전한 행복은 성적만으로는 불가능하다는 결론에 이르렀다"고 말문을 열었다. 그리고 지난달 28일 스스로 목숨을 끊은 일본인 투수 이라부 히데키(42)를 언급하며 자신도 한때 절망·죽음과 싸웠음을 고백하기도 했다. "오래 전에 텍사스..

ANDSF 성능시험 정리

HTTPF OMAF 구간에서 성능을 돌리던 중 3000 TPS 이상 못던지는 현상이 나타났다. 원인을 찾아보니 OMAF 에서 사용한 libxml2 가 성능저하의 원인으로 밝혀졌다. 싱글쓰레드 상에서 libxml2 는 사용하면 안된다. 성능을 올릴 수 있는 방법이 없슴. HTTPF SIM HTTPF 구간에서 성능을 돌리던 중 2000TPS 가 넘으면 트래픽이 춤을 추는 현상이 발생했다. 이것은 성능시뮬레이터가 데이터를 못던지는것이 확인되었는데 이유를 확인해보니 성능시뮬레이터에서 TIME_WAIT 이 발생하여 가용한 포트를 사용할 수가 없어서 TIME_WAIT 이 없어질때까지 클라이언트가 못보내는 현상이었다. SO_REUSE 를 사용하면 TIME_WAIT 은 계속 남지만 포트를 재사용하므로 춤추는 현상은 없..

Public/tip & tech 2011.07.28

libevent 및 libev로 네트워크 성능 향상

다중 UNIX 네트워크 연결 관리 요약: 현대식 서버 애플리케이션을 빌드하려면 수백, 수천, 심지어는 수만 개의 이벤트를 동시에 수용할 방법이 필요하며, 이때 이벤트들이 내부 요청이든 운영 문제를 효과적으로 처리하는 네트워크 연결이든 상관없습니다. 사용 가능한 솔루션이 많이 있지만, libevent 라이브러리와 libev 라이브러리는 둘 다 성능과 이벤트 처리 기능 면에서 대변혁을 일으켰습니다. 본 기사에서는 UNIX® 애플리케이션 내에서 이런 솔루션을 사용하고 배치하기 위해 적용할 수 있는 기본적인 구조체와 메소드를 살펴볼 것입니다. libev와 libevent는 둘 다 많은 수의 동시 클라이언트 또는 연산을 지원할 필요가 있는 IBM Cloud 또는 Amazon EC2 환경 내에 배치된 애플리케이션을..

Public/tip & tech 2011.07.19

libevent 사용법

현재 프로젝트는 여러 장비에 대한 정보를 저장하는 대규모 서버다. 대량이라고 해봐야 최소 5000TPS, 목표는 50000TPS 정도이긴 하다. 어쨌든 대량의 통신을 처리하기 위해서는 대량의 connection을 처리하는 방법이 필요하며, 이런 라이브러리에 대한 탐색을 해본 결과, 직접적으로 epoll 같은 걸 사용하거나, libevent와 같은 라이브러리를 사용하는 방법이 존재하였다. 다른 방법을 사용할 수도 있으나 어쨌든 앞으로도 많이 사용해야 할 일이 있어서 안정적인 라이브러리를 선택하기로 하였으며, 이에 적당한 것이 libevent로 보였다. 근거가 있어야 하지만, 어쨌든 전문가의 추천이 있었으므로 일단 libevent를 사용하기로 하였다. 사용법 라이브러리를 초기화하기 위해서는 event_bas..

Public/tip & tech 2011.06.01

libevent 사용 예

* 메인 홈페이지 : http://www.monkey.org/~provos/libevent/ kqueue, /dev/epoll과 같은 유명한 multiplexer 장치들을 캡슐화한 C 라이브러리. 상당히 안정적. 소스도 작다. 1.0c 릴리스. man 페이지 : http://monkey.org/~provos/libevent/event3.html 아래 설명은 man 페이지를 정말로 많이 참조한다음 제가 좀 고쳐본 것입니다. Contents 1 설치법 2 필요한 헤더 include 3 설명 [edit] 1 설치법 # 이유는 모르겠지만 mingw에서 빌드가 자꾸 실패한다. 다음과 같이 autotool 기반 빌드를 실행하면 된다. 기본적으로 /usr/local/include, /usr/local/lib에 설치되..

Public/tip & tech 2011.06.01