Назад | Перейти на главную страницу

Ограничение скорости записи на жесткий диск пользователем в Linux

Задний план:

Я использую кластер со своими коллегами, и если кто-то пишет слишком много больших файлов одновременно, я даже не могу переместить курсор в 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. Что-то вроде установки их лимитов ниже, чем у вас, а затем установки приоритета любого из запущенных вами приложений выше, чем они могут. Конечно, вам следует немного изучить и протестировать, прежде чем вносить какие-либо изменения, поскольку это может серьезно повлиять на их пользовательский опыт.

Удачи.