Разгоняем жесткие диски
Разгоняем жесткие диски Многие использующие Linux не подозревают о том, что его можно сделать еще быстрее, по крайней мере, в области работы с жестким диском.
Первое, что требуется нам для наших опытов, это утилита hdparm версии начиная с 3.9 (узнать версию можно с помощью hdparm -V). Доступна она только из-под root и управляет параметрами драйвера IDE в Linux.
Перед всеми экспериментами уйдите в однопользовательский режим или остановите все лишние сервисы. Дело в том, что в ходе экспериментов можно подвесить систему — думаю, никому не охота потерять данные. На некоторых машинах в результате такого рода настроек на дисках может нарушиться целостность файловой структуры, поэтому будьте осторожны.
Давайте посмотрим на наш диск (по умолчанию будем считать, что это первый диск). Выполним следующую команду:
hdparm /dev/hda
Результаты ее работы — информация о винчестере:
/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
...
Как вы видите, все отключено — везде стоят "0" или "off". Давайте посмотрим, что же может выжать Linux из этого диска. Выполняем команду:
hdparm -t /dev/hda
Результат:
/dev/hda:
Timing buffered disk reads: 64 MB in 17.06 seconds = 3.75 MB/sec
Всего 3.75 мегабайт в секунду. Это ли современные скорости? Между прочим, большинство дистрибутивов работают с диском именно так.
Итак, давайте его разгоним хоть чуть-чуть. Следующая команда должна пройти без ошибок на любом более-менее новом винчестере:
hdparm -m2c3u1 /dev/hda
Результат:
/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 2
setting unmaskirq to 1 (on)
multcount = 2 (on)
I/O support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
Этой командой мы включили драйвер IDE в 32х битный режим, настроили контроллер на запрет генерации прерываний при любой работе с диском и разрешили передавать более одного слова за такт. Кстати, параметр -u1 часто помогает на машинах, где модем перестает качать или музыка заикается во время интенсивной работы с жестким диском.
Давайте еще раз посмотрим скорость:
hdparm -t /dev/hda
Результат:
/dev/hda:
Timing buffered disk reads: 64 MB in 9.2 seconds = 6.95 MB/sec
Это уже неплохо, но можно и лучше.
Что нам остается еще сделать? Правильно — включить DMA. Команда:
hdparm -d1 /dev/hda
Результат:
/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)
Теперь снова меряем скорость:
hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 64 MB in 3.01 seconds = 21.26 MB/sec
Неплохо, а? Если есть желание и соответствующее оборудование, то можно поиграться с параметром -X33 или -X66, включающим соответственно UDMA33 и UDMA66.
Итак, вы поработали достаточно долгое время за машиной и убедились, что ваш хард спокойно работает в таком режиме. Теперь достигнутое надо зафиксировать. Проще всего добавить в конец файла /etc/rc.d/rc.local строчку, вызывающую hdparm с вашими параметрами. В нашем случае это будет /sbin/hdparm
-m2c3u1d1 /dev/hda.
В случае дистрибутивов ASPLinux, Mandrake, SuSE и т.д. лучше всего подправить файл /etc/sysconfig/harddisks — например, параметру -m2 в нем соответствует строчка MULTIPLE_IO=2. Но этот способ не подходит тем, у кого к машине подключены разные приводы, — некоторые диски могут не поддерживать режим UDMA и другие фичи. В этом случае остается только один выход — заносить все эти параметры в rc.local.
Остается еще одно: современные машины и ноутбуки поддерживают спящий режим. При его включении снимается питание со всех устройств, оставляя его только на материнской плате для поддержки состояния машины. Таким образом, когда машина "просыпается", то все параметры винчестеров возвращаются к своему первоначальному состоянию. Часто при этом на консоли и в логе появляются сообщения о невозможности позиционировать головку на диске (правильно, ведь диску необходимо время, чтобы набрать скорость). В Linux процессом "засыпания" и "пробуждения" управляет демон (сервис) apmd. Итак, нам придется поправить файл /etc/sysconfig/apmd. За установку параметров диска при остановках-включениях машины отвечают эти две строчки:
#HDPARM_AT_SUSPEND="-q -X0 -q -c0 -q -d0 -q -u0 -q -S0"
#HDPARM_AT_RESUME="-q -X66 -q -c1 -q -d1 -q -u1 -q -S30"
Уберите комментарии (удалите символ # в начале строки) и в кавычках перепишите те параметры, которые вы передаете hdparm при запуске машины. Первая строчка выполняется при "засыпании" машины, вторая — при ее "пробуждении". Параметр -q означает то, что hdparm не будет никуда писать об устанавливаемых параметрах. Для нашего случая вторая строчка будет иметь вид:
HDPARM_AT_RESUME="-q -m2 -q -c3 -q -d1 -q -u1"
Опять же, эти параметры применятся ко всем жестким дискам в системе.
А еще так же можно чуть разогнать и CD-ROM. Правда, не все параметры применимы к ним (попробуйте для начала убрать
-m2).
Итак, все разогнано, но вас начинает потихоньку доставать, что ваш новый 52х скоростной CD-ROM постоянно завывает, когда вы с него играете mp3 музыку. В мире Windows просто — есть куча программ, заплатив за которые деньги, вы получите доступ к "рычагу скоростей" вашего привода. В самом деле, для проигрывания mp3 хватит 2х привода, плюс к тому же он не так шумит и диски не греются. Давайте притормозим свой привод:
hdparm -E 2 /dev/hdc
Результат:
/dev/hdc:
setting cdrom speed to 2
Таким образом мы устанавливаем приводу, находящемуся на /dev/hdc, скорость 2х.
Первое, что требуется нам для наших опытов, это утилита hdparm версии начиная с 3.9 (узнать версию можно с помощью hdparm -V). Доступна она только из-под root и управляет параметрами драйвера IDE в Linux.
Перед всеми экспериментами уйдите в однопользовательский режим или остановите все лишние сервисы. Дело в том, что в ходе экспериментов можно подвесить систему — думаю, никому не охота потерять данные. На некоторых машинах в результате такого рода настроек на дисках может нарушиться целостность файловой структуры, поэтому будьте осторожны.
Давайте посмотрим на наш диск (по умолчанию будем считать, что это первый диск). Выполним следующую команду:
hdparm /dev/hda
Результаты ее работы — информация о винчестере:
/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
...
Как вы видите, все отключено — везде стоят "0" или "off". Давайте посмотрим, что же может выжать Linux из этого диска. Выполняем команду:
hdparm -t /dev/hda
Результат:
/dev/hda:
Timing buffered disk reads: 64 MB in 17.06 seconds = 3.75 MB/sec
Всего 3.75 мегабайт в секунду. Это ли современные скорости? Между прочим, большинство дистрибутивов работают с диском именно так.
Итак, давайте его разгоним хоть чуть-чуть. Следующая команда должна пройти без ошибок на любом более-менее новом винчестере:
hdparm -m2c3u1 /dev/hda
Результат:
/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 2
setting unmaskirq to 1 (on)
multcount = 2 (on)
I/O support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
Этой командой мы включили драйвер IDE в 32х битный режим, настроили контроллер на запрет генерации прерываний при любой работе с диском и разрешили передавать более одного слова за такт. Кстати, параметр -u1 часто помогает на машинах, где модем перестает качать или музыка заикается во время интенсивной работы с жестким диском.
Давайте еще раз посмотрим скорость:
hdparm -t /dev/hda
Результат:
/dev/hda:
Timing buffered disk reads: 64 MB in 9.2 seconds = 6.95 MB/sec
Это уже неплохо, но можно и лучше.
Что нам остается еще сделать? Правильно — включить DMA. Команда:
hdparm -d1 /dev/hda
Результат:
/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)
Теперь снова меряем скорость:
hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 64 MB in 3.01 seconds = 21.26 MB/sec
Неплохо, а? Если есть желание и соответствующее оборудование, то можно поиграться с параметром -X33 или -X66, включающим соответственно UDMA33 и UDMA66.
Итак, вы поработали достаточно долгое время за машиной и убедились, что ваш хард спокойно работает в таком режиме. Теперь достигнутое надо зафиксировать. Проще всего добавить в конец файла /etc/rc.d/rc.local строчку, вызывающую hdparm с вашими параметрами. В нашем случае это будет /sbin/hdparm
-m2c3u1d1 /dev/hda.
В случае дистрибутивов ASPLinux, Mandrake, SuSE и т.д. лучше всего подправить файл /etc/sysconfig/harddisks — например, параметру -m2 в нем соответствует строчка MULTIPLE_IO=2. Но этот способ не подходит тем, у кого к машине подключены разные приводы, — некоторые диски могут не поддерживать режим UDMA и другие фичи. В этом случае остается только один выход — заносить все эти параметры в rc.local.
Остается еще одно: современные машины и ноутбуки поддерживают спящий режим. При его включении снимается питание со всех устройств, оставляя его только на материнской плате для поддержки состояния машины. Таким образом, когда машина "просыпается", то все параметры винчестеров возвращаются к своему первоначальному состоянию. Часто при этом на консоли и в логе появляются сообщения о невозможности позиционировать головку на диске (правильно, ведь диску необходимо время, чтобы набрать скорость). В Linux процессом "засыпания" и "пробуждения" управляет демон (сервис) apmd. Итак, нам придется поправить файл /etc/sysconfig/apmd. За установку параметров диска при остановках-включениях машины отвечают эти две строчки:
#HDPARM_AT_SUSPEND="-q -X0 -q -c0 -q -d0 -q -u0 -q -S0"
#HDPARM_AT_RESUME="-q -X66 -q -c1 -q -d1 -q -u1 -q -S30"
Уберите комментарии (удалите символ # в начале строки) и в кавычках перепишите те параметры, которые вы передаете hdparm при запуске машины. Первая строчка выполняется при "засыпании" машины, вторая — при ее "пробуждении". Параметр -q означает то, что hdparm не будет никуда писать об устанавливаемых параметрах. Для нашего случая вторая строчка будет иметь вид:
HDPARM_AT_RESUME="-q -m2 -q -c3 -q -d1 -q -u1"
Опять же, эти параметры применятся ко всем жестким дискам в системе.
А еще так же можно чуть разогнать и CD-ROM. Правда, не все параметры применимы к ним (попробуйте для начала убрать
-m2).
Итак, все разогнано, но вас начинает потихоньку доставать, что ваш новый 52х скоростной CD-ROM постоянно завывает, когда вы с него играете mp3 музыку. В мире Windows просто — есть куча программ, заплатив за которые деньги, вы получите доступ к "рычагу скоростей" вашего привода. В самом деле, для проигрывания mp3 хватит 2х привода, плюс к тому же он не так шумит и диски не греются. Давайте притормозим свой привод:
hdparm -E 2 /dev/hdc
Результат:
/dev/hdc:
setting cdrom speed to 2
Таким образом мы устанавливаем приводу, находящемуся на /dev/hdc, скорость 2х.
Компьютерная газета. Статья была опубликована в номере 13 за 2002 год в рубрике soft :: linux