Варианты использования для того, чтобы иметь различный приоритет процесса для CPU и IO?

9

Процессы Linux могут иметь различный приоритет CPU и IO (nice и ionice).

Почему необходимо иметь разные приоритеты процессора и ввода-вывода?

Есть ли реальное использование мира для того, чтобы отличать их?

Какие случаи использования в реальном мире, как вы обнаружили, требуют разного приоритета процессора и ввода-вывода? Как выше, чем обычный приоритет процессора, но ниже, чем обычный приоритет ввода-вывода или наоборот.

Эдуардо
источник

Ответы:

6

Поведение «по умолчанию» по умолчанию заключается в настройке приоритета «io» приложения также при изменении привлекательности.

Все, конечно, зависит от вашей рабочей нагрузки, но одним из ключевых аспектов любой операционной системы является то, как она распределяет свой ресурс и как она справляется с конфликтами .

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

Конфликт - это мера того, как разные приложения конкурируют за один и тот же ресурс (например, процессор).

Грузоподъемность

С тех пор, как был представлен абсолютно честный планировщик, nice - это всего лишь интерфейс к условию «веса» каждого процесса. Который можно посмотреть в прок.

$ cat /proc/self/sched
---------------------------------------------------------
...
se.load.weight                     :                 1024
...

Изменение приятности просто меняет вес:

$ nice -n 5 cat /proc/self/sched 
---------------------------------------------------------
...
se.load.weight                     :                 335
...

Мера для состязания процессора сделана полностью справедливым алгоритмом планирования. Каждому приложению присваивается значение «веса», и в случае конкурирующего времени ЦП время распределяется между процессами путем суммирования всей обработки за время ЦП и назначения им времени ЦП общего наименьшего номинала на основе их значения веса.

Если у меня есть 3 приложения, которые все хотят использовать процессорное время, по умолчанию они получают 1024 как нормальный вес. Если бы у меня был один процесс с хорошими +5, как указано выше, все три веса были бы суммированы в 2383, то процесс niced получил бы около 15% времени процессора за данную секунду, если бы все 3 процесса запрашивали процессор в эту секунду ,

Почему необходимо иметь разные приоритеты процессора и ввода-вывода?

На самом деле милость играет только с тем, что делать, когда система находится под нагрузкой, то есть - как операционная система выделяет время между конкурирующими процессами, как это определено какими-либо необходимыми факторами.

То, как это влияет на вас или зависит от вас, зависит от того, какие приоритеты в доставке у разных приложений друг с другом, и какое время должно быть у каждого приложения.

Любезность действительно только делает что - то , когда система находится под нагрузкой (есть больше вещей хочет внимания , чем процессор или диск может работать). Он просто инструктирует ядро, как распределять ресурсы при таких обстоятельствах.

Есть ли реальное использование мира для того, чтобы отличать их?

Если у вас есть множество конкурирующих процессов или работа, которую нужно выполнить, это больше, чем может выполнить ЦП, любезность дает вам относительно стабильные гарантии относительно того, какая работа заканчивается первой. Это может быть важно для вас, если вы говорите, что готовите отчет, который должен быть доставлен до того, как закончится другой отчет.

В настольной системе приятность может быть даже более важной. Некоторые приложения работают в режиме реального времени, когда они чаще просыпаются во время загрузки, что предотвращает устаревание данных. Pulseaudio попадает в эту категорию, например.

Другие приложения могут потребоваться для распределения работы для зависимых приложений. Например, множество запросов apache, чтобы сказать, что SQL-сервер, такой как MySQL, может блокироваться в течение длительного периода времени, потому что SQL не работает достаточно быстро, потому что, скажем, какой-то другой отчет конкурирует за процессорное время. Так что не только SQL остановлен, но и Apache. Иногда SQL может повредить, потому что, как правило, рабочих потоков гораздо меньше, чем потоков Apache, конкурирующих в качестве группы, чтобы планировщик более выгодно взвешивал их, поэтому выделение SQL больше процессорного времени выравнивает ситуацию.

UpdateDB (программа, индексирующая файлы) запускается поздно ночью и очень загружена дисками. Может быть полезно уменьшить приоритет планирования ввода-вывода, чтобы другие приложения в это время получали приоритет над чем-то, что не так важно в порядке вещей.

Какие случаи использования в реальном мире, как вы обнаружили, требуют разного приоритета процессора и ввода-вывода?

Очень мало. Милосердие - это слишком много подхода с максимальными усилиями. Как правило, меня меньше волнует, насколько хорошо работают приложения, и больше, насколько плохо они могут работать. Поначалу это может показаться обратным, но у меня есть гарантии предоставления услуг, которые важнее для меня.

Я хочу с уверенностью сказать, что «ваши вещи, даже в плохой день, будут сделаны в X период времени». Если это идет быстрее, это просто бонус.

Обычно я начинаю с генерации согласованных спецификаций, таких как:

  • Все веб-приложения гарантированно завершают запросы за 0,3 секунды.
  • Все запросы SQL в системе гарантированно будут выполнены за 0,1 секунды.
  • Веб-приложение должно обрабатывать не более 50 операций ввода-вывода в секунду и доставляет файлы размером 1 КБ.
  • Общий объем памяти веб-приложений не превышает 250 МБ.

И составьте требования, чтобы соответствовать как:

  • Все веб-запросы должны быть выполнены за 0,05 секунды.
  • Все запросы SQL должны быть выполнены за 0,02 секунды.
  • Должно быть достаточно памяти для обработки всех запросов.
  • Требования к IO должны быть выполнены.

Если спецификации верны, тогда я достигну этих целей, не занимаясь виртуализацией, используя гораздо более эффективный подход контрольных групп.

Контрольные группы позволяют мне делать довольно надежные гарантии уровня обслуживания для распределения ресурсов при условии, что приложение ведет себя в указанных границах. Это означает, что даже в загруженной системе я могу гарантировать доступность ресурсов для рассматриваемого приложения и гарантировать место для других приложений в той же коробке!

Если мы возьмем ваш пример с CPU и IO. Я установил лимиты, которые отвечают этим требованиям:

# cd /sys/fs/cgroup/blkio/apache
# echo "253:0 100" >blkio.throttle.read_iops_device 
# echo "253:0 50" >blkio.throttle.write_iops_device 
# echo "253:0 102400" >blkio.throttle.read_bps_device

Итак, 100 тыс. Байтов для чтения из 100 йопов.

# cd /sys/fs/cgroup/cpu/apache
# echo 1000000 >cpu.cfs_period_us
# echo 60000 >cpu.cfs_quota_us 

Из 1 секунды, дайте 0.06 секунды процессора.

# cd /sys/fs/cgroup/cpu/sql
# echo 1000000 >cpu.cfs_period_us
# echo 20000 >cpu.cfs_quota_us

Из 1 секунды, дайте 0.02 секунды процессора.

Если другие конкурирующие cgroups не делают ничего глупого, то нагрузка меньше влияет на мои услуги, потому что я знаю, как ЦП расходуется для каждого приложения.

Контрольные группы такого рода по- прежнему являются лучшим усилием, но они предлагают гораздо больший контроль над этим усилием, чем милосердие и ионность.

Мэтью Ифе
источник
Я спрашивал о необходимости разных приоритетов процессора и ввода-вывода. Вы говорите, что есть «очень немногие» случаи использования, когда вы обнаружили необходимость иметь разные приоритеты процессора и ввода-вывода. Не могли бы вы сослаться на них?
Эдуардо