Public/tip & tech 122

TCP/IP Network 기본

TCP/IP Network OSI 7-Layer 란 ? Application : HTTP GET 생성 Presentation : HTTP Parsing Session : SSL or Security Transport : Message Reliability Network : Network IP Data Link : Frame Header Trailer Physical : Real Medium TCP/IP Protocol Suite 및 그에 따른 데이터 단위 OSI 7 계층은 아주 잘 추상화 되어있긴 하지만, 실제 적용하기에는 무리가 있으며 아래의 4계층 정도로 실용화 되어있다고 한다. 그리고 TCP/IP Protocol Suite 라고 말하고, 전체 네트웍 스택을 의미한다. Application : APD..

Public/tip & tech 2012.01.03

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

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