본문 바로가기

Enginius/Linux

"Buddy" in Linux

 일반적으로 Buddy라고 하면 친구를 뜻한다. 하지만 리눅스에서는 조금 다르다. 

  Buddy candidates are cache hot

 Consider buddies to be cache hot, decreases the likelyness of a cache buddy beging migrated away, increases cache locality
: 버디들은 캐시 핫으로 생각되고, migration이 되는 것을 줄이고, 캐시 locality를 늘린다.

즉 캐시를 공유하는 task를 버디로 묶는 듯 하다. 이런 buddy logic은 task_hot() 함수에서 사용된다. 즉 task가 cache-hot이라고 생각되는지 여부를 판단하는데 사용된다. 
/*
 * Is this task likely cache-hot:
 */
static int
task_hot(struct task_struct *p, u64 now, struct sched_domain *sd)
{
	s64 delta;

	if (p->sched_class != &fair_sched_class)
		return 0;

	/*
	 * Buddy candidates are cache hot:
	 */
	if (sched_feat(CACHE_HOT_BUDDY) && this_rq()->nr_running &&
			(&p->se == cfs_rq_of(&p->se)->next ||
			 &p->se == cfs_rq_of(&p->se)->last))
		return 1;

	if (sysctl_sched_migration_cost == -1)
		return 1;
	if (sysctl_sched_migration_cost == 0)
		return 0;

	delta = now - p->se.exec_start;

	return delta < (s64)sysctl_sched_migration_cost;
}