LINUX.ORG.RU
ФорумAdmin

Справедливое распределение ресурсов (CPU, RAM etc.) для нескольких пользователей

 ,


0

3

В общем, задача ясна — раздавать ресурсы пользователям поровну, чтобы один пользователь, создав 1000 процессов, не мешал пользователям, создавшим 10 процессов, т.е. не сожрал всё CPU-time.

Оказалось, что знаменитейшая величайшая распрекраснейшая shell-code-несодержащая известнейшая современнейшая несравненная блистательная незаменимая неотразимая непогрешимая безглючная безбажная и прочая и прочая systemd, после стольких лет разработки и пиара, не может решить эту тривиальную задачу (см. https://github.com/systemd/systemd/issues/2556).

А что может решить эту задачу?

Обращаю внимание, что меня интересует готовое решение, а не капитанство «ну это с помощью cgroups можно решить)))0)0».

виртуалки и контейнеры конечно

Dred ★★★★★ ()

пусть у второго цпу простаивает, но первому не отдадим, во имя справедливости

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

просто начальному башу юзера нужно назначить нужную cgroup-группу.

Ну вот просто покажи, как это делать автоматически.
А то user.slice в systemd не темплейтится.

А что эта задача предполагает использование cgroups я какбэ знаю.

utf8nowhere ★★ ()
Последнее исправление: utf8nowhere (всего исправлений: 1)

cgroups, не?

Ну вот просто покажи, как это делать автоматически.

Всмысле как это делать для новых групп пользователей?

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

Всмысле как это делать для новых групп пользователей?

В смысле что каждому user-${UID}.slice нужно назначать лимиты.
systemd позволят назначить лимиты только вышележащему по иерархии user.slice, т. е. для всех пользователей скопом.

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

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

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

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

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

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

Решали перманентным баном любителей запускать форк-бомбы.

utf8nowhere ★★ ()

Решил таким вот скриптом

#!/bin/bash

STATE=1 # 1 -- waiting for signal; 2 -- reading UID

dbus-monitor --system "interface=org.freedesktop.login1.Manager,member=UserNew" |
while read line
do
	case $STATE in
	1) [[ $line =~ member=UserNew ]] && STATE=2 ;;
	2) read dbus_type ID <<< $line
	   systemctl set-property user-$ID.slice CPUAccounting=true
	   STATE=1
	;;
	esac
done

Нужно оформить из него systemd-сервис.

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

до систем-дика

But those days are gone, they're just memories

Надо жить с тем, что есть сейчас. И вообще, я бы не стал называть это костылями. Сигнал о логине пользователя существует для того, чтобы его слушать и выполнять какие-то действия.

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