Многопоточность srcds на WINDOWS

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#1 Сообщение 07.02.2012, 23:46

Собственно это вторая часть темы многопоточности сервера CS:S, посвящена уже windows.
Обещание вальвы:
8-) Valve: Multi-threaded server code is now enabled by default under Linux (already enabled on Windows)
как можно заметить, относится и к этой операционной системе. Некоторые товарищи ранее утверждали что в отличае от linux, на их серваках под виндой многопоточная работа присутствует, но доказательств приведено не было (можете поискать через поиск, вот один из них: http://forum.csmania.ru/viewtopic.php?f ... 02#p713202).
Не знаю когда смогу, и смогу ли вообще, запустить свой сервак на винде и проверить. Похоже я здесь единственный владелец ксс серва с онлайном по вечерам более 50 игроков. Но всеже, если кто-то сможет доказать, заскриньте диспетчер задач и выложите здесь. Доказательством считается любой скрин, где напротив процесса srcds нагрузка процессора больше 120%/N, где N - количество ядер у вашего процессора.
К примеру для 2-х ядерного процессора больше 60%, для 4-х ядерного процессора больше 30% и т.д.

Аватара пользователя
PhO3n1X
Сержант
Сержант
Сообщения: 96
Зарегистрирован: 01.01.2006
Откуда: Latvia
Поблагодарили: 1 раз
Контактная информация:

#2 Сообщение 08.02.2012, 00:59

У меня больше 51% на 2х ядрах выжать не получилось :( . Проверял на тестовом локальном КСС ДМ сервере, до отказа забитом ботами.
GunGame.LV - Pro Gamers Portal | CS:S GG & DM Servers
Изображение

Изображение Изображение

Аватара пользователя
Overseer618
Overseer
Overseer
Сообщения: 272
Зарегистрирован: 06.05.2010
Откуда: Екатеринбург
Контактная информация:

#3 Сообщение 08.02.2012, 08:21

Изображение

Зеленая стрелка указывает на графу, в которой написано, что в этом столбце указано количество потоков, используемых процессом.

Черная стрелка указывает на количество потоков.

Если host_thread_mode стоит 2 - сервер запустится в многопоточном режиме.
Изображение
Изображение

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#4 Сообщение 08.02.2012, 16:39

НЕТ и НЕТ, потоки не считаются. Я уже третий раз пишу, то, что у приложения есть потоки, не делает его многопоточным!
Многопоточное приложение - это приложение, способное распределять свою основную вычислительную нагрузку по ядрам процессора. Т.е. над выполнением приложения должны трудиться несколько ядер. В пике нагрузки производительность многопоточного приложения должна быть больше 120%/N, где N - количество ядер. И пускай даже одно на 100%, а второе на 5-10%. Это уже будет многопоточность.
Например в сервере CS:S основная вычислительная нагрузка - рассчет физики. Если заявляется что сервер многопоточный - над обсчетом физики должны трудиться несколько ядер.
Overseer618, дайте мне исходный код любой однопоточной программы, я вначале несколькими строками сделаю в ней сколько вам угодно висящих, ничего не выполняющих, потоков. От этого она станет многопоточной? Нет! Потому как дополнительные потоки ничего не выполняют и приложение дальше будет грузить только одно ядро.
Поэтому:
Доказательством считается любой скрин, где напротив процесса srcds нагрузка процессора больше 120%/N, где N - количество ядер у вашего процессора.
К примеру для 2-х ядерного процессора больше 60%, для 4-х ядерного процессора больше 30% и т.д.
Последний раз редактировалось kadet89 08.02.2012, 16:46, всего редактировалось 3 раза.

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#5 Сообщение 08.02.2012, 16:42

что у приложения есть потоки, не делает его многопоточным!
Многопоточное приложение - это приложение, способное распределять вычислительную нагрузку по ядрам процессора и нагружать более менее равномерно все ядра.
Я просто вынужден заметить, что здесь отвергается реальная формулировка и предлагается желаемая. Всем хочется, чтобы равномерная нагрузка была, однако термин "многопоточное приложение" означает именно то, что он должен означать - приложение, использующее несколько потоков.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#6 Сообщение 08.02.2012, 16:43

NiGHt-LEshiY, я поправил пост, но вы первее процитировали...

oblomkrs
Майор
Майор
Сообщения: 775
Зарегистрирован: 02.07.2011
Благодарил (а): 4 раза
Поблагодарили: 32 раза

#7 Сообщение 08.02.2012, 17:47

Однако на окнах всё одинаково распределяется по ядрам(когда кадет на твоих скринах работа на линухе беспорядочная)

Изображение
Качественный хостинг OPTIBIT в Красноярске
NOVOSIBIRSK-CSS.RU|Only DUST2[NSK] ip:46.38.63.119:27015
NOVOSIBIRSK-CSS.RU|Only $2000$+AWP LEGO[NSK] ip:46.38.63.119:27016

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#8 Сообщение 08.02.2012, 18:31

oblomkrs, ещеб не распределялось, на твоем скрине с десяток программ грузит проц.
Это тема про многопоточность srcds, а не про распределении виндой процессов по ядрам. На моих скринах работает всего один сервер и работает в один поток. А ты это условие не соблел, не понимаю чем тут гордиться? Если я запущу в лине столько же сервов, сколько у тебя, у меня будет аналогичная картина.
Между прочем в лине тоже всё нормально распределяется, просто софт для вывода выводит не мгновенные значения, а средние за определенный промежуток времени.
Линь часто кидает процессы с ядра на ядро для равномерного прогрева проца. Вот эти перекидоны программы top, atop и htop иногда выводят как равномерную загрузку всех ядер, хотя это не так.
Последний раз редактировалось kadet89 08.02.2012, 19:24, всего редактировалось 1 раз.

oblomkrs
Майор
Майор
Сообщения: 775
Зарегистрирован: 02.07.2011
Благодарил (а): 4 раза
Поблагодарили: 32 раза

#9 Сообщение 08.02.2012, 18:41

oblomkrs, ещеб не распределялось, на твоем скрине с десяток программ грузит проц.
Я всё выгружу запущу только одни сервы и будет тоже самое
Качественный хостинг OPTIBIT в Красноярске
NOVOSIBIRSK-CSS.RU|Only DUST2[NSK] ip:46.38.63.119:27015
NOVOSIBIRSK-CSS.RU|Only $2000$+AWP LEGO[NSK] ip:46.38.63.119:27016

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#10 Сообщение 08.02.2012, 19:16

Естесно будет одно и тоже, у тебя всеравно останется несколько работающих программ, а точнее серверов. Повторяю, тема создана не для обсуждения кто лучше распределяется процессы по ядрам, линь или винда, а чтобы определить есть ли многопоточность в рамках одного работающего сервера.
Давай так, я не хочу больше с тобой спорить, сделай вот это:
1) выгрузи всё, что хоть как-то нагружает процессор
2) запусти один CS:S сервер
3) поставь на него любую минимапу с простой физикой, например mg_smash_island_b5: http://www.gamebanana.com/css/maps/90815
4) запусти человек 20-30
После этого ты увидешь один из вариантов:
1) Как этот твой один сервак, если он работает в один поток, не способен обработать всего каких-то несколько десятков взаимодействий, загружает одно ядро твоего проца под 100% и захлебывается в лагах. А остальные ядра у тебя загружены под 0%.
2) Как этот твой один сервак, если он работает в несколько потоков, всего из-за каких-то несколько десятков взаимодействий порядочно загружает все или более одного ядра твоего проца.
Первый вариант докажет что многопоточности нет, второй - что есть. И оба они покажут неэффективность кода, написанного вальвой. Вот и всё.
Скрин диспетчера задач - и тему можно закрывать.

