레이블이 intel tbb인 게시물을 표시합니다. 모든 게시물 표시
레이블이 intel tbb인 게시물을 표시합니다. 모든 게시물 표시

2011년 3월 28일 월요일

using skip list, mulithreaded heap , event polling in tinyNetworkLib

tinyNetworkLib를 코딩중입니다.

몇가지 중요한 결정을 하였습니다.

skip list를 사용하여, dispatched packet에 대한 circular buffer의 index를 보관하고, socket으로부터 recv시 overwrite하지 않도록 보호하는데 쓰기로 했습니다.
(좀 어려운 말인데요;;)
recv시, circular buffer에서 안전한 영역, 즉, 아직 처리 되지 않은 packet이 있지 않은 영역을 확보하기 위해서, circular buffer의 next buffer pointer보다 크고, dispatched packet index중에서 가장 작은 수를 알아내기 위해서 skip list를 사용합니다. logN time이죠.

이의 용도에 맞게 최적화 된 Skip List 를 구현할 수도 있지만,
잘 구현된 것을 일단 사용하기로 했습니다. ( http://bit.ly/gGtzuO )

또한, multi thread 환경에서는, 여러개의 thread가 heap을 경쟁합니다. 하나의 thread에서 alloc한 것을 다른 thread에서 free해야 하는 상황이 자주 생깁니다. 그럴 경우, 어쩔 수 없이 lock을 써야 하는데, thread가 많아질 수록 scalability 가 떨어지는 문제가 생깁니다.
이 문제를 해결하기 위해서, 역시 직접 구현하는 것이 맞겠지만...;; Intel TBB의 scalable allocator를 사용하기로 결정하였습니다.

또한, epoll이나 kqueue의 경우, IOCP의 그 역할(? ^^)이 없습니다만,
network thread에서 poll을 해오고, 처리는 event마다 thread pool로 던지는 역할을 위해서, 역시 intel TBB의 task를 쓰기로 했습니다. ^^

God bless me and you. ^^

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 3월 14일 월요일

Memory Allocator for Multithreaded Applications

tcMalloc : google에서 만듬. 작은 사이즈의 allocation에 최적화 된 것으로 보임.linux에서만 테스트.
Intel TBB scalable_allocator : Intel TBB에 포함. new/malloc도 대체함.
 scalable_allocator를 통해서 thread specific heap을 제공함.
libHoard : Emery Berge 박사가 만듬. 꽤 오래된 라이브러리. thread증가에 따라서 선형적으로 speed up이 나타나는 그래프가 인상적. GPL license.
nedMalloc : 오픈소스. 간단함. 다른 것들보다 다 빠르다고 주장함. Windows에 최적화.dlmalloc이 근간.bitwise tries 인상적.
MTS : memory tuning system ( evaluation을 신청해야 구할 수 있음. ) whitepaper내용이 부실한 것으로 봐서 신뢰가 잘 안 감.
jemalloc : linux,macosx에 최적화.firefox에서 쓰임.



어떤 것을 선택하느냐는, 어플리케이션에 따라 달라져야 한다고 본다.
그런데, 기본적으로 선택해야 할 기준은 있다. 바로 안정성이다.
* 안정성 : 속도가 빠르다고 해서 안정성을 해쳐서는 안된다. 더구나 근간이 되는 메모리 할당에 관해서는 절대적으로 필요한 요소이다.

시간이 되면, 테스트 프로그램을 만들어, 결과를 올려봐야겠다.
현재로서는 nedMalloc과 Intel TBB을 함께 쓰면 어떨까한다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^