Задний план:
Я использую кластер со своими коллегами, и если кто-то пишет слишком много больших файлов одновременно, я даже не могу переместить курсор в vim (ужас!). Я не уверен, больше ли это связано с количеством открытых файлов или "пропускной способностью" жесткого диска, но это определенно происходит только тогда, когда выполняется большая операция записи (включая загрузку больших файлов). Я знаю, что вы можете ограничить пространство на жестком диске квотами на пользователя, но я никогда не слышал о возможности ограничивать скорость передачи данных.
Вопрос
Можно ли ограничить количество данных, записываемых в секунду пользователем в Linux?
Использовать cgroups вместе с планировщиком ввода-вывода CFQ (по умолчанию для многих дистрибутивов). CFQ знает о cgroups и может предоставить любому пользователю, группе или процессу только x% времени дискового ввода-вывода.
Итак, если у вас есть одна контрольная группа с именем sequenceGeek
имея 90% максимальных ресурсов, вы можете создать другую контрольную группу с именем coworkers
, имея 10% ресурсов. Или что-то подобное справедливо.
man cgrules.conf
, man cgset
и man cgconfig.conf
должно вас начать. По крайней мере, в Fedora 16, прямо сейчас не было времени проверить другие дистрибутивы, имеют ли они похожие имена файлов конфигурации. Наверное, есть.
РЕДАКТИРОВАТЬ: О, только что заметил из ваших комментариев, что вы используете NFS. Тогда ваша сеть может быть перегружена, и вам нужно использовать QoS с tc
и iptables
. Google для Advances Linux Routing How-To
, в нем есть готовые примеры регулирования трафика и создания классов приоритета. Или, если возможно, сделайте регулировку на вашем брандмауэре / маршрутизаторе / балансировщике нагрузки.
Также может быть старая версия ядра, имеющая проблемы с NFS или неверные параметры монтирования NFS.
Если вы не можете переместить курсор, я предполагаю, что ваш процессор ожидает ввода-вывода в течение очень большого количества времени. Вы можете проверить это, запустив вверх и посмотрев на сумму, указанную в %wa
рядом с верхом.
В blkio
Контроллер вышеупомянутых контрольных групп - это метод контроля количества операций ввода-вывода, которые может выполнять кто-то или какая-то группа. Я сейчас немного тороплюсь, но если вы читаете документацию по ядру (/usr/share/doc/kernel-<version>/Documentation/cgroups
), Уверен, вы справитесь. Тем не менее, вам понадобится довольно свежее ядро, но я думаю, что все, что выше 2.6.32 (ядро EL6), вероятно, подойдет.
Вам необходимо настроить blkio.throttle.write_bps_device
файл в файловой системе cgroups. При этом вместе с /etc/cgconfig.conf
и /etc/cgrules.conf
, вы можете ограничить любого пользователя или группу в размере пропускной способности вашего хранилища.
Я не совсем уверен, но, прочитав немного man limits.conf
, и если вы root, я бы предложил добавить жесткий лимиты для чужих счетов на data
(максимальный размер данных), priority
и nice
. Что-то вроде установки их лимитов ниже, чем у вас, а затем установки приоритета любого из запущенных вами приложений выше, чем они могут. Конечно, вам следует немного изучить и протестировать, прежде чем вносить какие-либо изменения, поскольку это может серьезно повлиять на их пользовательский опыт.
Удачи.