kmem_cache_free 문제...
글쓴이: cjy1126 / 작성시간: 토, 2004/02/07 - 2:18오후
커널안에 저에게 들어온 source ip를 60초간 저장하는 hash table을 만들었습니다.
먼저 app에서 개발을한후 문제가 없는것을 확인한후 커널로 옮겼습니다.
time() => timer_list malloc => kmem_cache_alloc(처음에 kmalloc로 했다가 커널패닉이나서 -_-)
문제는 메모리를 해제하는데, 사용 메모리가 감소하지않고, 오히려 증가합니다. ㅡㅡㅋ
선언은 전역변수로
static kmem_cache_t *ids_conn_cachep
init부분입니다. (struct packet_data는 ip와 timer_list가 들어있는 packet에 대한 정보를 저장하는 구조체입니다.)
kmem_cache_create("ids_conn", sizeof(struct packet_data), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
새로온 ip가 있으면 temp에 메모리를 할당후, 정보를 저장해서 링크드리스트에 연결합니다.
pd = kmem_cache_alloc(ids_conn_cachep, GFP_ATOMIC);
타이머의 expires시간이 지나면 delete합니다.
kmem_cache_free(ids_conn_cachp, pd);
프로그램이 종료할때 입니다.(프로그램 수행중에 메모리를 확인했으니 이것이 문제는 아닌것 같습니다.)
kmem_cache_destroy(ids_conn_cachep);
Forums:
댓글 달기