LINUX.ORG.RU

hlds валится на одно ядро


0

1

Тестировал на CentOS 5.7, 6.0, Debian 5.0.3, как на виртуальных серверах внутри XenServer, так и на физических.
Железки, на которых тестировалось: AMD 1055T, 2xXeon E5645.

Во всех случаях нагрузка валится на одно ядро.
А вот в Windows нагрузка распределяется по всем ядрам равномерно.

Думал на неработающий SMP, но make -j спокойно грузил все предоставленные ему ядра. То есть только hlds валится на одно ядро и больше одного ядра не видит.
Как заставить «раскидывать» нагрузку на все ядра?

top - 18:15:25 up 3 min, 2 users, load average: 0.84, 0.30, 0.11
Tasks: 84 total, 2 running, 82 sleeping, 0 stopped, 0 zombie
Cpu0 : 70.0%us, 30.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 244704k total, 210860k used, 33844k free, 8140k buffers
Swap: 2064376k total, 0k used, 2064376k free, 91832k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1202 root 20 0 80708 62m 8116 R 100.1 26.1 1:37.20 hlds_i686
1203 root 20 0 14920 1232 956 R 0.3 0.5 0:00.19 top

А винде ты суммарную нагрузку на все ядра считал? ТОже небось получается 100%, т.е. одно ядро. Это она просто показывает, что использует все CPU, а на деле — просто перемещает единственный поток исполнения туда-сюда.

unanimous ★★★★★ ()

Программа с единственным исполняемым потоком ДОЛЖНА занимать только одно ядро, а не прыгать по ним.

unanimous ★★★★★ ()
Ответ на: комментарий от unanimous

А винде ты суммарную нагрузку на все ядра считал? ТОже небось получается 100%, т.е. одно ядро. Это она просто показывает, что использует все CPU, а на деле — просто перемещает единственный поток исполнения туда-сюда.

Мне это и нужно. Чтобы был не 1 поток, а много, чтобы занимало все ядра.

Программа с единственным исполняемым потоком ДОЛЖНА занимать только одно ядро, а не прыгать по ним.

То есть это нормально? А что, если, например, будет hlds больше чем физических ядер?

CormHolio ()
Ответ на: комментарий от CormHolio

Чтобы был не 1 поток, а много, чтобы занимало все ядра.

Ну так перепиши эту программу, чтобы она стала многопоточной, делов-то :)

GotF ★★★★★ ()
Ответ на: комментарий от CormHolio

А что, если, например, будет hlds больше чем физических ядер?

Как ни странно, по принципу Дирихле как минимум на одно ядро придётся несколько активных процессов, и они будут выполняться по очереди.

tiandrey ★★★★★ ()
Ответ на: комментарий от CormHolio

Мне это и нужно.

Тебе нужно не это, не обманывай :) Винда, начиная с какого-то обновления для xpsp2, быстро-быстро перекидывает однотредовый процесс по всем ядрам, чтобы геймеры-неучи не вопили «у меня 4 корки, а используется только одно, безобразие!» В результате в сумме процесс выполняется точно также (даже хуже, потому-что быстро-быстро перекидывать однонитевый процесс накладно и это снижает производительность), но чисто визуально все ядра задействованы.

Чтобы был не 1 поток, а много, чтобы занимало все ядра.

Напиши письмо в Valve (или кто там делает сервак контры), чтобы hlds сделали многопоточным.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.