Для чего нужно:
Необходимые условия:
как узнать, поддерживает ли ядро SMP
% uname -a Linux host19 2.6.22-4-686-bigmem #1 SMP Tue Feb 12 19:21:05 UTC 2008 i686 GNU/Linux % cat /proc/cpuinfo | egrep '^(processor|model name|cpu MHz)' processor : 0 model name : Intel(R) Core(TM)2 Quad CPU @ 2.40GHz cpu MHz : 2397.669 processor : 1 model name : Intel(R) Core(TM)2 Quad CPU @ 2.40GHz cpu MHz : 2397.669 processor : 2 model name : Intel(R) Core(TM)2 Quad CPU @ 2.40GHz cpu MHz : 2397.669 processor : 3 model name : Intel(R) Core(TM)2 Quad CPU @ 2.40GHz cpu MHz : 2397.669
Реализованный в AVReg способ распределения нагрузки на разные процессоры/ядра (далее cpu) называется «на уровне процессов» (другой возможный способ - «на уровне потоков»).
Он заключается в запуске на одном сервере нескольких независимых копий процесса avregd, каждый из которых настройками в дополнительных конфигурационных файлах - профилях:
Основным и скорее всего единственным недостатком такого способа является невозможность очень точно выровнять нагрузку по cpu, то есть обеспечить равномерную загрузку видеосервера.
Основные достоинства данного способа вытекают из независимости процессов avregd друг от друга, что позволяет иметь/делать нижеследующие вещи:
Напомним, что все основные настройки всех
приложений AVReg сосредоточены в единственном
конфигурационном файле:
«/etc/avreg/avreg.conf» В нём есть
глобальная секция (в самом начале) с общими параметрами
для всех приложений и секции приложений - частные
параметры приложений.
пример синтаксиса avreg.conf:
# глобально указанный параметр
storage-dir = '/var/spool/avreg'
...
avregd {
...
storage-dir = '/home/vasya/my-xxx-video'
# переопределение storage-dir для приложения демона avregd
...
}
...
Помимо основного и единственного конфигурационного файла 'avreg.conf', для всех приложений AVReg существует возможность определения дополнительных конфигурационных файлов - профилей.
Профили размещаются в каталоге
«/etc/avreg/profiles».
Имя файла профиля должно соответствовать следующим правилам:
Совет: легко выключать профиль без удаления файла, добавив в начало его имени неразрешённый знак, например: «_» или «~».
Для реализации нашей задачи (см. заголовок) нам
понадобится создать несколько профилей, наиболее вероятно
- по количеству cpu.
Итак, предположим, что сервер имеет 2-х ядерный CPU (например, Core2 Duo) и обеспечивает захват, запись и мониторинг с 8-ми однотипных камер (сетевых или аналоговых, в данном контексте - не важно).
В каталоге «/etc/avreg/profiles» Создаём
2 текстовых файла - профиля:
Прим.: названия выбраны для наглядности, более
правильно называть профили в соответствии с группами
камер, которые он «обслуживает», например:
office,
sklad13,
road66, …
% ls -l /etc/avreg/profiles/[A-Za-z0-9][A-Za-z0-9-_:]* -rw-r--r-- 1 root root 39 2008-01-28 19:06 /etc/avreg/profiles/cpu0-cams1-4 -rw-r--r-- 1 root root 39 2008-01-28 19:06 /etc/avreg/profiles/cpu1-cams5-8
Так как база данных и корневой каталог медиа-архива
предполагаются общими (в отличие от avreg-multi-user),
нам необходимо изменить лишь настройки демона avregd, а,
конкретно, параметры «devlist», «cpu» и
«http-port». Причём, «devlist»
указываем в глобальной секции, так как это необходимо
знать другим приложениям, например, веб-интерфейсу
avreg-site.
Вот, что у нас получилось:
% cat /etc/avreg/profiles/cpu0-cams1-4
# профиль «cpu0-cams1-4»
devlist = 1-4
avregd {
cpu = 0
http-port = 874
}
avreg-site {
avregd-httpd = 'http://$_SERVER[SERVER_NAME]:874'
}
% cat /etc/avreg/profiles/cpu1-cams5-8
# профиль «cpu1-cams5-8»
devlist = 5-8
avregd {
cpu = 1
http-port = 876
}
avreg-site {
avregd-httpd = 'http://$_SERVER[SERVER_NAME]:876'
}
При загрузке и остановке системы посредством init-скриптов запуска, все доступные профили запускаются/останавливаются автоматически. Порядок запуска/остановки определяется символьной сортировки названий профилей, например:
% ls -1 /etc/avreg/profiles cpu0-cams1-4 cpu1-cams5-8 % sudo service avreg start Starting AVReg surveillance system server: avregd-cpu0-cams1-4[13623] started; avregd-cpu1-cams5-8[13600] started; . % sudo /etc/init.d/avreg stop Stopping AVReg surveillance system server: avregd-cpu0-cams1-4[13623] started; avregd-cpu1-cams5-8 stopped; .
Однако, каждым профилем можно управлять независимо:
% sudo service avreg restart cpu1-cams5-8 Stopping AVReg surveillance system server: avregd-cpu1-cams5-8 stopped; . Starting AVReg surveillance system server: avregd-cpu1-cams5-8[13232] started; . % sudo service avreg stop cpu1-cams5-8 Stopping AVReg surveillance system server: avregd-cpu1-cams5-8 stopped; . % sudo kill `cat /var/run/avregd-cpu1-cams5-8.pid`
С веб-интерфейса доступно управление только по отдельности.
проверяем статус процессов
% service avreg status WARNING: You are not the superuser root. You are assured that correctly do? Status of AVReg surveillance system server: avregd-cpu1-cams5-8[12521] start 19:20; avregd-cpu0-cams1-4[12345] start 19:20;
То же с веб-интерфейса: см. скрин-шот ниже. 
расположение pid-файлов
% ls /var/run/avreg/ avregd-cpu0-cams1-4.pid avregd-cpu1-cams5-8.pid
утилитой PS
% ps u -C avregd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND avreg 12345 0.1 0.1 29436 5216 ? SNsl 19:20 0:00 avregd-cpu0-cams1-4 devs=[1-4] avreg 12521 0.2 0.1 30148 5960 ? SNsl 19:20 0:01 avregd-cpu1-cams5-8 devs=[5-8]
утилитой TOP - смотрим привязку и загрузку CPU
% top -bn1c1 -u avreg top - 19:27:30 up 8:15, 1 user, load average: 0.30, 0.15, 0.13 Tasks: 212 total, 1 running, 211 sleeping, 0 stopped, 0 zombie Cpu0 : 2.1%us, 0.8%sy, 0.0%ni, 94.6%id, 2.2%wa, 0.2%hi, 0.1%si, 0.0%st Cpu1 : 29.5%us, 5.3%sy, 0.0%ni, 65.1%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 4.5%us, 0.8%sy, 0.0%ni, 94.6%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 2.4%us, 0.4%sy, 0.0%ni, 97.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4084136k total, 2196356k used, 1887780k free, 679964k buffers Swap: 8000352k total, 0k used, 8000352k free, 986912k cached PID USER PR NI P VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12345 avreg 25 10 0 29436 5216 1500 S 0 0.1 0:00.50 avregd-cpu0-cams1-4 devs=[1-4] 12521 avreg 25 10 1 30148 5960 1520 S 0 0.1 0:01.12 avregd-cpu1-cams5-8 devs=[5-8]
конфигурация top для просмотра процессов с привязкой к CPU
% cat ~/.toprc ... Def fieldscur=AEHIJOQTWKNMbcdfgplrsuvyzX ...
Так как настройки камер для всех процессов
avregd находятся в единой базе данных, то
возможны некоторые неприятные коллизии, связанные с
невозможностью разделения (sharing) некоторых
устройств/ресурсов.
Некоторые из этих коллизий контролируются по старту демонов и, если возникло недопустимое пересечение, демон avregd завершает работу с сообщением об ошибке.
Например, если несколько профилей пересекаются по номерам камер:
% sudo service avreg start Starting AVReg surveillance system server: avregd-cpu0-cams1[9916] started; ERROR: cam[01] locked another proc avregd-cpu0-cams1[9916], lock file `/var/lock/avreg/DB:avreg5_db..cam01' avregd-5.1.2 error starup. See syslog for detail. avregd-cpu1-cams2 failed; failed!
Смотрим системный журнал:
% sudo tail -n 50 /var/log/daemon.log ... Apr 5 18:08:21 host19 avregd-cpu1-cams2: cam[01] locked another proc avregd-cpu0-cams1[9916], lock file `/var/lock/avreg/DB:avreg5_db..cam01' # вольный перевод: cam[1] заблокирована другим процессом avregd-cpu0-cams1[9916], лок-файл `/var/lock/avreg/DB:avreg5_db..cam01' ... Apr 5 18:08:21 host19 avregd-cpu1-cams2: CLEANUP(0): videoserv terminated
Перечислим такие «уникальные» для всей системы ресурсы: