QOS обычно используется, чтобы уделить первостепенное значение определенным типам сетевых потоков. Разве Вы не можете изолировать и ограничить порт пользователя на сетевом коммутаторе? Или помещенный его в отдельный VLAN? Или ограничьте скорость передачи данных порта 100 Мбит/с?
Кроме этого я не знаю ни о каком ограничении пропускной способности NFS именем пользователя или MAC-адресом. Возможно, Ваш сервер NFS имеет опции гарантировать более распределенный способ служить запросам файла?
Размышление из поля: подвиньте интенсивные чтением файлы поближе к пользователю и выполните процесс backup/rsync для обратной записи обновленных данных к NAS?
Какие интенсивные чтением задания - они так или иначе?
Оказывается, вам повезло; существует программа unix в стиле GNU, которая делает именно это: bsort .
bsort
- это сверхэффективная реализация поразрядной сортировки на месте с особым вниманием к шаблонам доступа к памяти при работе с файлами большего размера чем таран. Под эффективностью я имею в виду, что с середины 2014 года он смог превзойти http://sortbenchmark.org 2014 года по энергоэффективной сортировке 10 ^ 8 записей на оборудовании на оборудовании -рекорд был 889 Джоулей, ранний прототип этого мог отсортировать то же самое в 335 Джоулей на стандартном MacBook Pro. Для «маленьких» наборов данных, которые полностью помещаются в RAM (трехзначные мегабайты), это примерно в 3 раза быстрее, чем библиотека qsort libc.
Одним из решений может быть преобразование входного файла в шестнадцатеричный, с каждой записью, закодированной в отдельной строке, сортировка и обратное преобразование в двоичный:
record_size=32
cat input \
|xxd -cols $record_size -plain \
|sort \
|xxd -cols $record_size -plain -revert
Однако это медленно (xxd преобразует около 40 МБ / с на моей машине)
Итак, поскольку мне это было нужно, я написал binsort
, который выполняет эту работу:
binsort --size 32 ./input ./output
С - размер 32
, он принимает 32-байтовые записи фиксированного размера, читает ./ input
, записывает отсортированные записи в ./ output
.
Утилита сортировки Unix подходит для двоичных данных на основе расположения байтов в записях, если вы ссылаетесь на них относительно первой «записи». Например, -k1.28,1.32.
Сортировка в Unix менее гибка в отношении понятия конца строки. В зависимости от ваших данных вы можете сделать гораздо более простое редактирование потока, чем предлагает пользователь 68497 на основе xxd, и использовать строки с завершающим нулем. Тем не менее, это по-прежнему, вероятно, потребует большого объема копирования данных в память и не приблизится к скорости подхода на основе mmap.
Если вы все же используете сортировку unix, хотя в некоторой степени, будьте осторожны с локалью . sort предполагает, что вводимый текст является текстом, а языковой стандарт влияет на порядок сортировки.