Начало работы с технологией многопроцессорной обработки и быстрый старт
В этой главе рассматриваются следующие аспекты применения технологии многопроцессорной обработки:
- Войдите в систему как пользователь
root
.
- Перейдите в каталог, в котором находится файл сборки загрузочного образа системы (например,
/boot/build
).
- Создайте копию файла построения загрузочного образа:
cp neutrino-ksz.build neutrino-ksz_smp.build
- Начните редактировать копию файла построения загрузочного образа (например,
neutrino-ksz_smp.build
).
- Найдите ссылку на модуль procnto. Она может выглядеть следующим образом:
PATH=/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin \
LD_LIBRARY_PATH=/proc/boot:/lib:/lib/dll:/usr/lib \
procnto-instr-ksz -v -K z,d
 | В реальном файле сборки нельзя разбивать длинную строку на несколько сегментов с помощью символа (\ ); здесь мы делаем это только для удобочитаемости команд. |
- Вместо procnto укажите подходящую многоядерную версию микроядра ОС; для этого определите используемую одноядерную версию, просмотрев содержимое каталога
$KPDA_TARGET/<CPU>/boot/sys
комплекта разработчика и добавьте к ее имени суффикс -smp. Пример: PATH=/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin \
LD_LIBRARY_PATH=/proc/boot:/lib:/lib/dll:/usr/lib \
procnto-smp-instr-ksz -v -K z,d
- Сохраните изменения в новом файле построения загрузочного образа.
- Создайте новый загрузочный образ с помощью утилиты комплекта разработчика mkifs:
mkifs neutrino-ksz_smp.build neutrino-ksz_smp.ifs
- Поместите новый образ в нужное место (на примере x86 систем). Чтобы иметь возможность загружать систему при возникновении ошибки, мы рекомендуем действовать следующим образом:
- Перезагрузите систему.
- Войдите в систему как обычный пользователь.
- Запустите несколько программ с бесконечным циклом работы. Например, воспользуйтесь утилитой hogs (или top), чтобы определить, какие процессы потребляют максимум ресурсов ЦП:
hogs -n -%10
- Определите, на каких процессорах выполняются процессы, с помощью команды pidin sched.
- Создайте программу
greedy.c
с бесконечным циклом:
#include <stdlib.h>
int main( void )
{
while ( 1 )
{
}
return EXIT_SUCCESS;
}
- Скомпилируйте ее:
ntox86-gcc -o greedy greedy.c
и запустите на целевой системе:
./greedy &
В однопроцессорной системе эта программа занимает весь ресурс ЦП (если не применяется адаптивное квотирование роесурсов), а в многоядерной системе — ресурс лишь одного процессора или ядра.
- Определите, на каких процессорах выполняются другие процессы, с помощью команды pidin sched. Скорее всего, они выполняются не на процессоре, где работает программа greedy.
- Запустите командный интерпретатор на указанном множестве процессоров при помощи утилиты on с ключами -C и/или -R:
on -C 0 ksh
- Запустите несколько новых процессов в этом командном интерпретаторе. Обратите внимание, что они выполняются только на первом процессоре.
- Измените процессорную маску одного из процессов при помощи утилиты slay с ключами -C и/или -R. Теперь этот процесс выполняется только на указанных процессорах, а другие потомки — на процессорах, назначенных командному интерпретатору.
- Измените процессорную маску и маску наследования одного из процессов при помощи утилиты slay с ключами -C и/или -R и -i. Теперь этот процесс и его потомки выполняются только на указанных процессорах.
Предыдущий раздел: перейти