scorp75
Майор
Майор
Сообщения: 586
Зарегистрирован: 20.11.2008
Откуда: Чебоксары
Поблагодарили: 52 раза

#11 Сообщение 08.02.2012, 20:52

kadet89 Если не трудно обьясните тугому, зачем все это? Зачем данная тема? Попытка поймать на лжи вальве?
Я например не почуствовал разницы до и после обновки на своих серверах тф2. Может и есть много поточность но как то теплее не стало. Да и до того не было особо тоскливо.
К чему вообще данна тема?

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#12 Сообщение 08.02.2012, 21:12

scorp75, ну дак в тф2 нет физики вообще, там нечему проц нагружать и многопоточность вовсе не нужна.
Я темы создаю чтобы как-то решить вечную проблему лаг больших CS:S сервов (более 45 игроков онлайна) и маленьких CS:S MG сервов (более 25 игроков онлайна). Если многопоточность на винде есть, я не поленюсь, потрачу неделю на переписывание всех скриптов, установку виртуалки и на перенос своих серваков. На репутацию вальвы мне по*, она и так ниже плинтуса, еще одна лож ничего не изменит. Мне главное решить свои проблемы. А параллельно, я надеюсь, эта тема поможет и другим, т.к. многие побежали скупать многоядерные процессоры после анонса вальвы про многопоточноть, и многие до сих пор верят что она есть, хотя вроде как выходит что её нет, по крайней мере на лине.

