분산처리를 해보고 있다.
IPC는 전혀 없기 때문에 서버를 N대 투입하면 속도가 N배로 좋아져야 한다.
물론 현실적으로 네트워크 비용이 있기 때문에 그렇진 못하겠지만
비례적으로 처리 속도 상승을 기대해 볼만하다.
서버는 안정성을 위해 프로세스 방식을 사용했고, 클라이언트는 죽어도 상관없어서 thread로 만들었다.
데이터를 처리하는게 서버라서 죽을 가능성도 클라인언트에 비해 훨씬 크기 때문에 어쩌면 당연한지도 모르겠다.
로컬에서 복수개의 파일에 대해서 처리를 하기 때문에 결과 파일이 점차로 커진다. 그래서 일정 시점( paging발생 시점)이 되면 급격히 느려지는 문제가 발생한다. paging을 원천적으로 막을 수는 없기 때문에 가급적 데이터를 분산저장해서 paging이 적게 일어 나도록 해야 했다.
분산처리를 함으로써 데이터 저장시에 paging뿐만 아니라 dependancy 없는 데이터라서 마음껏 cpu도 사용할수 있었다.
결과적으로 마지막 파일에 가서 5배의 실행 시간 차이가 났다.( 아래 결과는 마지막 파일의 실행 시간 )
( 분산 ) 처리했을때 ( clinet : 1, server : 6 )
real 9m6.889s
user 6m20.242s
sys 0m0.832s
( 로컬 ) 에서 처리했을때 :
real 50m13.278s
user 0m26.199s
sys 1m9.278s
tcp/ip 프로그래밍도 오랜만에 해보고, 분산 처리도 경험해 볼 목적이었는데 생각보다 손이 많이 간다.
첫번째 파일의 경우는 예상할수 있는것 처럼 로컬에서 2배 가까이 실행 속도가 빨랐다.
( 분산 )
real 2m26.292s
user 7m54.273s
sys 0m0.935s
( 로컬 )
real 1m39.898s
user 0m25.284s
sys 1m1.303s
'C언어' 카테고리의 다른 글
apr Makefile 만들기 (0) | 2009.01.22 |
---|---|
Apache Portable Runtime 설치 (0) | 2009.01.19 |
내가 해보고 싶은 분산 컴퓨팅 (0) | 2008.12.12 |
cast from pointer to integer of different size (0) | 2008.08.19 |
쉘코드도 조금은 알아야 할것 같아서.. (0) | 2008.07.12 |