교수님이 꽂혀있는 구조는 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
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; ..