oblomkrs
Майор
Майор
Сообщения: 775
Зарегистрирован: 02.07.2011
Благодарил (а): 4 раза
Поблагодарили: 32 раза

#13 Сообщение 09.02.2012, 05:54

Изображение
Скрин сделан на i3 2100 с выкл НР
Вот видос с вкл НР https://rghost.ru/36419757
Качественный хостинг OPTIBIT в Красноярске
NOVOSIBIRSK-CSS.RU|Only DUST2[NSK] ip:46.38.63.119:27015
NOVOSIBIRSK-CSS.RU|Only $2000$+AWP LEGO[NSK] ip:46.38.63.119:27016

Аватара пользователя
Overseer618
Overseer
Overseer
Сообщения: 272
Зарегистрирован: 06.05.2010
Откуда: Екатеринбург
Контактная информация:

#14 Сообщение 09.02.2012, 08:38

На серверах CS:S обработкой физики занимается 1 поток, который всегда будет работать на 1 ядре, разделить нагрузку невозможно. Остальные потоки распределяются по ядрам, но не так сильно нагружают процессор. Сделать обработку физики многопоточной очень сложно за счет того, что обработка физики должна идти последовательно для каждой группы объектов, а если обрабатывать физику асинхронно - потоки должны будут ожидать конца обработки физической модели каждого объекта из группы столкновения, перед обработкой текущего, при этом потоки будут больше ждать чем работать.

Пример: Поток должен обработать столкновение ящика с тремя бочками. Пока остальные потоки не обработают физическую модель всех бочек текущий поток не сможет обработать столкновения ящика, т.к. не будет знать тип объектов столкновения, их плотность, физ. свойства и т.д.

Все Ясно?
Изображение
Изображение

kadet89
Майор
Майор
Сообщения: 557
Зарегистрирован: 26.12.2006

#15 Сообщение 11.02.2012, 03:23

Т.е. Вы, Overseer618, утверждаете что в cryengine, unrealengine тоже в один поток? Это далеко не так... Есть много способов распараллелить обсчет физики.
Физика это не только столкновения. А если рассматривать проп статик + проп физик, или проп динамик? проп динамик - например едет поезд по заданной траектории. Его ничто не может сшибить с заданного пути.
проп статик + проп физик - бочка катится по твердому брашу, или какой-нибудь твердой статичной модельке. Или игрок бежит по твердому брашу.
Т.ч. когда идет взаимодействия подвижного объекта с неподвижным, эта проблема вовсе отсутствует. Таким образом можно сделать отдельный поток на каждый подвижный объект (ну или на группу объектов), и отдельный поток на коллизию. Поток на отдельный объект при выявлении касания с другим подвижным объектом сообщает потоку рассчета коллизии и ждет от него дальнейшего вектора направления и скорости, а дальше по ним катит бочку дальше. Т.е. их надо засинхронизировать только на моменты коллизии.
В обычном случае, в отсутствии коллизии физических объектов, нагрузка будет распределена абсолютно равномерно. При постоянной абсолютной коллизии всех объектов будем иметь ситуацию, которая сейчас - загруженное одно ядро.
А коллизии происходят в контре не так часта, 90% нагрузки - это как раз не коллизия подвижных объектов.
Кроме физики есть и другие задачи. Их тоже можно выделить в отдельный поток.
К примеру обработка команд от каждого клиента и формирование и отправка команд каждому клиенту.
Обработка голоса (микрофон), тоже часто сильно нагружает.
Стадо бегущих игроков по твердому брашу, тоже создает большую нагрузку. А ведь все карты строятся из брашей.
Я не вижу проблем...
И в конце концов уже 12 год как никак, рынок наводнен самыми разными технологиями типо CUDA, OPENCl и т.д. Всё это стандартизировано и раз в 5-10 увеличивает скорость обработки таких задач.
На CUDA вообще писать одно удовольствие, на оф сайте наиподробнейшие маны, с хорошими примерами.
Держатели крупных серваков готовы выложить круглую сумму, чтобы их серваки не лагали, но вальва не предоставляет никакиго решения, ни многопоточность, ни куду, ни что-то другое.

Вальва всетаки ответила, многопоточности нет ни в лине, ни в винде.

Ответить