Определение нагрузки на конкретное ядро ​​в многоядерном процессоре - PullRequest
0 голосов
/ 17 июня 2010

В многоядерном процессоре есть способы заставить конкретное приложение работать либо в одноядерном, либо в 2-ядерном, либо в 3-ядерном.Рассматривая сценарий, в котором приложение (имеющее много потоков) работает на более чем одном ядре, как планировщик сможет определить нагрузку (количество потоков) на конкретном ядре в многоядерном процессоре и соответственно распределить (сбалансировать)загрузить (распределить потоки) между различными ядрами?

Ответы [ 2 ]

1 голос
/ 20 июня 2010

В большинстве планировщиков каждый ЦП является независимой сущностью, которая проверяет текущее состояние системы и пытается найти что-то полезное для работы. Представьте себе процессор как трудоголика - он всегда будет пытаться сделать все возможное. Планировщик не является «боссом», который говорит процессорам, что делать дальше, и следит за тем, чтобы все делали свою долю. Скорее, каждый ЦП следует алгоритму планирования, в котором он будет проверять состояние системы и пытаться выяснить, как выполнить большую часть работы, которую он может.

Алгоритм планирования может предусматривать «привязку к потоку», что означает, что ЦП предпочтет запустить ранее запланированный поток, так как этот поток, скорее всего, будет в кеше. Однако, в отличие от балансировки сетевой нагрузки, алгоритмы планирования обычно (но не всегда) связаны с тем, чтобы каждый ЦП был максимально занят, даже если рабочая нагрузка оказывается несправедливой.

Почему? Если рабочая нагрузка сильно загружает ЦП, то каждый ЦП сможет работать на уровне, близком к 100%, и рабочая нагрузка будет справедливой. Если рабочая нагрузка требует интенсивного ввода-вывода и центральные процессоры проводят большую часть своего времени в ожидании доступности общих ресурсов, что является нормальным случаем для реальной системы, любая стратегия балансировки нагрузки, скорее всего, расходится с простой работой по освобождению общих ресурсов как как можно быстрее.

Простой многопроцессорный планировщик будет включать в себя очередь запускаемых потоков и список заблокированных потоков - эта очередь и список являются структурами данных, общими для всех процессоров, с доступом, защищенным блокировкой. Когда ЦП входит в планировщик, он выбирает поток с наивысшим приоритетом и запускает этот поток до тех пор, пока не истечет срок действия блоков или выделенного временного интервала. Если поток блокируется, он помещается в список заблокированных потоков до тех пор, пока он не станет снова работоспособным. Если временной интервал истекает, поток помещается в отложенную позицию в очереди выполняемых потоков, и выбирается другой поток.

0 голосов
/ 05 октября 2010

В Linux вы можете использовать taskset -c ### ./executable, где #### - список процессоров

...