[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Управление работой процессоров

В многопроцессорной системе есть два способа управления загрузкой процессоров:

Дополнительные сведения об управлении работой процессоров приведены в следующих разделах:

Команда cpu_state

Системный администратор (или другой пользователь с правами 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


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]