Расчет значения sys_ticrate для VDS

Сообщения
396
Реакции
112
Помог
2 раз(а)
Начал я писать эту статью от нечего делать....

Смотрим параметры планировщика ядра:
Код:
root@k36895:~# sysctl kernel.sched_latency_ns
kernel.sched_latency_ns = 12000000
Этот параметр в нано-секундах, в нашем случае время переключения ядра между задачами 12мс. Чтобы в ходе работы планировщика ваша задача (HLDS) не прерывалась ("лагала"), необходимо чтобы количество прерываний (HLDS) было кратно этому значению (делилось без остатка).

Попробуем увязать полученные мной эмпирические данные, со средним значением FPS = 100... Придумаем какую-нибудь формулу.

Минимальный FPS сервера (при 12 мс планировщика) = (1 / 0.012) * 100 FPS * 0,1 (100 мс) = 833,333333 FPS. Что-то похожее на правду... 8,3к много, поэтому придумаем константу 100мс это время "интерполяции", которая зависит от "мощности" железа. Для любого VDS, предположим, что это предельная величина, а на реальном современном железе эта константа близка к 1.

Оптимальный вариант для расчетного значения (FPS = 833,333333) ближайшее целое кратное 12 - будет 6 (т.е. 600 FPS) и далее, все числа умноженные на 2: 12, 24, 48.... Если выберем 6 - получим около 100 * ( 6 / 8,3 ) = 72 FPS на клиенте, что малова-то... Остается 12 и более, при 12 получим 100 * ( 12 / 8,3 ) = 144,5 FPS :good2:Как раз частота обновления стандартного игрового монитора. Прим.: Какого монитора?????...:rofl: Что ты несешь...:pardon:Идем дальше.

Получаем sys_ticrate = 1200. Попробуем сделать сравнительный анализ...

Вот тут, выложили параметры ядра VDS Арены: kernel.sched_latency_ns = 20000000

Повторяем расчет:

Минимальный FPS сервера для игроков (100FSP) = (1 / 0.02) * 100 * 0,1 = 500 FPS. :scratch_one-s_head:Получается, серверу Арены требуется меньшее количество FPS... В процессе написания статьи этот факт меня ввел в некоторое замешательство... :swoon2:

Смотрим дальше, сколько кадров обрабатывается за время работы планировщика:

Арена 100 / (1 / 0.02) = 2 кадра. В первом варианте: 100 / (1 / 0.012) = 1,2.

Интуиция мне подсказывает, что 1,2 кадра, это сильно хуже чем 2, потому что это не целое число. Для идеального соотношения в 1 кадр на 1 прерывание (HLDS), во втором случае нам нужно просто умножить результат на 2:

sys_ticrate = 1000.

И переформулировав условие в первом абзаце на: "Чтобы в ходе работы планировщика ваша задача (HLDS) не прерывалась ("лагала"), необходимо чтобы количество прерываний было кратно этому значению (делилось без остатка) и чтобы за время работы планировщика обрабатывалось целое число кадров", пытаемся выполнить перерасчет первого варианта:

Для того чтобы за 1 прерывание обрабатывался 1 кадр при 100FPS, меняем: sysctl kernel.sched_latency_ns=10000000

Таким образом мы получаем, минимальный FPS (для обработки 1 кадра на 1 прерывание HLDS) = (1 / 0.01) * 100 * 0.1 = 1000.

Красивая цифра...

Минуточку...., А что мы получаем взамен уменьшения времени работы планировщика вдвое? Херня какая-то...:negative: У нас стрельба точно лучше Арены... Что-то я упустил...

А упустил я количество пользователей на сервере и общее число прерываний необходимое для обработки всех их запросов, а также попутал сетевой FPS (cl_cmdrate) и графической карты :sorry:Вася :crazy:

Начинаем заново строить теорию... :dirol:

Максимальное количество прерываний генерируемое всеми пользователями: 32*102 = 3264...

Округлим до 4000 (не спрашивайте, так надо для UDP, для TCP я бы удвоил и округлил до 10к). Это прерывания ядра: сетевая карта <-> HLDS.

Необходимое время переключения планировщика: 0,25 мс. Меняем: sysctl kernel.sched_latency_ns=250000

Минимальный FPS сервера, для соотношения 4 прерываний ядра на 1 сетевой FPS: 1 / (4 * 0,00025) = 1000 FPS. Оптимально для 2CPU и более...

Устанавливаем sys_ticrate = 1000

Перезапускаем сервер, тестируем стрельбу...:secret: Отписываемся, минусуем и ругаем:rofl:
 
Последнее редактирование:
Сообщения
57
Реакции
10
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Refresh, прям сурово :good2:
 
Сообщения
3,010
Реакции
1,730
Помог
79 раз(а)
в статью не вникал, но у меня так:
root@machine_ubiyce:/ sysctl kernel.sched_latency_ns
kernel.sched_latency_ns = 24000000

Linux machine_ubiyce 4.9.0-11-686-pae #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) i686 GNU/Linux
 
  • Нравится
