Сборка ядра Linux под HLDS для стабильного fps.


1. Необходимые пакеты:
Убедитесь что они уже установлены, если их нет, то установите самостоятельно.

• gcc (компилятор)
• make, gmake или gnu-make
• fakeroot
• ncurses and ncurses-dev (libncurses5-dev в Debian и Ubuntu)
• chrt (в Debian пакет schedutils, в других может schedtool)
• zlib1g-dev (это для Debian и Ubuntu)
• kernel-package (Debian и Ubuntu)
• patch

2. Скачиваем сурцы ядра и патч

cd /usr/src

Открываем

http://kernel.org/pub/linux/kernel/projects/rt/

и смотрим последнюю версию ядра, для ктоторой есть RT патч и скачиваем этот патч:

wget http://kernel.org/pub/linux/kernel/projects/rt/patch-2.6.31.12-rt21.gz

Теперь идем на

http://kernel.org/pub/linux/kernel/v2.6/

и качаем ядро той же версии, что и патч RT.

wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.12.tar.gz

Распаковываем ядро и патчим его:

tar zxf linux-2.6.31.12.tar.gz
cd linux-2.6.31.12
zcat ../patch-2.6.31.12-rt21.gz | patch -p1

3. Настройка и компиляция ядра

Открываем утилиту для редактирования конфига ядра. Утилита консольная, пойдет и на десктопах и на серверах по SSH.
make menuconfig

И меняем следующие настройки:

General setup:

RCU Subsystem (ignore if not present)Включить RCU Implementation (Preemptible RCU)
Отключить Enable tracing for RCU

Processor type and features:

Включить Tickless System (Dynamic Ticks)
Включить High Resolution Timer Support
Выбрать тип проца
Поменять Preemtion Mode на Complete Preemption (Real-Time)
Включить Enable priority boosting of RCU read-side critical sections (ignore if not present)
Отключить Enable tracing for RCU — currently stats in debugfs (ignore if not present)
Включить Machine Check Exception and select Intel or AMD depending on your CPU
Поменять Timer frequency на 1000 HZ

Power management and ACPI options

Включить Power Management support
Отключить Power Management Debug Support
Отключить Suspend to RAM and standby
Отключить Hibernation (aka ‘suspend to disk’)
Включить ACPI (Advanced Configuration and Power Interface) Support
Отключить CPU Frequency scaling
Отключить CPU idle PM support

Networking support

Networking options

Включить Packet socket: mmapped IO
Отключить QoS and/or fair queueing

Device Drivers

Отключить Watchdog Timer Support
Включить Real Time Clock
Включить PC-style ‘CMOS’

Kernel hacking

Отключить все

Приступаем к компиляции:

make clean
fakeroot make-kpkg clean && fakeroot make-kpkg kernel_image —initrd && cd ..

Ждем……. через некоторое время видим готовый .deb пакет с ядром.

cd ..
dpkg -i ‘ИМЯ_НОВОГО_DEB_ПАКЕТА’

Пакет установится и все зависимости подправит, а GRUB обновит.

4. Загрузка с новым ядром

Перезапустим наш PC.

shutdown -r now

При загрузке необходимо выбрать новое ядро.

Если загрузка прошла успешно, вводим команду

uname -r

Ответ в консоле должен быть что-то типа:

2.6.31.12-rt21

5. Назначение серверам RealTime приоритета
Это делается с помощью команды

chrt -f -p 99 pid

Где pid — pid процесса сервера.

Также можно закинуть все такое дело в CRON скрипт. Например вот так:

#!/bin/shPIDS=`ps ax | grep sirq-hrtimer | grep -v grep | sed -e «s/^ *//» -e «s/ .*$//»`
for p in $PIDS; do
chrt -f -p 99 $p
done

PIDS=`ps ax | grep sirq-timer | grep -v grep | sed -e «s/^ *//» -e «s/ .*$//»`
for p in $PIDS; do
chrt -f -p 51 $p
done

PIDS=`pidof srcds_linux`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_i686`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_i486`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_amd`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_i686`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_i486`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_amd`
for p in $PIDS; do
chrt -f -p 98 $p
done

Этот скрипт назначит приоритет серверам HLDS максимальный

Проверяем!

./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1000 -pingboost 3

Должно получиться 990-1000 довольно стабильных фпс:

CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 996.06 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 992.01 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 994.08 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0 .00 5 0 993.02 0

Теперь мы видим стабильный FPS и стрельбу превосходную!!!

Если хотим иметь не менее 1000 FPS, то запускаем так:

./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1500 -pingboost 3