debug_objects_early_init()

  • 커널에서 사용하는 다이나믹 오브젝트의 life time을 트래킹할 수 있도록 한다.
    • CONFIG_DEBUG_KERNEL 및 CONFIG_DEBUG_OBJECTS 옵션이 설정되어야 사용할 수 있다.
    • 추가로 CONFIG_DEBUG_OBJECTS_FREE 옵션을 사용하면 kfree() 및 vfree() 사용 시 오브젝트의 deactivation 과정을 감시할 수 있다. (leak 감시)
  • /sys/kernel/debug/debug_objects 디렉토리에서 트래킹을 사용한다.
    • 예) cat stats

debug_objects_early_init

debug_objects_early_init()

/*
 * Called during early boot to initialize the hash buckets and link
 * the static object pool objects into the poll list. After this call
 * the object tracker is fully operational.
 */
void __init debug_objects_early_init(void)
{
        int i;

        for (i = 0; i < ODEBUG_HASH_SIZE; i++) 
                raw_spin_lock_init(&obj_hash[i].lock);

        for (i = 0; i < ODEBUG_POOL_SIZE; i++) 
                hlist_add_head(&obj_static_pool[i].node, &obj_pool);
}
  • ODEBUG_HASH_SIZE=2^14
  • ODEBUG_POOL_SIZE=512

 

obj_hash[]

dll/debugobjects.c

struct debug_bucket {
        struct hlist_head       list;
        raw_spinlock_t          lock;
};

static struct debug_bucket      obj_hash[ODEBUG_HASH_SIZE];

obj_static_pool[]

dll/debugobjects.c

struct debug_obj {
    struct hlist_node   		node;
    enum debug_obj_state    	state;
    unsigned int        		astate;
    void            		*object;
    struct debug_obj_descr  	*descr;
};

static struct debug_obj         obj_static_pool[ODEBUG_POOL_SIZE] __initdata;

참고

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.