Ключевые слова:cfq, schedule, linux, kernel, tune, io, speed, (найти похожие документы)
From: Balancer <http://balancer.ru>
Date: Mon, 27 Feb 2007 14:31:37 +0000 (UTC)
Subject: CFQ IO Schedule или как уменьшить тормоза при интенсивной работе с диском
Оригинал: http://balancer.ru/forum/topic/753/50753/
Подавляющее большинство из нас сидит на ядрах 2.6
Но далеко не все в курсе, что настройки по умолчанию некоторых
параметров в этой системе неоптимальны на десктопе.
/proc/sys/vm/swappiness
В этом псевдофайле хранится значение (в целых процентах), на сколько я
понимаю (могу ошибаться), уровень свободной памяти, при котором
система начнёт активно сбрасывать память в своп.
Значение по умолчанию - 60. Это очень много. Такой параметр заставляет
Linux начинать интенсивный свопинг задолго до реальной десктопной
потребности в этом. Как следствие - значительный хруст винтом и
тормоза при относительно невеликой загрузке памяти.
# echo 10 > /proc/sys/vm/swappiness
и ваша система начнёт сбрасывать данные в своп когда это будет реально
необходимо. Сейчас у меня программы занимают 550Мб, буфера - 94Мб, а
кеш - 342Мб из 1010Мб доступной памяти. А своп занят только на 22Мб.
Диск - простаивает...
/proc/sys/vm/vfs_cache_pressure
Врать не буду, навскидку не помню, за что отвечает этот файл. Давно
разбирался, больше года назад. Но помню, что значение туда лучше
записать побольше :)
# echo 1000 > /proc/sys/vm/vfs_cache_pressure
CFQ IO Shedule
Это шедулер ввода-вывода, старающийся обеспечить таймслайсы для
каждого процесса. При используемом по умолчанию методе anticipatory,
процесс, начавший интенсивно работать с диском, может не отдавать
временные интервалы другим процессам. На десктопе это приводит к
сильным субхективным тормозам. Пока кто-то "хрустит" диском,
перерисовка GUI тормозит, программы не запускаются по минуте и т.д. и
т.п. CFQ делает более равномерную загрузку.
Практика. Смотрим:
# cat /sys/block/hda/queue/scheduler
Если видим:
noop [anticipatory] deadline cfq
меняем anticipatory на cfq:
# echo cfq > /sys/block/hda/queue/scheduler
Если cfq в ядре нет, то добавляем (menuconfig):
Symbol: IOSCHED_CFQ [=y]
Prompt: CFQ I/O scheduler
Location:
-> Block layer
-> IO Schedulers
Можно также сразу:
Symbol: DEFAULT_CFQ =y
Prompt: CFQ
Location:
-> Block layer
-> IO Schedulers
-> Default I/O scheduler (<choice> [=y])
После этого, система начинает более равномерно выделять доступ к диску
всем фоновым процессам. Фактически это выражается в том, что машина
совершенно перестаёт тормозить при 100% загрузке IO Wait (интенсивная
работа с винтом, копирование больших файлов и т.п.) Можно в фоне
запустить пару компиляций (Gentoo, привет!), копирование файла с винта
на винт и при этом десктоп практически не тормозит там, где до этого
буквально вставал колом :D
Приоритезация дискового ввода/вывода в Xen
Материал из Xgu.ru, http://xgu.ru/wiki/Xen/diskio
Автор: Андрей Авраменко, liks -=[at]=- altlinux.ru
Содержание
1 Приоритеты для использования Disk I/O
1.1 ionice
1.2 Приоритеты гостевых доменов
1.3 Эксеприменты
1.4 Заключение
2 Дополнительная информация
Приоритеты для использования Disk I/O
ionice
С выходом CFQ v3 в Linux 2.6.13 появилась возможность выставлять
приоритеты использования дисковой подсистемы для процессов, чего
раньше так не хватало. Подобно утилите nice для назначение приоритетов
использования процессора появилась утилита ionice.
Синтаксис команды прост:
ionice -c класс -n приоритет -p PID
Класс:
3 - Idle - Получает приоритет на использование жесткого диска только
когда другие программы ничего не пишут. Приоритеты не используются.
2 - Best Effort - Класс по-умолчанию. Доступные приоритеты [0-7].
1 - Real Time - Дает преимущественный доступ к диску процессу, не
смотря на другие процессы. Доступные приоритеты [0-7].
Приоритеты гостевых доменов
Теперь вернемся к самому Xen: После запуска гостевых систем по ps aux
можно видеть в квадратных скобках появившиеся драйвера блочных
устройств xvd, после которых идет ID гостевого домена. Выставляем для
них приоритеты как для обычных процессов.
Эксеприменты
Проведем 2 эксперимента для операций чтения и записи.
Выставим одной гостевой системе класс Real Time, а второй - Idle.
1. Запустим одновременно dd на обеих системах для записи небольшого
файла. Конечно слово одновременно здесь относительно, поэтому я провел
несколько тестов для точности результатов.
dd if=/dev/zero of=/root/file.txt bs=1024 count=10240000
В результате средняя скорость в первой гостевой системе - 40Mb/sec, во
второй - 20Mb/sec.
2. Другим экспериментом является операция тестирования скорости чтения
диска с помощью hdparm:
hdparm -t /dev/xvda
В результате в первом гостевом домене скорость - 2Mb/sec, во втором -
25Mb/sec.
Заключение
Недостатком данного решения является отсутствие соответствующих опций
в конфигурационном файле гостевых доменов Xen. Я постараюсь в
ближайшее время поговорить с разработчиками на эту тему.
Хочу обратить внимание, что данная возможность доступна только для
CFQ, поэтому предварительно выполните:
cat /sys/block/ИМЯ_ДИСКА/queue/scheduler
Активный sheduler должен быть в квадратных скобках.
Дополнительная информация
* Which is the fairest I/O scheduler of them all?
* Планировщики ввода/вывода в Linux
* CFQ IO Schedule и /proc/sys/... Или как уменьшить тормоза при интенсивной работе с диском
* Выбор планировщика ввода/вывода в Red Hat Enterprise Linux 4 и ядре версии 2.6
Тесты производительности приведены довольно странные :)
В первом случае с dd if=/dev/zero - пишутся sparse файлы - то есть почти ничего не пишется :)))
Во втором случае - с hdparm'ом - в первом запуске заполняется дисковый кэш, а при последующем мы видим что с него мы можем читать довольно быстро, что, в принципе, вполне очевидно.