Public/tip & tech 122

HP-UX ia64에서 64bit로 컴파일 하기

컴파일러 : aCC A6.0.0.00 OS : HP-UX U ia64 11.23 CFLAGS HP-UX ia64 +DD64 64bit 컴파일 할 때 ld: Can't find library or mismatched ABI for -lXXXXX 이런 에러 메세지를 보게 된다면 1. 컴파일 옵션 확인 할 것. 추가할 컴파일 옵션 : +DD64 컴파일할 대상과 링크된 라이브러리가 서로 다른 bit로 컴파일 되었을 경우 발생 컴파일할 대상의 컴파일 옵션에 추가해서 컴파일해보고(ex. $cc +DD64... 요렇게) 그래도 같은 에러가 발생하면 컴파일된 라이브러리가 64bit로 컴파일 되었는지도 확인하여 해당 옵션을 넣으주면 됨 또한 C 컴파일 옵션 뿐 아니라 ld 옵션(-lc에러등..)에도 사용하도록 한다. l..

Public/tip & tech 2010.12.14

64bit 환경에서의 프로그래밍

64bit 환경에서는 메모리와 파일 크기의 한계가 32bit 환경보다 훨씬 커지게 된다. 그러나 이러한 조건을 활용하기 위해서는 프로그래밍에서 몇 가지 유의 사항이 있다. 여기서 간략하게 요약해 본다. 기본적인 데이타 타입 크기 비교 64비트에서 각 데이타 타입의 크기는, char 1byte, short 2byte, int 4byte, long 8byte, long long 8byte, float 4byte, double 8byte, long double 10byte, void * 8byte이다. 반면에, 32bit에서는 int, long, 그리고 void *는 4byte, 즉, 32bit가 된다. 아래는 C에서 이러한 부분을 확인해 볼 수 있는 간단한 코드이다. #include #include #inc..

Public/tip & tech 2010.04.29

컴파일 옵션하나로 비정상 동작할 수도 있다.

정의 : GCC 에서 -O2 옵션은 최상위수준 최적화 기능을 제공한다. 문제점: 소스는 같은데 컴파일 옵션에 따라 비정상 동작하는 경우가 발생하기도 한다. 상황: A 장비 : 리눅스 커널버전 5.3 , gcc 버전 4.x B 장비 : HP UX 11.11i , gcc 버전 3.x A 장비에서 -O2 옵션을 쓰고 컴파일한 바이너리는 문제가 없지만 B 장비에서 -O2 옵션을 쓰고 컴파일한 바이너리는 실행시 특정위치에서 죽는 현상이 발생했다. 문제의 원인분석을 위해 1. 장비의 특성을 타는가 : 1시간 삽질 소요 2. 소스상의 문제는 없는가 : 1시간 삽질 소요 3. make 의 문제는 없는가 : 30 분 삽질 소요 문제는 3번에서 찾았다. -O2 옵션을 주면 A 장비에서 특정위치에서 죽는 현상이 발생했고 빼..

Public/tip & tech 2010.01.21

넌블러킹 소켓

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 되지 않음. - write B : w..

Public/tip & tech 2009.12.22

네트워크 함수의 Blocking/Non Blocking I/O" 동작

어찌보면 당연한 건데, 오해를 갖기 쉬운 "네트워크 함수의 Blocking/Non Blocking I/O" 동작들을 정리해 보았습니다. 1. 입력함수: read, readv, recv, recvfrom, recvmsg Blocking TCP 소켓인 경우, 소켓수신버퍼에 수신된 데이터가 없으면, 프로세스는 sleep한다. 데이터가 도착하면 (그것이 충분한 크기가 아닐지라도) 프로세스는 깨어난다. 원하는 크기만큼 도착할때까지 기다리려면, while로 계속 받아 붙이던가, 아니면, MSG_WAITALL 플래그를 이용한다. UDP 소켓인 경우, 소켓수신버퍼가 비어 있으면, 프로세스는 sleep한다. UDP패킷이 도착하면, 프로세스는 깨어난다. Nonblocking 소켓의 경우, 수신버퍼가 비어 있는 경우, 에러..

Public/tip & tech 2009.12.22

[개발 팁]개발시 성능 시험 이슈에 대한 팁 공유

이 메일은 제가 근무하는 필링크 전사메일로 뿌린 내용입니다. 안녕하세요. LGT WAP20 프로젝트를 진행하고 있는 전성현 과장입니다. 많은 분들이 개발이 완료되고 기능시험을 무난히 통과 한 후 성능시험을 진행하다 예상치 못하게 성능이 안나와 고전하신 적이 많으실 거라 생각되어 팁 공유차원에서 메일을 드립니다. 사실 우리가 격는 성능 이슈의 많은 부분을 차지하는 것이 1. 메모리 누수 2. 과도한 CPU 사용으로 인한 TPS 저하 입니다. 1번은 2번에 비해 찾기가 오히려 쉬우므로 넘어가겠습니다. 11월경 LGT WAP20 IP 인증 구조개선 프로젝트에 대한 성능 시험이 있었습니다. 문제가 되었던 것이 구조개선 전 1700 TPS 의 성능을 자랑하던 WAP G/W 가 TPS 1000 을 못넘고 700 에..

Public/tip & tech 2009.12.18