CPU 로드 밸런싱은 어떻게 이루어지나요? [폐쇄]

CPU 로드 밸런싱은 어떻게 이루어지나요? [폐쇄]

Xubuntu에서 Firefox를 사용하는 데 문제가 있습니다. 때때로 Firefox는 하나의 CPU 코어를 점유하고 다른 모든 코어는 유휴 상태입니다. 웹사이트 구축은 매우 느리고 매우 짜증스럽습니다.

다시 시작하지 않고 잠시 동안 컴퓨터를 떠나면 마법 같은 일이 일어나고 Firefox가 모든 CPU 코어를 다시 동일하게 사용한다는 것을 알았습니다.

어딘가에서 CPU 코어가 캐시/버퍼의 항목에 연결되어 있다는 것을 읽었으므로 (멀티 코어) 프로그램이 일시적으로 하나의 CPU 코어를 사용할 때 실제로 캐시/버퍼 작업에서 다른 코어를 해제하는 것보다 낫습니다.

CPU 로드가 균형을 이루는 방법을 더 자세히 설명할 수 있는 사람이 있습니까?

답변1

ls일반적으로 UNIX 및 Linux 스케줄링에서는 짧은 프로그램(예 : , ps, ...) 이 많이 있다고 가정하므로 grep하나의 CPU에서 하나의 프로그램을 시작합니다. 프로그램이 장기간 실행되면(예: Firefox 또는 Chrome) 커널은 로드 불균형을 인식하고 프로세스를 다른 CPU로 마이그레이션합니다. 이는 마이그레이션 작업에 의해 수행됩니다( 실행에 표시됨 ps).

https://superuser.com/questions/440906/what-is-the-migration-process

마이그레이션이 수행되는 방법을 알아보려면 다음을 참조하세요. https://stackoverflow.com/questions/49707124/how-does-linux-kernel- migration-the-process-among-multiple-cores

 * This is how migration works:
 *
 * 1) we invoke migration_cpu_stop() on the target CPU using
 *    stop_one_cpu().
 * 2) stopper starts to run (implicitly forcing the migrated thread
 *    off the CPU) 
 * 3) it checks whether the migrated task is still in the wrong runqueue.
 * 4) if it's in the wrong runqueue then the migration thread removes
 *    it and puts it into the right queue.
 * 5) stopper completes and stop_one_cpu() returns and the migration
 *    is done.

부하를 결정하는 방법을 알아보려면 다음을 참조하세요. https://github.com/torvalds/linux/blob/master/kernel/sched/fair.c그리고 댓글을 둘러보세요 migration. 그러나 일반적으로 스케줄러는 다음을 고려해야 합니다.

  • CPU는 얼마나 바쁜가?
  • 마이그레이션 프로세스 비용
  • 생성된 시스템 오류 수

그런 다음 마이그레이션할 프로세스와 CPU를 결정해야 합니다.

모두 매우 복잡하므로 이에 대해 더 자세히 알아보고 싶다면 다음을 확인하는 것이 좋습니다. https://blog.acolyer.org/2016/04/26/the-linux-scheduler-a-decade-of-wasted-cores/ 그리고 원본 논문: Linux 스케줄러: 낭비되는 코어의 10년.

관련 정보