Как распределяется ОЗУ и ЦП, если к серверу Ubuntu не применяются ручные изменения

У нас есть сервер Ubuntu (16.04), на котором запущен сервер R-Studio, где мы проводим статистическое моделирование. Эти симуляции иногда тяжелы для ОЗУ и ЦП, поэтому я хотел бы знать, как память и ОЗУ распределяются ядром, если, например, два пользователя вошли в систему, и каждый из них запускает отдельный сеанс R, где они «соревнуются» за память и ЦП.

Поскольку никто из нас не является администратором сервера, мы действительно не хотим вносить изменения вручную, однако нас интересует, является ли распределение ОЗУ и ЦП более менее одинаковым для всех пользователей.

Примечание: версия R-Studio Server Pro позволяет довольно легко выделять определенный объем памяти отдельным пользователям, но поскольку у нас нет версии Pro, мы не можем изменить эти настройки.

6
задан 1 December 2017 в 15:31
4 ответа

Оперативная память работает в порядке очереди. Если пользователь A запускает 9 процессов, каждый из которых выделяет 10% памяти, а затем пользователь B входит в систему, пользователь B увидит только 10% оставшейся памяти. В случае исчерпания памяти Linux начнет убивать процессы. Насколько мне известно, убийца OOM не настроен для многопользовательской работы, поэтому в данном сценарии это может быть несправедливо.

Процессорное время обычно распределяется для каждого процесса, а не для каждого пользователя (но см. Ниже) .

Любой процесс, готовый к запуску (не спящий, ожидающий ввода-вывода и т. Д.), Рассматривается для планирования. (Процессы, которые не готовы к запуску, игнорируются и поэтому «не учитываются». (Это небольшое упрощение, но достаточно близко.))

В простейшей модели, если два пользователя запускают по одному процессу каждый , каждый из них получает примерно половину доступного процессорного времени. Но если userA выполняет 10 процессов, а userB - 1 процесс, тогда userA получает 90% CPU, а userB - 10% CPU (при прочих равных).

Однако планировщик Linux может уточнить это, сгруппировав процессы вместе, а затем распределяют время ЦП между этими группировками.

Кроме того, Linux имеет возможность автоматически группировать процессы на основе идентификатора сеанса (обычно связанного с терминалами, окнами терминала и / или сеансами входа в систему). Это называется «автогруппировка». Цель состоит в том, чтобы один пользователь, выполняющий тяжелую фоновую задачу в одном окне и интерактивную задачу в другом окне, по-прежнему видел бы отзывчивую интерактивную производительность.

Обе эти возможности включены по умолчанию в Ubuntu, насколько я могу определить.

Я не могу найти информацию о том, как группы задач и / или автогруппировка ведут себя в многопользовательской рабочей нагрузке. Теоретически, если планировщик поместит каждого пользователя в отдельную группу задач, то пользователи всегда получат сбалансированный доступ к ЦП (50/50 для двух пользователей). Однако я не нашел ничего, что говорило бы, что это произойдет автоматически.

Дополнительная литература:

5
ответ дан 3 December 2019 в 00:12

Если вам нужно ограничить использование памяти на одном сервере, лучше всего

  1. Использовать две виртуальные машины, в идеале KVM, чтобы вы могли использовать существующий сервер Ubuntu для размещения виртуальных машин. Однако это помешает вам легко разделить неиспользуемую память от одного пользователя с другим.
  2. Используйте контрольные группы для ограничения использования ресурсов
    2.1. https://askubuntu.com/questions/510913/how-to-set-a-memory-limit-for-a-specific-process 2.2 http://www.fernandoalmeida.net/blog/how-to-limit-cpu-and-memory-usage-with-cgroups-on-debian-ubuntu/
5
ответ дан 3 December 2019 в 00:12

По умолчанию в Ubuntu у пользователей неограниченный объем памяти, и в этом случае используется принцип «первым пришел - первым обслужен». Другими словами, пользователь A может использовать всю память и ничего не оставить для второго пользователя.

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

С ЦП дела обстоят немного лучше, и планировщик ядра распределяет время ЦП между процессами (а не пользователями!).

3
ответ дан 3 December 2019 в 00:12

Это будет зависеть от того, какие фоновые процессы выполняются, какие версии программного обеспечения устанавливаются при установке Ubuntu, выполняются ли задания cron и т. Д. Единственный реальный способ выяснить это - проверить Использование ОЗУ во всех интересующих вас сценариях, никто не сможет вам сказать, поскольку даже такие вещи, как количество процессоров и сетевых карт, будут влиять на использование ОЗУ.

Вы должны иметь возможность использовать группы управления для ограничения ОЗУ использование, но я не знаю, нужны ли вам для этого права root. В идеале вы должны создать несколько виртуальных машин и таким образом распределить ресурсы.

-2
ответ дан 3 December 2019 в 00:12

Теги

Похожие вопросы