스케줄 링 관련 데이터 구조

1982 단어
1. task_struct
스케줄 링 하면 첫 번 째 는 taskstruct 는 프로 세 스 / 스 레 드 를 표시 하 는 데 사 용 됩 니 다. 스케줄 링 의 실체 단위 로 볼 수 있 습 니 다. 이 구조 체 에서 스케줄 링 과 비교적 밀접 한 구성원 은 다음 과 같 습 니 다.
struct task_struct {
    int prio, static_prio, normal_prio;
    unsigned int rt_priority;
    const struct sched_class *sched_class;
    struct sched_entity se;
    struct sched_rt_entity rt;
#ifdef CONFIG_CGROUP_SCHED
    struct task_group *sched_task_group;
#endif
    struct sched_dl_entity dl;
...
    unsigned int policy;
    int nr_cpus_allowed;
    cpumask_t cpus_allowed;
}
  • rt_priority 는 실시 간 프로 세 스 의 우선 순위 입 니 다. 그 값 범 위 는 0 에서 99 이 고 값 이 클 수록 우선 순위 가 높 습 니 다

  • prio 와 normalprio 는 동적 우선 순위, staticprio 는 정적 우선 순위 입 니 다. 정적 우선 순 위 는 시작 할 때 정적 으로 분 배 됩 니 다. 예 를 들 어 nice 값 이나 sched 를 사용 합 니 다.setscheduler () 시스템 호출.normal_prio 는 정적 우선 순위 와 스케줄 링 전략 을 바탕 으로 계산 합 니 다. prio 는 특정한 상황 에서 커 널 이 프로 세 스 의 우선 순 위 를 잠시 높 여야 합 니 다
  • sched_class 는 스케줄 러 클래스 입 니 다

  • 2. sched_class
    3. sched_entity
    struct sched_entity {
        struct load_weight load;
        struct rb_node run_node;
        unsigned int on_rq;
        u64 exec_start;
        u64 sum_exec_runtime;
        u64 vruntime;
        u64 prev_sum_exec_runtime;
    }
    
    

    4. 567917. load 는 부하 균형 에 사용 되 고 가중치 를 지정 하 며 이 값 을 계산 하 는 것 이 스케줄 러 의 중임 입 니 다
  • run_node 는 빨 간 검 은 나무 노드 로 실 체 를 빨 간 검 은 나무 에서 정렬 할 수 있 습 니 다
  • on_rq 는 이 실체 가 준비 대기 열 에 있 는 지 여 부 를 표시 합 니 다: struct rq;준 비 된 대기 열 에서 스케줄 을 기다 리 는 것 을 표시 합 니 다
  • exec_start 와 다음 몇 개의 변 수 는 시간 통계 에 사용 되 는데 주로 CPU 소모 시간 을 기록 하여 CFS 스케줄 러 에 사용 합 니 다.sum_exec_runtime 추적 프로 세 스 가 실 행 될 때 CPU 에서 실 행 된 총 시간, execstart 는 현재 실행 중인 시작 을 표시 합 니 다. 예 를 들 어 새 프로 세 스 가 준비 대기 열 이나 주기 적 스케줄 러 에 가입 하면 호출 할 때마다 현재 시간 과 exec 를 계산 합 니 다.start 차 이 를 sum 로 중첩exec_runtime 에 서 는 현재 시간 을 exec 로 설정 합 니 다.start,prev_sum_exec_runtime 은 마지막 프로 세 스 가 실 행 된 CPU 시간 을 계산 하 는 데 사 용 됩 니 다. vruntime 는 프로 세 스 가 실 행 된 동안 가상 시계 에서 흐 르 는 시간 수 를 기록 합 니 다
  • 좋은 웹페이지 즐겨찾기