Ключевые слова: (найти похожие документы)
From: Romik <http://romik-g.livejournal.com/>
Date: Mon, 15 Jan 2007 14:31:37 +0000 (UTC)
Subject: Сборка realtime ядра Linux
Оригинал: http://romik-g.livejournal.com/22641.html
Нашел в закоулках диска переведенную мною для fantoo.org (не работает
в наст.момент) и неизвестно кем (кажется сам amax)
написанную статью, которую и привожу. Русский перевод чуть ниже.
Извиняюсь за не очень качественный перевод. Год с лишним назад у меня
язык был хуже..
Области применения
Реалтайм ядро активно используется для выполнения таких задач как:
1. Разработка, отладка и профилирование программ, измерение скорости
их исполнения
2. Обработка звука, микширование, вещание
3. Работа с video, монтаж, capturing, вещание
4. Работа с тяжело нагруженными internet сервисами (например Java +
SOAP) для обеспечения maximal HIT's per seconds
5. 3D игры (создание, тестирование и отладка)
6. Работа с различными контроллерами, внешним оборудованием, для
SCADA систем
7. Для научных работников, занимающихся моделированием различных
процессов (физики, биологи)
Возможности
* ядро сделано полностью преемтабельным 95% всего времени
* обработчики каждого прерывания работают теперь в контексте своего
ядрового треда
* почти все спинлоки превращены в мутексы
* возможность управлять приоритетами для каждого процесса IRQ XX
Особенности
* тратится время на два переключения контекста для каждого
прерывания и усложнённой логики
* большее количество переключений контекста означает большую
нагрузку на кэш L2 и следовательно существенно меньшую
производительность у кэш/memory bound процессов
* прерывания системного таймера не "бесплатные" и на них тратится
время, приблизительно 1% процессорного времени при HZ=1000
Настройка ядра 2.6.14
в разделе Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
в разделе Processor type and features --->
[*] Generic x86 support
[*] HPET Timer Support
[*] Ktimers 64bit scalar representation
[*] High Resolution Timer Support
(10000) High Resolution Timer resolution (nanoseconds)
Preemption Mode (Complete Preemption (Real-Time)) --->
[*] Local APIC support on uniprocessors
[*] IO-APIC support on uniprocessors
[*] enhanced IO-APIC support
High Memory Support (off) --->
[*] 1Gb Low Memory Support
Timer frequency (250 HZ) --->
в разделе Device Drivers ---> Block devices ---> IO Schedulers --->
<*> CFQ I/O scheduler
Если у Вас ide прерывание вешается на один IRQ вместе со звуковым, вам
надо сделать следующее:
в разделе Device Drivers ---> ATA/ATAPI/MFM/RLL support --->
[ ] Sharing PCI IDE interrupts support
В противном случае - необходимо включить [*] (Если не включать, то
потребуется больше тредов для прерываний)
[*] Sharing PCI IDE interrupts support
Теперь необходимо выключить опции отладки:
в разделе Kernel hacking --->
[ ] Paraniod Timekeeping Checks
[ ] Wakeup latency timing (NEW)
[ ] Automatic spinlock/rwlock/mutex/rwsem deadlock detection (NEW)
в разделе Security options --->
[*] Enable different security models
<M> Default Linux Capabilities
ПРИМЕЧАНИЯ:
* Все настройки рекомендованы для ядра 2.6.14-rt22
* Рекомендуемое значение при работе с JACK для Timer frequency
(CONFIG_HZ) = 250 (при значении 100 возникает наименьшее
количество XRUN при большой нагрузке, зато "плохеет" RT) -
ОБЯЗАТЕЛЬНО ЧИТАТЬ [23]http://kerneltrap.org/node/464 - в
остальных случаях стоит ставить значение 1000 (могут быть залипоны
при max нагрузке на CPU)
* Разумный минимум для High Resolution Timer resolution - 10000 (чем
ниже это значение тем больше нагрузка на процессор, в vanilla
kernel нету HRT, разрешение таймера в vanilla равно 1000000).
Требуемые программы
Необходимо установить пакеты:
* sys-process/schedutils >= 1.4.0
* sys-apps/realtime-lsm >= 0.8.5-r1
* sys-libs/pam >= 0.78-r4
Тюнинг системы
Для начала, подумаем, что мы хотим получить. Например НЕ заикающийся
звук. Отлично! Сперва придётся попытаться сконфигурировать настройки
bios таким образом, чтобы ваша звуковая карта имела своё собственное
прерывание (IRQ)
cat /proc/interrupts
Мы получим примерно похожий результат:
localhost ~ # cat /proc/interrupts
CPU0
0: 19252716 IO-APIC-edge [........N/ 0] pit
1: 572 IO-APIC-edge [........./ 0] i8042
4: 4 IO-APIC-edge [........./ 3] serial
7: 0 IO-APIC-edge [........./ 0] parport0
8: 2 IO-APIC-edge [........./ 0] rtc
9: 0 IO-APIC-level [........./ 0] acpi
14: 2002 IO-APIC-edge [........./ 1] ide0
15: 85407 IO-APIC-edge [........./ 1] ide1
16: 39512 IO-APIC-level [........./ 0] eth0
17: 168862 IO-APIC-level [........./ 0] libata
18: 970071 IO-APIC-level [........./ 0] ehci_hcd:usb1, uhci_hcd:usb2,
uhci_hcd:usb3, uhci_hcd:usb4, uhci_hcd:usb5
19: 976309 IO-APIC-level [........./ 0] ohci1394, ohci1394, nvidia
20: 7017826 IO-APIC-level [........./ 0] EMU10K1
NMI: 0
LOC: 1132111
ERR: 0
MIS: 0
localhost ~ #
где мы видим, строку:
20: 7017826 IO-APIC-level [........./ 0] EMU10K1
Это означает что на IRQ 20 находится звуковая карта SB Audigy
для поднятия приоритетов (в нашем случае звуковой карты) необходимо
иметь установленным пакет sys-process/schedutils версии 1.4.0 или
выше.
Типовые значения приоритетов для звуковой карты:
* 99
* 60
Для того чтобы установить максимальный приоритет для процесса IRQ 20,
выполним команду:
chrt -f -p 99 `pidof "IRQ 20"`
и проверим результат
chrt -p `pidof "IRQ 20"`
ВНИМАНИЕ Установка приоритетов для IRQ требует специальных знаний, а
так же особенностей вашего железа. Не делайте этой операции если вы не
знаете, нужна ли она вам на 100% ! ЗАПОМНИТЕ, что устанавливая наобум
приоритеты для IRQ вы СУЩЕСТВЕННО нарушаете правильную работу OS. Вы
предупреждены.
Ссылки
Вы всегда можете скачать последний .ebuild для
sys-kernel/realtime-sources из Fantoo SVN репозитория:
https://fantoo.ru/svn/sys-kernel/realtime-sources/
Или установить один общий патч на vanilla kernel 2.6.14 (Для ЛЮБЫХ
дистрибутивов Linux)
http://chronos.nsu.ru/fantoo/realtime/linux-2.6.14_p22-realtime-r5.patch.bz2
Оригинальный патч от Ingo Molnar можно скачать тут
http://people.redhat.com/~mingo/realtime-preempt/
Дискуссия о realtime-sources на сайте forums.gentoo.org в разделе
Unsupported http://forums.gentoo.org/viewtopic-p-2951922.html
Описание CONFIG_HZ
* http://kerneltrap.org/node/464
* http://www.uwsg.iu.edu/hypermail/linux/kernel/0311.0/0126.htmlБлагодарности
* Ingo Molnar - за его чудесную реализацию RT патча
* Con Kolivas - за наработки в области планировщиков и тюнинга ядра
* Serge Belyshev [ssb] - за НЕОЦЕНИМУЮ помощь в освоении этого RT
патча, за его багфиксы и помощь в написании документации