Планировщик: как настроить cfq для поддержки интерактивных процессов
Проблема: планировщик не поддерживает интерактивные процессы:
В настольной системе с автоматическим резервным копированием по расписанию из одного (btrfs
) диск на другой (ext4
). Процесс резервного копирования монтирует свободный диск (/dev/sda<X>
), резервное копирование и, наконец, размонтирование.
Каждый раз, когда начинается процесс резервного копирования, система становится непригодной для использования. Планировщик, похоже, не справляется со своей основной задачей - отдавать предпочтение интерактивным процессам, а не пакетным. Пока выполняются процессы резервного копирования, происходит много операций ввода-вывода, а все остальное зависает. Клавиатура и указатель мыши перестают отвечать. Эхо при нажатии клавиш в любом терминале / оболочке задерживается на несколько секунд.
Как только резервное копирование завершено, интерактивный ответ возвращается к нормальному состоянию.
Подробнее о настройке и настройках:
Процесс резервного копирования использует rsnapshot
(который вызывает rsync
а также cp -al
) и работает с более низким приоритетом (заданию резервного копирования предшествует nice
), вот так:
nice /usr/bin/rsnapshot -VD -c /etc/my-rsnapshot.conf daily
Запуск резервного копирования под nice
похоже не помогает. Во время резервного копирования все интерактивные процессы, по-видимому, страдают от нехватки ресурсов процессора и ввода-вывода rsync
а также cp
процессы.
Это система IA-64, iCore-7, которая должна иметь возможность параллельно запускать 8 процессов. Память составляет 16 ГБ, а часть свободна. Урезанный вниз mount
Выход (если установлен дополнительный диск):
/dev/sdb2 on / type btrfs (rw,relatime,subvol=@,thread_pool=4)
/dev/sdb3 on /home type btrfs (rw,relatime,subvol=@home,thread_pool=4)
/dev/sda2 on /media/idisk/root ext4 (rw,relatime)
/dev/sda3 on /media/idisk/home ext4 (rw,relatime)
none on /sys/fs/cgroup type tmpfs (rw)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuset,clone_children)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu,release_agent=/run/cgmanager/agents/cgm-release-agent.cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory,release_agent=/run/cgmanager/agents/cgm-release-agent.memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices,release_agent=/run/cgmanager/agents/cgm-release-agent.devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer,release_agent=/run/cgmanager/agents/cgm-release-agent.freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,relatime,blkio,release_agent=/run/cgmanager/agents/cgm-release-agent.blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb)
Это современная система 14.04 LTS. Планировщик по умолчанию настроен на полностью честную очередь (cfq
):
# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
# cat /sys/block/sdb/queue/scheduler
noop deadline [cfq]
Мне удалось найти один связанный вопрос. планировщик истощает процессы, которые предлагает использовать nice
, но я уже делаю это.
Другой связанный вопрос с соответствующей информацией: Как я могу изменить noop
планировщик
Как сделать клавиатуру, мышь и интерактивные оболочки более отзывчивыми при выполнении резервного копирования?
Заранее спасибо.
1 ответ
Просто частичный ответ, провел больше исследований и экспериментов с тех пор, как спросил, которые решили мою проблему, и увидел, что ответов нет
Есть известные проблемы / ошибки в планировщиках ядра Linux с начала 2016 года.
Краткое резюме заключается в том, что при разных обстоятельствах ядра остаются бездействующими, даже если в очереди процессов присутствуют работающие процессы.
Рекомендации:
- Планировщик Linux, десятилетие потраченных впустую ядер
- GitHub репозиторий с экспериментальными исправлениями для планирования
Переход с btrfs на ext4 может облегчить эти проблемы:
Я лично переключился с btrfs на ext4. Производительность ввода / вывода заметно улучшилась.
Переключение на SSD может еще больше снизить производительность ввода-вывода
Твердотельные накопители значительно упали в цене и надежности. SSD-накопитель Samsung емкостью 2 ТБ (EVO 850) теперь стоит чуть больше 600 долларов. Переключение системы (root и home) на SSD теперь делает интенсивное резервное копирование совершенно незаметным (системный SSD быстро реагирует на тяжелые операции записи на обычный отформатированный ext4 диск в той же системе).
Наконец: с SSD преимущество сложных планировщиков в ядре кажется сомнительным. Я изменил свое значение по умолчанию на noop без какого-либо заметного снижения производительности. Фактически, с помощью планировщика noop я вижу снижение нагрузки на систему, снижение масштабируемости ЦП и снижение температуры оборудования.
$ cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
$ cat /proc/cpuinfo | grep Hz
model name : Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
cpu MHz : 836.308
model name : Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
cpu MHz : 990.253
... similar low actual frequency scaling for all cores ...