Планировщик: как настроить 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 года.

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

Рекомендации:

Переход с 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 ...
Другие вопросы по тегам