CFQ IO Schedule и /proc/sys/... Или как уменьшить тормоза при интенсивной работе с диском

 
+
-
edit
 

Balancer

администратор
★★★★★
В виду того, что заметка Портеж Gentoo вызвала большой интерес, решил продолжить тему. На этот раз - вопросом оптимизации дисковых операций Linux.

Подавляющее большинство из нас сидит на ядрах 2.6

Но далеко не все в курсе, что настройки по умолчанию некоторых параметров в этой системе неоптимальны на десктопе.

/proc/sys/vm/swappiness

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

Значение по умолчанию - 60. Это очень много. Такой параметр заставляет Linux начинать интенсивный свопинг задолго до реальной десктопной потребности в этом. Как следствие - значительный хруст винтом и тормоза при относительно невеликой загрузке памяти.
code bash
  1. # echo 10 > /proc/sys/vm/swappiness

и ваша система начнёт сбрасывать данные в своп когда это будет реально необходимо. Сейчас у меня программы занимают 550Мб, буфера - 94Мб, а кеш - 342Мб из 1010Мб доступной памяти. А своп занят только на 22Мб. Диск - простаивает...

/proc/sys/vm/vfs_cache_pressure

Врать не буду, навскидку не помню, за что отвечает этот файл. Давно разбирался, больше года назад. Но помню, что значение туда лучше записать побольше :)
code bash
  1. # echo 1000 > /proc/sys/vm/vfs_cache_pressure


CFQ IO Shedule

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

Практика. Смотрим:
code bash
  1. # cat /sys/block/hda/queue/scheduler


Если видим:
code text
  1. noop [anticipatory] deadline cfq


меняем anticipatory на cfq:
code bash
  1. # echo cfq > /sys/block/hda/queue/scheduler


Если cfq в ядре нет, то добавляем (menuconfig):
code text
  1.  Symbol: IOSCHED_CFQ [=y]
  2.  Prompt: CFQ I/O scheduler  
  3.    Location:
  4.      -> Block layer
  5.        -> IO Schedulers


Можно также сразу:

code text
  1.  Symbol: DEFAULT_CFQ =y
  2.  Prompt: CFQ
  3.    Location:
  4.      -> Block layer
  5.        -> IO Schedulers
  6.          -> Default I/O scheduler (<choice> [=y])


После этого, система начинает более равномерно выделять доступ к диску всем фоновым процессам. Фактически это выражается в том, что машина совершенно перестаёт тормозить при 100% загрузке IO Wait (интенсивная работа с винтом, копирование больших файлов и т.п.) Можно в фоне запустить пару компиляций (Gentoo, привет!), копирование файла с винта на винт и при этом десктоп практически не тормозит там, где до этого буквально вставал колом :D
 
RU helicopter #01.09.2006 18:03
+
-
edit
 

helicopter

втянувшийся

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

Nelud

новичок
Можно ли разместить эту статью на ru.gentoo-wiki.com ?
 
+
-
edit
 

Balancer

администратор
★★★★★
Nelud> Можно ли разместить эту статью на ru.gentoo-wiki.com ?

Да, естественно :)
 
RU helicopter #21.09.2006 15:35
+
-
edit
 

helicopter

втянувшийся

В kernel-2.6.18 вроде CFQ дефлотный идёт.
 
+
-
edit
 

Balancer

администратор
★★★★★
helicopter> В kernel-2.6.18 вроде CFQ дефлотный идёт.

Да.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru