2008. 8. 25. 18:00

메모리 풀링

요즘 서버 모듈을 다시 만들어 볼려고 이것 저것 손대 보고 있는데, 오늘은 동적인 message buffer 생성을 위한 메모리 풀을 만들어 보고 테스트를 해 보았다.

결과는 아래와 같다.

테스트 환경:
컴파일러 : vc2008 express edition
PC : Pentium(R)4 CPU 3.00GHz, Ram 2G
운영체제 : XP sp2
테스트 내용 :
  1032BYTE 짜리 buffer, 4byte int 각각 5만개씩 생성
결과 :  
** message_buffer로 테스트 했을 때
미리 잡아 놓고 dequeue를 이용한 풀[message_buffer] : 0
기본 new/delete[message_buffer] : 0.156
boost::object_pool[message_buffer] : 142.844
boost::pool_allocator[message_buffer] : 141.203
boost::fast_pool_allocator[message_buffer] : 0.047
 
** int로 테스트 했을 때
미리 잡아 놓고 dequeue를 이용한 풀[int] : 0.016
기본 new/delete[int] : 0.032
boost::object_pool[int] : 3.875
boost::pool_allocator[int] : 3.89
boost::fast_pool_allocator[int] : 0

생각보다 object_pool 이나 pool_allocator가 성능이 신통치가 않다.(사실 사용법을 잘 몰라서 그런지도 모른다. 대충썼다 -_-)

미리 잡아 놓고 dequeue를 사용한 풀을 써볼려고 테스트를 만든건데, 위의 테스트는 버퍼를 미리 잡는 시간은 제외된 시간이다. 의외로 쓸만한거 같은데, 동기화 오브젝트를 넣고 하면, 얼마나 성능이 나올지는 좀더 테스트를 해 봐야 될거 같다.

아래는 소스 코드