Реакции: ssx
Сообщения
273
Реакции
2
Арендовал дедик ошибок и падений не было фпс на новом ядре был супер даже при 1200 тик рейте
переехал на арену и тут пошли краши без ошибок + [AMXX] Forwards with more than 32 parameters are not supported (tried to prepare array # 33).
Все прелести арены домучить centos 7 с ядром 2.6.32 + собрать glibc 2.18 под новые пингбуст ) и стрельба капец убогая стала при максимальных рейтах а это мать его тариф про 5 герц когда мой i7 7700K без турбо буста выдавал плавность )
17 Май 2023
1700 отдал в помойку (((
 
Сообщения
396
Реакции
112
Помог
2 раз(а)
Алексеич, включи на часик с sysctl kernel.sched_latency_ns=250000 и sys_ticrate = 1000 , если это VDS и ядер 2 и более... эксперимента ради... если сервер физический с норм сетевыми, то это рабочий вариант.
 
Сообщения
396
Реакции
112
Помог
2 раз(а)
Алексеич, тебе не подойдет, у тебя норм.. просто у серверных сетевых свой буфер, своя очередь.. обычно глубиной 50-60 пакетов.. поэтому, тож на то и выйдет 20-25мс...
 
Сообщения
273
Реакции
2
Тоже отключал потоки и сервер вязал по ядрам самое интересное debian бустил все ядра под 4.2 а на i7 9700k под 4.7 а rocky linux только 2 ядра
 

Garey

ninjaCow
Сообщения
417
Реакции
1,055
Помог
10 раз(а)
Существует ли разница если VDS сервер с KVM, lowlatency ядро. обычное и realtime (добавили без костылей в ubuntu pro).?
Например при работе со звуком с lowlatency ядром можно на аудио-устроиствах ставить меньший период время опроса (к примеру 1ms) и в формулировке не силен в этом плане но "аудио не трещит" как иногда бывает с обычным ядром, может и с HLDS какие-то положительные эффекты будут.) ?
 
  • Нравится
Реакции: ssx

Garey

ninjaCow
Сообщения
417
Реакции
1,055
Помог
10 раз(а)
1337322228, понятно что это все в ядре пересобирается. вопрос в том лучше ли будет производительность у hlds? Может кто-то экспериментировал...
 
Сообщения
273
Реакции
2
@Garey,Ну патчи то что там стоят улучшают работу но только после пересборки пакетов на которых работает hlds
18 Май 2023
и можно без реалтайм а на низкую задержку + перфоманс в настройках самого ядра чтобы проц бустился на максимум
 
Сообщения
396
Реакции
112
Помог
2 раз(а)
Garey, тут главное не переборщить с уменьшением "задержек" (потому что могут появиться побочные эффекты, в виде жестких "залипаний" из-за конкуренции за CPU уже с процессами ядра), есть параметрические варианты контроля "этого метода оптимизации" (/proc/interrupts, /proc/irq/*) и эта функция имеет экстрерум в "нижней" точке. Оптимизировать "на глаз" не имея железа довольно сложно... скоро немного поправлю статью и свою теорию, в соответствии с эмпирическими данными :crazy: Под VDS "за 3 копейки" обычно отдают старое или списанное, морально устаревшее железо и варианты с любыми preemt ядрами, мне кажутся нереальными - сам метод оптимизации и его параметры, подразумевают, что никто более на хосте кроме вас за ресурсы оборудования не борется (как минимум это должно быть что-то с приставкой DEDICATED)...
 
Последнее редактирование:
Сообщения
273
Реакции
2
Refresh, Статью бы по сборке ядра под низкую задержку чтобы ксго разместить и hlds
Но я пачти почти не ставил а pf-kernel стоят патчи такие как оптимизация под конкретный проц и патч против утечки памяти
но думаю это лишнее и лучше разгрузить по максимуму да и стандартное ядро собрано hz 250 и задержка ощутимая так что о приоре не подходит для быстрой регистрации стрельбы
 
Сообщения
80
Реакции
30
Помог
2 раз(а)
@zhorzh78,можете поделиться своими или принять это как хэйт ?
Примите это как парадокс кота Шрёдингера, вроде и похвалили а вроде и нет

PS

Априори, если что - то писать именно так
 
Сообщения
284
Реакции
28
Помог
2 раз(а)
Refresh so if I got this right for kernel.sched_latency_ns = 6000000 I need to set ticrate 600 / 1200(preferably 1200)? .

Also what kernel changes are indicated for a single core vds 2.4-3.2ghz,4gb ram,debian 10?

EDIT: Also why is number of cores relevant,isn't cs 1.6 single core app?
 
Сообщения
396
Реакции
112
Помог
2 раз(а)
KobraFor single core i think better kernel.sched_latency_ns = 10000000 (10M = 10ms) and sys_ticrate 1000

Generalizing (for standard VDS): kernel.sched_latency_ns = 10000000 / num_core

RefreshEDIT: Also why is number of cores relevant,isn't cs 1.6 single core app?
The HLDS process starts a lot of threads, just run htop

In general, a client-server architecture network application requires at least 2 cores, the first for the application, the second for processing network interrupts. If the core frequency is very high 4GHz+, I think you can do something similar on one core.
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу