У нас есть локальный сервер Xeon, работающий под управлением Ubuntu LTS, который используется несколькими разработчиками. Каждый разработчик входит в систему под своим пользователем и запускает на нем различные рабочие нагрузки. Проблема, с которой мы сталкиваемся, заключается в том, что когда иногда выполняется интенсивная рабочая нагрузка на ЦП или хранилище, другие пользователи фактически не могут работать на машине, оболочка перестает отвечать.
Мы пытались попросить пользователя ограничить использование ЦП при сборке, и это решило проблемы с ЦП, но, по всей видимости, использование дискового ввода-вывода продолжает оставаться проблемой. Мы используем хранилище SSD.
Использование виртуальной машины на сервере невозможно, так как мы не хотим жестко ограничивать ресурсы. Мы просто хотим убедиться, что не будет нехватки ресурсов у других пользователей.
Какие у нас есть варианты?
решение1
Насколько гибка модификация рабочих нагрузок? Существуют утилиты, такие как nice, которые могут ограничивать приоритет процессов, ограничивать, какой кусок они могут получить.
https://www.geeksforgeeks.org/nice-and-renice-command-in-linux-with-examples/#
Но как вы уже отметили, это решение не идеально, потому что проблема здесь, скорее всего, будет в том, что когда подключен только один пользователь, он не сможет использовать весь потенциал системы. И это может быть просто новой проблемой.
Disk IO, другие спрашивали и вырабатывали решения, такие как ответ здесьhttps://unix.stackexchange.com/questions/536007/cgroups-throttle-per-user-disk-io-bandwidth-on-linux
Боюсь, что идеального решения, скорее всего, не будет, поэтому такие вещи, как виртуализация, стали настолько популярными для более эффективного использования общих ресурсов.
Как и во всех аспектах Linux, вероятно, существуют и другие решения (и, возможно, даже системы, разработанные для их использования).
IMHO, чтобы сделать это правильно, скорее всего, потребуется какое-то планирование на уровне ядра или какой-то интерфейс для использования уже имеющихся там опций планирования, я о них не знаю. ...Но я уже ошибался, так что если кто-то еще предложит решение, я тоже научусь! Так что ответ может быть таким: без принятия уступок нет ответа.