Главная Форум Новые сообщения Заказать сервер CS 1.6 Бесплатный хостинг CS 1.6 Авторство csError QIWI PHP скрипт Вход

  • Страница 1 из 1
  • 1
Модератор форума: In1ernal_Error  
Форум » Создание и настройка серверов » Linux » Оптимизация ядра Linux для HLDS (debian 6.0.1, kernel 2.6.31-12)
Оптимизация ядра Linux для HLDS
In1ernal_ErrorДата: Воскресенье, 12.06.2011, 13:27 | Сообщение # 1
Группа: Администраторы
Сообщений: 70
Репутация: «121»
Статус: Offline
Вступление
Здесь пойдет речь на об оптимизации ядра Linux для HLDS с целью получения стабильных 1000FPS.
Понадобятся прямые руки, немножко серого вещества, сигареты, пиво и 2 часа времени.
Все вопросы оставлять в этой теме.
Итак, начнем

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. Скачиваем сурцы ядра и патч
Code
cd /usr/src

Открываем http://kernel.org/pub/linux/kernel/projects/rt/ и смотрим последнюю версию ядра, для ктоторой есть RT патч и скачиваем этот патч:
Code
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.
Code
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.12.tar.gz


Распаковываем ядро и патчим его:
Code
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.
Code
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

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



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

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

Теперь идем на часок покурить, попить пивка, расслабиться. Возвращаемся и видим готовый .deb пакет с ядром.

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


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

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

Самое время перезагрузиться.

Code
shutdown -r now

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

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

В ответ консоль должна выдать что-то в духе
Code
2.6.31.12-rt21


5. Назначение серверам RealTime приоритета
Это делается с помощью команды
Code
chrt -f -p 99 pid

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

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

#!/bin/sh

PIDS=`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


Этот скрипт назначит обычным процессам приоритет пониже, а серверам - по максимуму

Проверяем!
Code
./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1000 -pingboost 3


Должно получиться 990-1000 довольно стабильных фпс. У меня на домашнем P4 вот так получилось:
Code

         CPU   In    Out   Uptime  Users   FPS    Players
         99.90  0.00  0.00       4     0  995.02       0
         stats
         C PU   I n     O ut   U p time   Users   FPS    Players
         99.90  0.00  0.00       4     0  993.05       0
         stats
         CPU   In    Out   Uptime  Use rs   F  PS    P  la yers
         99.90  0.00  0.00       4     0  992.06       0
         stats
         CPU   In    Out   Uptime  Users   FPS    Players
         9 9.90  0.00  0 .00        4       0    995.02       0

Нагрузка на ядро конечно бешеная, но зато стрельба на высоте

Если надо совсем впритык к 1000 FPS, то запускаем так:
Code
./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1500 -pingboost 3


Спасибо за внимание!
Все вопросы в эту тему
Форум » Создание и настройка серверов » Linux » Оптимизация ядра Linux для HLDS (debian 6.0.1, kernel 2.6.31-12)
  • Страница 1 из 1
  • 1
Поиск:

Бесплатный хостинг uCoz