Ограничение скорости записи на жесткий диск пользователем в Linux
Фон:
Я использую кластер со своими коллегами, и если кто-то пишет слишком много больших файлов одновременно, я даже не могу переместить курсор в vim (ужас!). Я не уверен, если это больше связано с количеством открытых файлов или "пропускной способностью" используемого жесткого диска, но это определенно происходит только тогда, когда происходит большая операция записи (включая загрузку больших файлов). Я знаю, что вы можете ограничить пространство на жестком диске квотами на пользователя, но я никогда не слышал о возможности ограничения скорости передачи данных.
Вопрос
Можно ли ограничить количество данных, записываемых в секунду пользователем в Linux?
3 ответа
Используйте 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.
Если вы не можете переместить курсор, я предполагаю, что ваш процессор очень долго ожидает ввода-вывода. Вы можете проверить это, запустив top и посмотрев на сумму, указанную в %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
, Что-то вроде установки их пределов ниже, чем у вас, а затем установки того приложения, для которого вы используете, приоритет выше, чем они могут. Конечно, вам следует немного больше изучить и протестировать, прежде чем вносить какие-либо изменения, так как это может серьезно помешать их работе с пользователем.
Удачи.