-퍼포먼스의 증가량보다 전력 사용량 증가량이 더 큼, 따라서 Big core, Little core를 나누어 사용
- 공유 메모리 기반 멀티프로세서
- 어떤 프로세스를 어떤 CPU에게 할당해줄지 결정해주는 역할을 로드밸런서가 맡음
- Good CPU Utilization
- Fair to all process
- Not scalable(contention for global lock)
- Poor cache locality
- Easy to implement
- Scalable ( no contention on ready queue)
- Better cache locality
- Load-imbalance(some CPUs have more process)
- 프로세스 생성 시 idlest cpu로 분산 시킴
- 현재 wake-up 한 cpu로 migration 시킴(또는 이전 cpu 유지)
- 적당한 Task를 찾은 후 현재 CPU로 migration
- 주기적으로 체크 훌 밸런싱
- 로드 밸런서가 사용하는 로드 값
- 큐1은 높은 우선순위를 갖는 Thread 큐, 큐2는 낮은 우선 순위를 갖는 Thread 큐일때 문제 발생
- Thread 수가 아닌 스레드의 weights를 이용해서 밸런싱
- 스레드가 10개가 있는데 1개는 우선순위가 높은 스레드, 나머지는 우선순위가 낮은 스레드일때
- weights 만 보는 것이 아닌, thread weight 와 CPU Utilization을 함께 이용해 밸런싱
-> CFS's load
- 프로세스 1은 많은 수의 스레드 실행
- 프로세스 2는 1개의 스레드만 실행
결과
- 스레드 기준으로 로드 밸런싱이 되기 때문에 프로세스1 이 프로세스2 보다 많은 시간동안 CPU 사용
-> 불공평
- 리눅스는 group scheduling 기능을 통해 해결(cgroup)
-> 두 스레드 그룹에 공정하게 분배