본문 바로가기
반도체 그 다음 학문/운영체제 (OS)

운영체제 Multiple-Processor Scheduling ( Load balancing, Affinity, 멀티 프로세서 스케쥴링 )

by 전컴반 2022. 4. 13.
반응형
Multiple-Processor Scheduling

 

- 여러 개의 코어가 있다면 ready queue에서 어떤 프로세서를 어떤 코어에 thread를 배정해야 하는 문제가 생긴다.

대부분 thread는 공통의 ready queue를 사용한다. 이렇게 되면 뭐가 문제냐면 동기화의 문제가 생긴다.

그래서 각각의 코어에 독립적인 queue를 배정하는 방법이 나온 것이다. 이런 걸 Multiple-Processor Scheduling라고 부른다. 하지만 메모리를 많이 잡아먹는다는 단점이 있다.

 

 

 

Multiple-Processor Scheduling을 구현하려면 고려해야 할 사항이 Load balancingAffinity가 있다. 

 

 

1. Load balancing

먼저 Load balancing이다. 쉽게 말해 Core0의 queue에는 90개의 프로세서가 있는데 Core1의 queue에는 10개밖에 없다. 이렇게 불균형한 프로세서의 분배를 균등하게 분배하도록 만들어야 한다.

 

해결 방안으로 나온 게 migration이다. 우리말로는 이주하다는 뜻인데 이와 같이 push migration 하면 바쁜 Core가 Task를 내보내는 방식이다. 이에 반해 pull migration하면 여유로운 Core가 task를 가져오는 것이다.

 

 

2. Affinity

다음으로 Affinity이다. 유연성이라는 뜻이다. 쉽게 말해 하나의 프로세서가 Core0에서 막 실행되다가 중간에 interrupt나 어떤 이벤트로 인해 ready queue로 갔다가 다시 실행된다고 했을 때, 마무리하지 못한 프로레서를 어디 Core로 보내야 하는지에 관한 문제에서 전에 수행했던 Core0로 다시 보내자는 게 affinity다.

이유는 간단하다. 캐시에 데이터가 남아있을 수 있어 더 빠르게 처리할 수 있고 새로 배정하려면 더 시간이 많이 들기 때문이다. 하지만 이미 앞에서 많은 프로세서가 실행되어 캐시에 남아있지 않을 수도 있고 기다리는 시간보다 새로 배정하는 게 더 나을 수도 있다 affinity에는 2가지 affinity가 존재한다.

 

Hard affinity : 어디 프로세서로 갈지 명시하여 무조건 다시 실행될 때 동일 Core에서 실행되는 것

Soft affinity : 동일 Core에서 실행을 시도하지만 무조건 동일 Core에서 실행되진 않을 수도 있는 것

 

taskset -cp를 사용하여 내가 원하는 core를 지정할 수 있다. core는 bitmap으로 나타내서 cpumask에 저장된다. 

 

 

반응형

댓글