Для чего нужно:
Необходимые условия:
как узнать, поддерживает ли ядро 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
версии пакетов, с поддержкой SMP
% dpkg -l 'avreg*' ii avreg-common 5.4.2 common files for AVReg surveillance system ii avregd 5.4.2 video/audio capture/streaming/record server for AVReg surveillance sys ii avreg-site 5.4.2 web-site for AVReg surveillance system ii avreg-unlink 5.4.1 media storage cleaner for AVReg surveillance system ii avreg-mon 5.4.2 local cameras viewer for for AVReg surveillance system
Реализованный в 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 - бессмысленно
...
}
...
Для приложений, начиная с версий (см. выше)
становится возможным определять дополнительные
конфигурационные файлы - профили (далее по
тексту профилем может быть назван как профиль
так и доп. конфигурационный файл).
Профили(файлы) размещаются в каталоге
«/etc/avreg/profiles».
Имя файла профиля должно соответствовать следующим правилам:
Совет: легко выключать/закрывать профиль без удаления файла, добавив в начало его имени неразрешённый знак, например: «_» или «~».
Для реализации нашей задачи (см. заголовок) нам
понадобится создать несколько профилей, наиболее вероятно
- по количеству cpu.
Итак, предположим, что сервер имеет 2-х ядерный CPU (например, Core2 Duo) и обеспечивает захват, запись и мониторинг с 8-ми однотипных камер(сетевых или аналоговых, в данном контексте - не важно).
Создаём 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». Причём, «devlist» указываем в глобальной секции, так как он потенциально интересен и другим приложениям, например, веб-интерфейсу avreg-site.
Вот, что у нас получилось:
% cat /etc/avreg/profiles/cpu0-cams1-4
# профиль «cpu0-cams1-4»
devlist = 1-4
avregd {
cpu = 0
}
% cat /etc/avreg/profiles/cpu1-cams5-8
# профиль «cpu1-cams5-8»
devlist = 5-8
avregd {
cpu = 1
}
В плане конфигурирования через конф.файлы - всё.
При загрузке и остановке системы, все доступные профили запускаются/останавливаются автоматически. Порядок запуска/остановки определяется символьной сортировки названий профилей, например:
% ls -1 /etc/avreg/profiles cpu0-cams1-4 cpu1-cams5-8 % sudo /etc/init.d/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 killall avregd
Однако, каждым профилем можно управлять независимо:
% sudo /etc/init.d/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 /etc/init.d/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`
С веб-интерфейса доступно управление только по отдельности.
проверяем статус процессов
% /etc/init.d/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] % cat ~/.toprc ... Def fieldscur=AEHIJOQTWKNMbcdfgplrsuvyzX ...
Так как настройки камер для всех процессов avregd находятся в единой базе данных, то возможны некоторые неприятные коллизии, связанные с невозможностью разделения (sharing) некоторых устройств/ресурсов.
Некоторые из этих коллизий контролируются по старту демонов и, если возникло недопустимое пересечение, демон avregd завершает работу с сообщением об ошибке.
Например,
% sudo /etc/init.d/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
В общем, поверхностное знание английского языка (+ словарик) и чтение лог-файлов всегда вам поможет при «разборе полётов».
Перечислим такие «уникальные» для всей системы ресурсы:
Apr 6 18:28:57 host19 avregd-sklad: listen_socket(8081,0) -> bind() failed: Address already in use Apr 6 18:28:57 host19 avregd-sklad: cam[1]: could`t start Multipart JPEG(webcam) stream server on port 8081: Address already in use