C언어

분산 처리( distributed processing )

고요한하늘... 2009. 1. 6. 18:39

분산처리를 해보고 있다.

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