Skip to main content

Command Palette

Search for a command to run...

멀티 프로세서 스케줄링

Updated
2 min read

과제 때문에 정리한 내용인데 블로그 글로 좋은 것 같아서 올려본다. 이 내용은 Operating Systems: Three Easy Pieces - 10 Multiprocessor Scheduling을 요약한 것 이다.

멀티코어 프로세서등으로 인해 멀티 프로세서 시스템이 흔해졌다. 이에 따라, 멀티프로세서를 효율적으로 쓰기 위한 방법이 필요해졌다.

싱글 프로세서 시스템에서 멀티프로세서 시스템으로 갈 때 가장 중요한 것들은 하드웨어 캐시의 사용과 CPU간의 데이터 공유이다. 하드웨어 캐시는 메인 메모리에 비해 작은 대신 액세스가 빠른 메모리이다. 하드웨어 캐시는 locality 기반으로 작동한다. locality는 2가지가 있는데, temporal locality는 액세스 된 데이터는 오래 지나지 않아 다시 액세스 될 가능성이 높다는 점에서 착안한 것이고 spatial locality는 사용된 데이터의 주변에 있는 데이터를 사용할 가능성이 높다는 점에서 착안한 것이다. 이 시스템은 프로세서가 하나인 시스템에선 매우 단순하고, 성능을 개선해주지만, 멀티 프로세서 환경으로 가면 문제가 생긴다. 메인 메모리를 수정하는 것은 매우 느리기 때문에, CPU는 write operation을 수행할 때 메인 메모리의 값을 변경하는 대신 캐시의 값만 수정하고 메인 메모리는 나중에 업데이트하는데, 업데이트 되기 전에 다른 프로세서가 메인 메모리의 값을 읽으면 동시성 문제가 생긴다. 그래서 멀티 프로세서를 사용하는 프로그램을 짤 땐 lock을 거는 등 주의해서 짜야한다.

특정한 작업을 여러 개의 타임 슬라이스로 쪼개서 스케줄링할 때 같은 CPU를 사용하도록 하는 경우 다른 CPU를 사용하는 경우보다 캐시 등의 이유로 인해 더 빨라질 수 있다. 이를 cache affinity라고 한다. 커널은 성능을 위해 cache affinity를 고려해서 작업을 스케줄링해야 한다.

아주 간단한 스케줄링 알고리즘중 하나는 SQMS(single-queue multiprocessor scheduling)이다. 이는 구현이 간단한 대신 lock이 필요하기 때문에 프로세서가 많아지면 성능에 큰 문제가 생긴다. 또한, cache affinity 문제도 있는데, 모든 CPU가 한 개의 큐에서 작업을 가져오기 때문에 생기는 문제로, 작업이 여러 개의 CPU 사이를 왔다갔다하게 되기 때문에 성능이 나빠진다. 따라서 SQMS의 구현체는 대부분 cache affinity를 보존하기 위한 알고리즘을 포함한다.

싱글 큐 방식의 문제점을 극복하기 위해, 일부 시스템에서는 멀티 큐 방식을 사용한다. 이를 MQMS (multi-queue multiprocessor scheduling)이라고 한다. CPU 작업은 한 큐에만 추가되고, 각 큐의 작업들은 lock등을 피하기 위해 독립적으로 스케줄링된다. 이러한 점 때문에, MQMS 방식은 태생적으로 cache affinity를 잘 활용한다. 멀티 큐 방식에는 load imbalance 라는 근본적인 단점이 있다. 이는 특정 큐에 들어간 작업들만 오래 걸리는 경우, 다른 큐를 처리하는 CPU들이 놀게 되는 일이 생길 수 있다는 걸 의미한다. 이를 해결하기 위해 다른 CPU의 작업 큐에서 작업을 훔쳐올 수 있다. 이를 work stealing이라고 부른다.

리눅스의 경우엔 3가지 (O(1), CFS, BFS) 스케줄링 알고리즘이 있다. O(1)과 CFS는 MQMS고, BFS는 SQMS이다. O(1) 스케줄러는 interactivity에 집중한 스케줄러로, priority 기반인 반면 CFS와 BFS는 proportional-share 방식이다.

More from this blog

한국의 학벌에 대한 생각

내 블로그의 제목이 kdy1: The way I think 인만큼 앞으로는 내 생각을 더 자주 올리려고 한다. 한국 기준으로, 학벌은 사람을 볼 때 꽤나 유용한 지표이지만, 절대적이지는 않다. 경험적인 얘기일 뿐이지만, 성균관대학교 자퇴생으로서 느낀 것들이 몇 가지 있다. 대학까지 간 사람의 학벌은 학습 능력 x 성실함 에 대체로 비례한다. 그래서 의미가

Apr 3, 20261 min read

인간 지능에 대한 메모장

최종 업데이트: 2026/03/15 지능의 유전 현재 인류 기준으로, 고지능자는 고지능 유전자가 많이 겹친 사람이다. 지능의 유전엔 X 염색체가 매우 중요한 역할을 한다. 그리고 이게 남자와 여자의 지능 분포 차이를 만든다. 극상위권에 여자가 거의 없는 이유가 이것이다. 고지능 X 염색체가 여자한테서 발현되려면 2개가 있어야 한다. 이는 인간의 생

Mar 15, 20262 min read

Ai 코딩 팁 2 (한국어)

발표 자료: https://gamma.app/docs/AI--2a52e7tk3eb1ch1 AI 활용법 관련해서 간단하게 발표를 했다. 발표 자료 앞쪽은 전에 블로그에 올린 글이랑 같은 내용이다. 이 글에서는 기존 글에서 다루지 않은 내용들을 다루겠다. 에러 메시지 및 로깅 구체적 타입 및 스키마 활용 any 타입은 사람에게도 위험하지만, AI에게는 더 위험하다. 마찬가지로, JSON.parse처럼 아무 제약 없는 파싱 느슨한 인터페이스 ...

Jan 30, 20265 min read

kdy1: The way I think

233 posts