교수님이 꽂혀있는 구조는 event manager.오래걸리는 작업은 큐에 넣어놓고 나중에 처리 가능할 때 작업하자 임. 구글 serving 코드에 util/http_net 폴더를 보시면 http 서버가 있음 얘는 libevent 를 사용함. 한 스레드에서 루프 돌면서 걸려있는 이벤트들이 발생하면 콜백을 불러줌. ev_dipatch를 하면 모든 이벤트 다 처리 할 때까지 돈다. thread_pool 하나를 두고 여기다가 ev_dipatch를 schedule 하며 cb 함수 안에서 로직은 이 thread_pool에 cb함수를 등록하게 되어 있다. 사실 libevent 에서 io, condition variable 에 대해서 이벤트를 만들 수 있으니 이 구조면 거의 event manager 와 같은 효과를 얻..
https://github.com/bluca/valgrind-dpdk
* yahoo l3dsr https://github.com/yahoo/l3dsr리눅스 4.4에 빌드-(1년도 더 전에 마지막 업데이트여서.. 힘들었다... ㄱ-) * 구성 l3dsr다운 받으면 각 운영체제별로 컴파일 할 것, doc, vip 설정을 해주는 툴로 구성되어 있음. * 컴파일 해야할 것 - 해당 기능을 하는 커널 모듈 (kmod-xt) - iptables에서 해당 모듈을 바르게 부를 수 있도록 해주는 so 파일 (libxt_DADDR.so) * make 가이드 그대론 make가 안됨. - make 파일 기본 설정인 extension-1.4 / kmod-xt 사용 - fPIC 옵션이 있는데 이는 gcc 5 로 컴파일 못 함 -> gcc-4.9 사용 - make 하면 iptables.h 가 없다고..
0.dpdk 16.11 기준 lib/lib_ring/rte_ring.h ring queue이다.multi producer, multi consumer 에 대해서도 atomicity 보장을 이용해 lock 없이 동작한다.일반 ring에서의 producer, consumer가 multi 성격을 인정하면서producing/ consuming range 느낌으로.. ㅎㅎ head와 tail을 갖는다. 1번 consumer가 consuming에 뛰어 들어 cons.head를 움직이면2번 consumer가 consuming에 또 뛰어 들 수 있다.다만 1번 consumer가 먼저 종료할 때 까지 2번은 기다려야 한다. 1. multiwriter에 대해서 어떻게 safe하게 되는지는 아래 함수 하나만 보면 된다.아래..
vip hash lookup시 조회 안되는 문제 해결 key 계산시 잘못된 key length 문제였음.attribute packed가 없어서 2바이트가 추가 됨.stack에 해시 테이블을 두면 이 2 바이트가 0이지만 heap 에 두면 키의 끝 2바이트에 쓰레기 값.vip struct가 8바이트가 아닌 6바이트로 처리되도록 attribute packed 붙임. /* packed가 안되어 있으면 끝에 0이 아닌 바이트가 더 붙어서 cmp 가 비정상 동작함. 4바이트로 안떨어지는 ipv4_vip의 경우 packed 필요. (sizeof(ipv4_vip)가 8이 아닌 6임을 보장 받으려면 packed 필요) */ typedef struct ipv4_vip{ uint32_t ip; uint16_t port; ..