LINUX.ORG.RU

cpu, нагрузка, равноправие

 , , ,


0

0

вот есть у меня 4-х головый проц.
есть сколько-то запущенных программ.
нагрузка распределяется так:
больше всего загружено 1-е ядро
потом идёт второе
и т.д.
как сделать так, чтобы нагрузка распределялась равномерно не привязывая пиды к ядрам?
cfs/bfs роли не играют

★★★★

люто присоединяюсь, та же проблема с восьмиголовым камнем.

NeverLoved ★★★★★
()

Тебя интересует равномерная нагрузка несколькими процессами?

olibjerd ★★★★★
()

Как ты это представляешь — перекидывать грузящий процесс поочерёдно по всем ядрам, чтобы он тормозил не на одном, а на всех четырёх сразу?

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

возможно:
1: 10%
2: 7%
3: 4%
4: 1%
выбор очевиден - нагружаем наименее загруженное ядро, т.е. 4-ое
и так со всеми процессами.

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

Контрпример, доказывающий моё утверждение by example: в системе запущено два однопоточных приложения A и B. A потребляет все предоставленные ему кванты времени, B — только половину. Подумайте сами, как при этом распределится нагрузка на n>1 ядер.

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

ты пойми простую вещь - никто не требует 100% равновесия, особенно касаемо всяких компиляний/кодирований и т.д.
но какого хрена процесс в первую очередь грузит первое ядро!?
остальные зачем?
кто мешает найти наименее занятое?

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

В моём примере у нас только два процесса. И он доказывает, что полностью равномерное распределение процессов по ядрам в общем случае невозможно.

Более сложные случаи можете помыслить сами, среди них могут быть и благоприятные, но в общем случае распределение будет неравномерным. Что непонятно?

Ну и в реалистичном случае, если большинство потоков могут пропускать кванты на разного рода IO, равномерное распределение потоков по ядрам вообще никакого прироста производительности не даст.

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

кто мешает найти наименее занятое?

Ну и зачем разгонять все ядра на полную скорость, если можно спихнуть всё на одно? Будет меньше греться.

i-rinat ★★★★★
()

У меня ядро под нагрузкой периодически меняется.

http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-proc...

PS: еще есть такая шутка, как cpu parking.

Для Ъ:

The scheduler attempts to keep processes on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPU affinity is useful only in certain applications. For example, application such as Oracle (ERP apps) use # of cpus per instance licensed. You can bound Oracle to specific CPU to avoid license problem. This is a really useful on large server having 4 or 8 CPUS

где-то тут: http://www.docstoc.com/docs/92305725/IEEEComputer_201003#

soomrack ★★★★★
()
Последнее исправление: soomrack (всего исправлений: 1)
Ответ на: комментарий от dmfd

производительность? кто это сказал?
ты понимаешь, что по-умолчанию вешать процесс на первое попавшееся ядро неправильно!?

megabaks ★★★★
() автор топика
Последнее исправление: megabaks (всего исправлений: 1)
Ответ на: комментарий от i-rinat

это совсем другая история, дружище

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

полностью равномерное распределение процессов по ядрам в общем случае невозможно

цитирую для незрячих

ты пойми простую вещь - никто не требует 100% равновесия, особенно касаемо всяких компиляний/кодирований и т.д. но какого хрена процесс в первую очередь грузит первое ядро!?

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

но какого хрена процесс в первую очередь грузит первое ядро!?

Видимо потому, что самый жручий процесс всегда кидается на первое ядро.

Только что написал программу, которая просто непрерывно гоняет вычисление. Первый экземпляр этой программы в моей системе загружает первое ядро. Второй — второе, третий — третье. Just as expected.

dmfd
()

не, я, конечно, могу слабадь на баше скрипт с использованием тех же schedtool, но по-моему это задача планировщика, а не юзерспейсных костылей

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

Видимо потому, что самый жручий процесс всегда кидается на первое ядро.

надо же!
ты хотя бы чуть-чуть углубился в тему - вопрос: КАКОГО ХРЕНА ОН ТАК ДЕЛАЕТ???
остальное неважно абсолютно

megabaks ★★★★
() автор топика

надо ещё кэш учитывать, если всё по разным ядрам раскидывать, придётся каждый раз заново кэши грузить, а если один и тот же процесс крутится на одном ядре, то количество попаданий в кэш будет больше

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

это ты просто даже не пытаешься!
если есть 8 прог с нагрузкой в 1% от ядра, то что мешает планировщику повесить по 2 процесса на ядро!?
особенно в начале их работы - далее, по мере роста аппетитов, никто не запрещает перекинуть на другое ядро

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

