В многопроцессорной системе есть два способа управления загрузкой процессоров:
Дополнительные сведения об управлении работой процессоров приведены в следующих разделах:
Системный администратор (или
другой пользователь с правами root) может вызывать команду cpu_state для просмотра списка процессоров
системы и ограничения доступа к некоторым из них. Список содержит
следующую информацию о каждом из процессоров системы:
Имя | Имена процессоров ODM в формате procx, где x - физический номер процессора. |
CPU | Логические номера процессоров |
Состояние | Состояния процессоров ODM при следующей загрузке |
Расположение | Имена процессоров ODM в формате AA-BB-CC-DD |
Примечание: Команда cpu_state не позволяет узнать текущее состояние процессора. В ее выводе указывается состояние, в котором будет находится процессор при следующем запуске системы (включен или выключен). Если процессор не отвечает, значит произошел сбой (процессор находится в состоянии неисправен) или возникла ошибка связи. В этом случае в выводе команды cpu_state будет показано сообщение Не отвечает.
В приведенных ниже примерах описаны различные конфигурации процессоров. Кроме того, для каждого варианта приведен вывод команды cpu_state. Примеры иллюстрируют взаимосвязь между физическими номерами процессоров, логическими номерами процессоров, текущим состоянием процессора и состоянием процессора при следующей загрузке.
В простейшем случае все процессоры
системы включены и работают. Рассмотрим двухпроцессорную систему, в
которой оба процессора включены. В приведенной ниже таблице перечислены
соглашения о нумерации и соглашения ODM.
Соглашения о присвоении имен процессорам | ||||
Имя ODM для карты | Имя ODM для процессора | Логический номер | Текущее состояние процессора в ODM | Поле состоянияcpu_state |
cpucard0 | proc0 | 0 | Разрешено | Разрешено |
cpucard0 | proc1 | 1 | Разрешено | Разрешено |
Для описанной конфигурации команда cpu_state -l выдаст примерно следующую информацию:
Имя CPU Состояние Расположение proc0 0 Включен 00-0P-00-00 proc1 1 Включен 00-0P-00-01
В следующем примере
рассматривается та же система, в которой установлена дополнительная карта CPU
с двумя процессорами. По умолчанию процессоры включены. Новая
конфигурация описана в приведенной ниже таблице:
Соглашения о присвоении имен процессорам | ||||
Имя ODM для карты | Имя ODM для процессора | Логический номер | Текущее состояние процессора в ODM | Поле состояния cpu_state |
cpucard0 | proc0 | 0 | Разрешено | Разрешено |
cpucard0 | proc1 | 1 | Разрешено | Разрешено |
cpucard1 | proc2 | 2 | Разрешено | Разрешено |
cpucard1 | proc3 | 3 | Разрешено | Разрешено |
Для этой конфигурации команда cpu_state -l выдаст примерно следующую информацию:
Имя CPU Состояние Расположение proc0 0 Включен 00-0P-00-00 proc1 1 Включен 00-0P-00-01 proc2 2 Включен 00-0Q-00-00 proc3 3 Включен 00-0Q-00-01
В некоторых случаях процессор может быть выключен. Это означает, что у него нет логического номера. Кроме того, при начальном тестировании процессора во время загрузки может возникнуть ошибка. В этом случае он будет помечен ODM как неисправный. Процессоры иногда выключаются для обслуживания или тестирования. При изменении состояния процессора с помощью команды cpu_state его текущее состояние остается прежним, но немедленно изменяется состояние при следующей загрузке (значение поля Состояние в выводе команды cpu_state).
Для того чтобы выключить процессор 1 в описанной выше системе с четырьмя процессорами, нужно выполнить следующую команду:
cpu_state -d proc1
Конфигурация процессоров описана в
следующей таблице.
Соглашения о присвоении имен процессорам | ||||
Имя ODM для карты | Имя ODM для процессора | Логический номер | Текущее состояние процессора в ODM | Поле состояния cpu_state |
cpucard0 | proc0 | 0 | Разрешено | Разрешено |
cpucard0 | proc1 | 1 | Разрешено | Запрещено |
cpucard1 | proc2 | 2 | Разрешено | Разрешено |
cpucard1 | proc3 | 3 | Разрешено | Разрешено |
Для этой конфигурации команда cpu_state -l выдаст примерно следующую информацию:
Имя CPU Состояние Расположение proc0 0 Включен 00-0P-00-00 proc1 1 Выключен 00-0P-00-01 proc2 2 Включен 00-0Q-00-00 proc3 3 Включен 00-0Q-00-01
Конфигурация процессоров, которая
будет установлена при следующей загрузке системы, описана ниже:
Соглашения о присвоении имен процессорам | ||||
Имя ODM для карты | Имя ODM для процессора | Логический номер | Текущее состояние процессора в ODM | Поле состояния cpu_state |
cpucard0 | proc0 | 0 | Разрешено | Разрешено |
cpucard0 | proc1 | 1 | Запрещено | Запрещено |
cpucard1 | proc2 | 2 | Разрешено | Разрешено |
cpucard1 | proc3 | 3 | Разрешено | Разрешено |
Вывод команды cpu_state -l будет выглядеть следующим образом:
Имя CPU Состояние Расположение proc0 0 Включен 00-0P-00-00 proc1 - Выключен 00-0P-00-01 proc2 1 Включен 00-0Q-00-00 proc3 2 Включен 00-0Q-00-01
Здесь описан последний вариант
конфигурации процессоров рассматриваемой системы. Предположим, что во
время начального тестирования при загрузке системы процессоры proc0
и proc3 оказались неисправными. Конфигурация процессоров для
этого случая описана в следующей таблице.
Соглашения о присвоении имен процессорам | ||||
Имя ODM для карты | Имя ODM для процессора | Логический номер | Текущее состояние процессора в ODM | Поле состояния cpu_state |
cpucard0 | proc0 | - | Неисправен | Нет ответа |
cpucard0 | proc1 | - | Запрещено | Запрещено |
cpucard1 | proc2 | 0 | Разрешено | Разрешено |
cpucard1 | proc3 | - | Неисправен | Нет ответа |
Вывод команды cpu_state -l будет выглядеть следующим образом:
Имя CPU Состояние Расположение proc0 - Нет ответа 00-0P-00-00 proc1 - Выключен 00-0P-00-01 proc2 0 Включен 00-0Q-00-00 proc3 - Нет ответа 00-0Q-00-01
Пользователи могут указать, что их процессы должны выполняться на определенном процессоре. Такое действие называется привязкой. Системный администратор может связать любой процесс с любым процессором. Для этого предусмотрена команда bindprocessor.
Важно понимать, что с процессором связан не сам процесс, а его нити ядра. Это означает, что нити ядра всегда будут выполняться на одном и том же процессоре до тех пор, пока связь не будет удалена. При создании новой нити она связывается с тем же процессором, что и ее родительская нить.
Это относится к главной нити нового процесса, создаваемого с помощью вызова fork. Новая нить будет связана с тем же процессором, что и нить, вызвавшая fork. При вызове функции exec привязка к процессору не наследуется. Если процесс связан с процессором, то все его дочерние процессы будут связаны с тем же процессором, если это не будет явно переопределено.
Для создания связи процесса с процессором нужно указать логический номер целевого процессора. Таким образом, процесс может быть связан только с включенным процессором. Для просмотра логических номеров процессоров вызовите команду bindprocessor -q. В системе с четырьмя включенными процессорами эта команда выдаст примерно следующую информацию:
Доступные процессоры: 0 1 2 3
Из программы нить можно связать с процессором с помощью процедуры bindprocessor. Она позволяет связать с процессором выбранную или все нити ядра. Кроме того, из программы можно удалить связь нити с процессором.
Глава 10, Программирование в многопроцессорных системах
Команды cpu_state и bindprocessor
Функция bindprocessor