멀티코어 CPU 스케줄링

라마·2023년 7월 20일

운영체제

목록 보기
18/32

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

멀티 코어 시스템에서의 멀티쓰레딩

멀티 코어 시스템에서의 멀티쓰레딩은 아래 그림처럼 진행됩니다.

이때 멀티코어에서는 스케줄링이 여러 CPU 에 걸쳐 발생하게 됩니다.

원래 하나의 CPU 를 가질 때는 스케줄링을 통해 하나의 CPU 만 들락날락했었지만, 멀티코어의 경우 서로 다른 코어에 걸쳐서 Context Switching 이 발생할 수 있습니다.

이때 발생하는 문제점은 다음과 같습니다.

  1. 컨텍스트 스위칭 오버헤드 증가 문제
    1. 이전에 실행된 적이 없는 코어에 쓰레드가 배치될 때
    2. 캐시에 새로운 쓰레드의 코드와 데이터로 채워지는 긴 경과 시간 필요
  2. 코어별 부하 불균형 문제
    1. 쓰레드를 무작위로 코어에 할당하면, 코어마다 처리할 쓰레드 수의 불균형 발생

해결책

  1. 코어간 컨텍스트 스위칭 문제를 해결하기 위해 쓰레드가 동일한 코어에서만 실행되도록 스케줄링 진행
    1. CPU 친화성 ( CPU affinity ), 코어 친화성 ( Core affinity ), CPU 피닝, 캐시 친화성
    2. 코어 당 쓰레드 큐 사용
  2. 코어별 부하 불균형 문제를 해결하기 위해 부하 균등화 기법 사용
    1. 감시 쓰레드가 코어 사용량에 따라 작업을 재할당 → 부하 분산
    2. 푸시 마이그레이션 ( push migration ) : 짧거나 빈 큐에 다른 큐의 쓰레드를 옮김
    3. 풀 마이그레이션 ( pull migration ) : 내 큐가 현재 비어있다면, 다른 큐에서 쓰레드를 가져옴

또 하나의 문제점

멀티 코어를 고려해서 프로그래밍을 진행하면, 해결해야하는 중요한 문제점이 하나 더 존재합니다.

하나의 프로세스에서 일어나는 작업을 여러 코어 / 쓰레드에 걸쳐서 진행하게 될 때, 공유 데이터에 두 쓰레드가 임의의 순서로 접근하게 된다면 공유 데이터가 훼손되는 문제점이 발생하게 됩니다.

그래서 공유 데이터에 다수의 쓰레드가 접근할 때는 어떤 쓰레드가 먼저 작업을 진행할지 서로 합을 맞추는 것이 굉장히 중요한데, 이를 동기화 ( Synchronization ) 라고 합니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 20일

좋은 글 감사합니다!

1개의 답글