для тугодумов:
есть некое кол-во процессов
есть некое кол-во ядер/процессоров
кто мешает посмотреть потребление проца каждым процессом?
кто мешает посмотреть нагрузку каждого ядра?
а потом, после подсчётов, кто мешает равномерно распределить процессы по ядрам?

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

если есть 8 прог с нагрузкой в 1% от ядра, то что мешает планировщику повесить по 2 процесса на ядро!?

И зачем? Никакого профита для не realtime задач это не даст, а так можно будет усыпить часть ядер.

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

чувааааак - энергосбережение это удел обездоленых с недоПК ака ноуты и планшеты
речь про нормальное железо и вопрос сбережения энергии тут вообще никаким боком!
ты хорош отмазываться - ответы отвечай, а не стрелы метай!

megabaks ★★★★
() автор топика
Последнее исправление: megabaks (всего исправлений: 1)
Ответ на: комментарий от xtraeft

facepalm

сам дурак! :3
просто ежечасная проверка обновлений :)

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

Чем быстрее процесс отработает, тем быстрее уснёт, и перестанет греть вовсе.

Он быстрее отработает на уже разогнанном ядре.

i-rinat ★★★★★
()
Ответ на: комментарий от swwwfactory

нет
portage: -j3
make: -j5
cores: 4
и речь не о том - таки портаж со своими компеляниями грузит всё и вся на всю катушку

megabaks ★★★★
() автор топика
Последнее исправление: megabaks (всего исправлений: 1)
Ответ на: комментарий от megabaks

для тугодумов:
есть некое кол-во процессов есть некое кол-во ядер/процессоров кто мешает посмотреть потребление проца каждым процессом? кто мешает посмотреть нагрузку каждого ядра? а потом, после подсчётов, кто мешает равномерно распределить процессы по ядрам?

Жизнь мешает.

In computer science, multiprocessor scheduling is an NP-hard optimization problem.

http://en.wikipedia.org/wiki/Multiprocessor_scheduling

soomrack ★★★★★
()
Последнее исправление: soomrack (всего исправлений: 1)
Ответ на: комментарий от megabaks

ты тоже мыслишь категориями производительности/энергосбережения?

Погоди. Я думал, что ты хочешь раскидать процессы по ядрам, чтобы всё быстрее отработало. Видимо, это предположение ложно. Тогда назревает вопрос: а зачем ты хочешь раскидать процессы по ядрам поровну?

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

Тогда назревает вопрос: а зачем ты хочешь раскидать процессы по ядрам поровну?

just for fun
хотя...мне на самом деле непонятна политика современных тупоголовых планировщиков - это же просто глупо!

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

Разгон не нужен.

Сейчас разве можно купить десктопный или мобильный проц, который не может меняет частоты на ходу? Они сейчас все разгоняются. (Я не имею в виду разгон сверх номинальных частот).

i-rinat ★★★★★
()
Ответ на: комментарий от megabaks

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

для тугодумов

Вы разговариваете не со своими деревенскими корешами. Закройте свой грязный рот.

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

Разгон не нужен.

только для тех, кто не понимает, что мой Q9400 за 2000р уделывает все i3 и некоторые i5 за овер дохрена бабок

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

Ок. По-русски.

1. Задача об оптимальной загрузке процессора — NP-полная задача. В общем случае не решить (если вводить невырожденные целевые функции).

2. Практика показала, что с т.з. быстродействия надо все бросать на одно ядро, в частности, это позволяет избежать доп. расходов на обмен ресурсами.

Как-то так.

Ну еще я явно наблюдаю такой костыль: периодически ядро, которое все процы козлят, меняется.

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

немножко не в тему, но например эрланг (известен своими процессами и умением более грамотно работать на многоядерных системах) пытается управлять нагрузкой через SMP-подсистему. Точнее через свои шедуллеры.

Несколько устаревшая статья про нагрузку: http://stackoverflow.com/questions/7005759/erlang-on-multicore-cpu

swwwfactory ★★
()

Вот я сейчас смотрю на вывод htop'a и он мне показывает, в среднем, равную загрузку ядер. хм.

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

ну вот - всё встало на свои места - малыш зациклился на производительности, хотя никто, кроме него самого, это слово и не употреблял в этом топике до него.
расслабься - есть задачи отличные от производительности

megabaks ★★★★
() автор топика
Последнее исправление: megabaks (всего исправлений: 1)
Ответ на: комментарий от swwwfactory

В erlang нет shared памяти, это вырожденный частный случай.

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

ок, разжую ещё:
есть 100 процессов по 0.1% от ядра
кто мешает распределить их равномерно по ядрам?
правильно! никто!
если есть процесс с сильным перекосом в потреблении, то тут нихера не сделать - с этим я, заметь, не спорю.
ещё будут глупые вопросы?

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