안녕하세요,

 

최근 linux kernel에서 프로그래밍 할 일이 있어서, linux-2.6.31.4 버전에서 CFS 프로세스 스케줄러관련 소스를 분석하고 있습니다.

CFS에서는 time slice가 명시적으로 없고 동적으로 계산을 해서 사용하는 듯 하네요.

제가 프로그래밍 하면서 schedule()함수에서 time slice가 동적으로 필요한데 어떻게 구해야 할지 잘 모르겠네요.
아래와 같이 get_task_timeslice()함수로 작성을 해봤는데 맞는지 잘 모르겠네요, 혹시 아시는분 있으시면 알려주세요.

 

그리고 추가로, Linux kernel 관련해서 질문질답시 적절히 이용할 수 있는  해외 싸이트 아시면 좀 알려주세요.

 

=====================================================================
/* ACTXSW Return the default timeslice of a process. -jh 20100331 */
unsigned long inline
get_task_timeslice(struct task_struct* p)
{
        unsigned long time_slice;
        int retval;

        retval = -ESRCH;
        read_lock(&tasklist_lock);
        if (!p)
                goto out_unlock;

        retval = security_task_getscheduler(p);
        if (retval)
                goto out_unlock;

        /*
         * Time slice is 0 for SCHED_FIFO tasks and for SCHED_OTHER
         * tasks that are on an otherwise idle runqueue:
         */
        time_slice = 0;
        if (p->policy == SCHED_RR) {
                time_slice = DEF_TIMESLICE;
        } else if (p->policy != SCHED_FIFO) {
                struct sched_entity *se = &p->se;
                unsigned long flags;
                struct rq *rq;

                rq = task_rq_lock(p, &flags);
                if (rq->cfs.load.weight)
                        time_slice = NS_TO_JIFFIES(sched_slice(&rq->cfs, se));
                task_rq_unlock(rq, &flags);
        }
        read_unlock(&tasklist_lock);
        return time_slice;

out_unlock:
        read_unlock(&tasklist_lock);
        return retval;
}

 


asmlinkage void __sched schedule(void)
{
......
unsigned long time_slice = get_task_timeslice(current);
....
}

=======================================================================

 

좋은 하루 되세요.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22269
98 아마존 ec2의 리젼 이동 신재욱 2010.06.14 7409
97 xen에서 가상머신을 백업하려고 합니다! 신재욱 2010.06.14 6458
96 리눅스에서 FIQ 사용 하는법 아시나요? 홍문화 2010.06.11 8656
95 flush_icache_page(), flush_dcache_range()의 용도에 대해 문의드립니다. [2] 윤석훈 2010.06.06 8192
94 커널 부팅과정에서 실행되는 setup_processor() 에 cr_aligment의 용도를 알고 싶습니다. [1] 이영재 2010.06.05 5921
93 Meory region flag 중 VM_EXEC 의 의미 [1] 이준석 2010.05.28 6286
92 got, plt [3] 송원준 2010.05.18 9931
91 relocatable code, pic [2] 송원준 2010.05.16 10314
90 Linux kernel의 CFS(Completely Fair Scheduling) 스케줄러 [3] 김민종 2010.05.05 10860
89 .type LC0, #object [1] 송원준 2010.05.05 6826
88 mov r0,r0 [27] 송원준 2010.05.03 15172
87 GAS 한글서적 파는지요... 백철민 2010.05.02 6457
86 창우님 소스 repository관련~~ [2] 박은병 2010.05.01 6111
» Linux kernel의 CFS(Completely Fair Scheduling) 스케줄러에서 time slice 구하는 방법? [10] 김재호 2010.04.30 25234
84 GNU ld 스크립트 관련 [2] 홍문화 2010.04.30 6595
83 kernel의 virtual address [5] file 김민종 2010.04.28 13480
82 [toolchain] arm-linux-gcc [4] 김민종 2010.04.27 14094
81 x86_64 system에서 CR3 레지스터 값 읽어오기에 대한 질문입니다. [1] 백철민 2010.04.26 11583
80 초보적인 질문 드리겠습니다. 이세야 2010.04.20 6166
79 NFS NAS SAN 이란 무엇인가? file 박은병 2010.04.13 21883
XE Login