Планировщик сроков
Эту статью , возможно, придется переписать, Википедии чтобы она соответствовала стандартам качества , так как она написана плохо. ( февраль 2024 г. ) |
Планировщик сроков — это планировщик ввода-вывода или планировщик диска для ядра Linux . Его написал в 2002 году Йенс Аксбо .
Обзор
[ редактировать ]![]() | Этот раздел может сбивать с толку или быть неясным для читателей . В частности, плохо объяснена система очередей. Схема приветствуется. ( Март 2014 г. ) |
Основная цель Deadline Scheduler — гарантировать время начала обслуживания запроса. [1] Планировщик устанавливает крайний срок для всех операций ввода-вывода, чтобы предотвратить нехватку запросов . Он поддерживает две очереди сроков , а также отсортированные очереди (как на чтение, так и на запись). Очереди с дедлайном сортируются по времени истечения срока действия, а отсортированные очереди сортируются по номеру сектора.
Прежде чем обслуживать следующий запрос, планировщик сроков решает, какую очередь использовать. Очередям чтения дается более высокий приоритет, поскольку процессы обычно блокируются при операциях чтения. Затем планировщик сроков проверяет, истек ли срок действия первого запроса в очереди сроков. В противном случае планировщик обслуживает пакет запросов из отсортированной очереди. В обоих случаях планировщик также обслуживает пакет запросов, следующий за выбранным запросом в отсортированной очереди.
По умолчанию срок действия запросов на чтение составляет 500 мс, а срок действия запросов на запись истекает через 5 секунд.
Черновая версия планировщика была опубликована в списке рассылки ядра Linux компанией Axboe в январе 2002 года. [2]
Измерения показали, что планировщик ввода-вывода по срокам превосходит планировщик ввода-вывода CFQ для некоторых многопоточных рабочих нагрузок. [3]
Настройки SysFS
[ редактировать ]![]() | этого раздела Тон или стиль могут не отражать энциклопедический тон , используемый в Википедии . ( Октябрь 2023 г. ) |
fifo_batch (целое число)
[ редактировать ]Deadline выполняет операции ввода-вывода (IOP) с помощью концепции «пакетов», которые представляют собой наборы операций, упорядоченных с точки зрения увеличения количества секторов. Эта настройка определяет, насколько большим должен быть пакет, прежде чем запросы будут поставлены в очередь на диск (за исключением истечения срока действия создаваемого в данный момент пакета). Меньшие пакеты могут сократить задержку , обеспечивая более раннее выполнение новых запросов (вместо ожидания поступления дополнительных запросов), но могут снизить общую пропускную способность за счет увеличения общего движения головок накопителей (поскольку упорядочение происходит внутри пакета, а не между ними). . Кроме того, если количество операций ввода-вывода в секунду достаточно велико, пакеты в любом случае будут выполняться своевременно.
read_expire (целое число)
[ редактировать ]Время read_expire — это максимальное время в миллисекундах, по истечении которого запрос на чтение считается истекшим. Запрос на чтение лучше всего использовать до истечения срока действия. Планировщик сроков не будет пытаться гарантировать, что все операции ввода-вывода будут выполнены до истечения срока их действия. Однако, если срок действия ввода-вывода истек, ему присваивается приоритет.
Очередь истечения срока чтения проверяется только тогда, когда планировщик сроков повторно оценивает очереди чтения. Для запросов на чтение это означает, что отправляется отсортированный запрос на чтение (за исключением случая потокового ввода-вывода). Пока планировщик передает поток ввода-вывода из очереди чтения, срок действия чтения не оценивается. Если есть операции чтения с истекшим сроком действия, первое из них извлекается из FIFO. Обратите внимание, что это чтение с истекшим сроком действия является новым связующим звеном для упорядочения сортировки чтения. Кэшированный указатель следующего будет установлен так, чтобы указывать на следующий ввод-вывод из очереди сортировки после истечения срока действия…. Следует отметить, что алгоритм не просто выполняет все операции ввода-вывода с истекшим сроком действия, как только срок их действия истек. Это позволяет поддерживать некоторую разумную производительность за счет группирования операций чтения, отсортированных по методу write_starved, перед повторной проверкой очереди чтения с истекшим сроком действия.
Максимальное количество операций ввода-вывода, которое может быть выполнено между операциями ввода-вывода с истекшим сроком чтения, составляет 2 * 'fifo_batch' * 'writes_starved'. Один набор потоковой передачи «fifo_batch» считывается после первого истекшего ввода-вывода чтения, и если этот поток вызвал состояние нехватки записи, то, возможно, выполняется запись другой потоковой передачи «fifo_batch». Это худший случай, после которого очередь чтения с истекшим сроком действия будет переоценена. В лучшем случае очередь чтения с истекшим сроком действия будет оцениваться «write_starved» несколько раз подряд, прежде чем будет пропущена, поскольку будет использоваться очередь записи.
write_expire (целое число)
[ редактировать ]«write_expire» имеет ту же функцию, что и read_expire, но вместо этого используется для операций записи (сгруппированных в отдельные пакеты из запросов на чтение).
пишет_голод (целое число)
[ редактировать ]Планировщик сроков отдает приоритет запросам на чтение, а не запросам на запись, поэтому это может привести к ситуациям, когда выполняемые операции почти полностью представляют собой запросы на чтение. Этот параметр становится более важным, поскольку write_expire увеличивается или общая полоса пропускания приближается к насыщению. Уменьшение этого значения дает большую пропускную способность для записи (условно говоря) за счет операций чтения. Однако если рабочая нагрузка приложения требует большого количества операций чтения (например, большинство HTTP-серверов или серверов каталогов) с редкой записью, можно добиться уменьшения задержки среднего числа операций ввода-вывода в секунду за счет ее увеличения (так что перед выполнением пакета записи необходимо выполнить больше операций чтения). поставлено в очередь на диск).
front_merges (логическое целое число)
[ редактировать ]«Фронтальное слияние» — это операция, при которой планировщик ввода-вывода, стремясь уплотнить (или «объединить») меньшие запросы в меньшее количество (более крупных) операций, выполняет новую операцию, затем проверяет активный пакет и пытается найти операции, в которых Начальный сектор совпадает с начальным сектором другой операции или сразу за ним. «Обратное слияние» является противоположным, при котором конечные секторы в активном пакете ищутся для секторов, которые либо совпадают, либо находятся сразу после начальных секторов текущей операции. Объединение перенаправляет операции из текущего пакета в активный, уменьшая «справедливость» для увеличения пропускной способности.
Из-за особенностей компоновки файлов обратные слияния встречаются гораздо чаще, чем передние. Для некоторых рабочих нагрузок время может быть потрачено впустую при попытке выполнить мерж-реквесты. Установка параметра front_merges на 0 отключает эту функцию. Фронтальные слияния по-прежнему могут происходить из-за кэшированной подсказки «last_merge», но, поскольку это происходит практически без затрат, оно все равно выполняется. Это логическое значение просто отключает поиск переднего сектора при вызове функции слияния планировщика ввода-вывода. Итоги слияния дисков записываются для каждого блока устройства в /proc/diskstats. [1]
Другие планировщики ввода-вывода
[ редактировать ]- CFQ Планировщик
- Упреждающий планировщик
- Нооп-планировщик
Ссылки
[ редактировать ]- ^ Jump up to: а б Йенс Аксбо (11 ноября 2002 г.). «Настройка планировщика ввода-вывода в срок» . Документация по ядру Linux . Проверено 20 ноября 2011 г.
- ^ Йенс Аксбо (4 января 2002 г.). «[ИСПРАВЛЕНИЕ][RFT] простой планировщик ввода-вывода с дедлайном» . Архив списка рассылки ядра Linux . Проверено 6 июля 2014 г.
- ^ IBM (12 сентября 2013 г.). «Лучшие практики виртуальной машины ядра (KVM) для KVM» (PDF) . ИБМ . Архивировано из оригинала (PDF) 13 мая 2016 года . Проверено 6 июля 2014 г.