Влияет ли ionice на NFS-клиент?

Мне нужно рекурсивно удалить миллионы каталогов на общем ресурсе NFS и, чтобы избежать проблем с производительностью, я запустил команду с:

ionice -c 3 -t find /dir -type f -exec rm {};

который удалит все файлы и оставшиеся пустые каталоги, я могу удалить с помощью rm -rf.

Но я не могу сказать, влияет ли ionice на приведенную выше команду.

От человека, класс Ионис 3:

Программа, работающая с приоритетом idle io, получит только дисковое время, когда ни одна другая программа не запросила io диска в течение определенного льготного периода. Влияние незанятых процессов на нормальную активность системы должно быть нулевым.

Из исходного кода я вижу, что ionice устанавливает ioprio_set,

Итак, что же такое ioprio_set?

Системные вызовы ioprio_get() и ioprio_set() соответственно получают и устанавливают класс планирования ввода-вывода и приоритет одного или нескольких потоков.

Означает ли это, что поток процесса несет дополнительные свойства для планировщика ввода-вывода, чтобы использовать их для планирования операций ввода-вывода для процесса?

Это вызывает у меня следующие вопросы:

  • Знает ли планировщик ввода-вывода загрузку ввода-вывода на диске или просто планирует ввод-вывод на диск?
  • Если это так, то есть планировщик ввода-вывода знает о загрузке на диск и принимает решения на его основе, я думаю, что классы и приоритеты планирования ввода-вывода не будут влиять на планирование ввода-вывода на удаленный диск. Таким образом, ионика не может иметь никакого эффекта.
  • И если это не так, я думаю, что классы и приоритеты планирования ввода-вывода могут влиять на планирование ввода-вывода на удаленный диск, такой как NFS. Таким образом, ionice будет работать, если несколько пользователей / процессов используют один и тот же диск NFS, где планировщик ввода-вывода планирует ввод-вывод для данного потока на основе того, использует ли другой пользователь / процесс один и тот же диск NFS.

Пожалуйста, поправьте меня, если я совершенно неправ.

Может быть также способ выполнить операцию со стороны сервера, но я хочу сначала попробовать со стороны клиента.

1 ответ

Обратите внимание, что мой ответ предполагает, что вы используете Linux, так как я уверен, что ionice Команда специфична для Linux.

Планировщик ввода / вывода работает на уровне блоков, а не на уровне файловой системы. В результате это влияет только на локальные устройства хранения и удаленно подключенные блочные хранилища (такие как устройства хранения, подключенные к NBD, iSCSI или ATAoE). В результате не предусмотрено никакого специального планирования ввода-вывода для общего ресурса NFS на клиенте NFS (но сервер все еще делает это, он просто не знает о приоритетах удаленного ввода-вывода), но может быть для iSCSI, Устройства NBD или ATAoE (однако во многих дистрибутивах они устанавливаются с помощью планировщика no-op, что означает, что единственное планирование ввода-вывода здесь также выполняется на стороне сервера). Единственный возможный случай, когда это повлияет на NFS, - это если вы используете pNFS с блочной компоновкой, но вы, вероятно, нет, и я не совсем уверен, как это взаимодействует с блочным слоем, поэтому я просто буду игнорировать это).

Что касается приоритета ввода / вывода, это зависит от того, какой планировщик ввода / вывода вы используете. Как минимум, планировщики noop и deadline (и, возможно, новые mq-deadline) вообще не обращают на это никакого внимания, в то время как CFQ, BFQ и я думаю, что новый планировщик Kyber что-то делает с этим, но они этого не делают. сделать то же самое с ним. Насколько мне известно, для CFQ классы ведут себя аналогично эквивалентным классам планирования ЦП (при этом класс ввода-вывода в реальном времени ведет себя как класс планирования ЦП RT FIFO). Я считаю, что BFQ просто использует их в качестве подсказок для своего алгоритма планирования (в отличие от более значительного влияния, которое они оказывают на CFQ), но я не уверен в этом.

Теперь, что касается вашего конкретного примера, ionice там вообще не должно иметь никакого влияния, но, скорее всего, это не окажет большого влияния и на локальную файловую систему, если только диск уже не был полностью использован другими процессами (указанный вами класс планирования 'idle' не является истинным планировщиком простоя, но даже если бы это было, find не использует много времени на диске большую часть времени, и rm команда использует еще меньше).

Кроме того, немного не по теме примечание, но find указанная вами команда удалит только файлы (из-за -type f вариант), так что это не совсем эквивалентно rm -rf и вы можете улучшить его (локальную) производительность, заменив -exec rm {} ; с -delete, что делает то же самое без необходимости создавать новый процесс для каждого файла, который он удаляет.

Другие вопросы по тегам