LINUX.ORG.RU

Очередь. Как разрешить использовать только свободные ресурсы CPU?

 


1

1

Есть простенькая очередь задач, которая позволяет пускать задания по расписанию, мапредьюсить толстые задачи на чанки и т.п. Этого хватает, чтобы запустить воркеры на нужном количестве ядер или серверов. То есть, нагрузить железки на 100%.

https://github.com/nodeca/nodeca.core/tree/master/lib/queue

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

PS. Речь именно о CPU, с IO проблем нет.

★★★★★

Последнее исправление: Vit (всего исправлений: 2)

Ответ на: комментарий от Nao

А можно для Ъ готовый рецепт? Как сделать, чтобы не просто приоритет понизился, а выгребал весь доступный процессор по остаточному принципы?

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

Предложи еще задержку после каждого задания вставлять, или написать свой шедюлер на яваскрипте.

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

Просто ставишь самый низкий приоритет. Но la при этом все равно будет зашкаливать, хоть это наверное и не страшно.

redixin ★★★★
()

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

Сделать очередь с приоритетом (или две очереди). Запускать менее приоритетные задачи, когда более приоритетных в очереди нет и есть свободные ресурсы.

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

Что значит «зашкаливать»? если CPU выгребается по остаточному принципу, то зашкаливать ничего не должно вроде. При условии что на остальные процессы ресурсов вообще хватает.

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

Чтобы отдельный тред не создавать, тут спрошу релейтед. А если процесс с памятью активно работает и с диском, не будет ли он кеши перетряхивать? И как вообще сказывается параллельная работа низких приоритетов на активных высоких, т.е. насколько nice можно считать действительно приоритизирующим, а насколько он чисто так уж, номинален?

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

В la входят процессы грузящие только io.

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

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

И да, тут уже выше вспомнили про кеш.

Делать согласно la я имел в виду в держать количество процессов равным ncpu - la. Тогда всем будет хорошо. Но такое будет работать если много cpu.

redixin ★★★★
()

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

Что такое «занятые ресурсы ЦПУ»? Это доля единиц процессорного времени, занимаемая всеми работающими на данном ЦПУ в данный момент процессами. У каждого из них есть свой приоритет выполнения, в зависимости от которого процесс получает больше или меньше процессорного времени на своё выполнение.

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

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

насколько nice можно считать действительно приоритизирующим, а насколько он чисто так уж, номинален?

nice приоретизирует только доступ к CPU. Если низкоприоритетный процесс, когда, таки, доберется до CPU начнет активно использовать диск, то все дисковые кеши обновятся низкоприоритетными данными.

Для более тонкой настройки приоритетов нужно использовать cgroup.

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

Спасибо. Есть 2 вопроса:

1. А как это сделать? в случае с nice я могу через командную строку.
2. Это будет сильно отличаться от варианта с установкой минимального приоритета?

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

1. А как это сделать? в случае с nice я могу через командную строку.

chrt

Это будет сильно отличаться от варианта с установкой минимального приоритета?

Задачи с SCHED_IDLE получают процессор только тогда, когда вообще нет готовых к исполнению задач другого класса планирования, а задачи с «просто nice» получают его в любом случае.

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

Задачи с SCHED_IDLE получают процессор только тогда, когда вообще нет готовых к исполнению задач другого класса планирования, а задачи с «просто nice» получают его в любом случае.

Это я понимаю. Интересует, будут ли на практике заметные отличия.

У меня на 4 ядра получается 4 процесса вебсервера и 4 процесса воркеров. Процессы, раздающие вебню, обычно не сильно загружены, но не должны лагать. Воркеры обычно ничего не делают, но на ребилдах контента (когда админ нажмет красную кнопку) могут захотеть 100% CPU на пару часов.

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

будут ли на практике заметные отличия.

Зависит от того, сколько ты замечаешь. Думаю, при одной толстой задаче с nice 20 ты не заметишь ничего, но при нескольких - уже заметишь. Но, опять же, при нескольких толстых задачах начнут играть загрузка памяти и IO, а это уже контейнеры.

могут захотеть 100% CPU на пару часов.

Даже одна nice-задача уже не даст тебе использовать 100% CPU, так что если ты не согласен меньше, чем на 100%, то вариантов у тебя не много.

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

На практике лаги редко бывают от нехватки проца. Обычно лагает диск, и работающий в idle процесс может пинать диск будь здоров. Ionice тоже не сильно помогает. Поможет либо отдельный диск либо ссд. Если эта твоя задача не трогает диск, то вообще плевать. Оно не вызовет заметных лагов даже если не в idle.

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

так что если ты не согласен меньше, чем на 100%

Я согласен на «максимум сколько получится, но чтобы вебня не начала лагать».

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

взять нормальный шедулер? PBS/torque или slurm.

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

Да просто прикидываю, можно ли универсально сделать - чтобы и под вендой работало, и под маком, и под докером с бизибоксом. И чтобы дешево и сердито.

Куда копать понятно, за советы спасибо.

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