Разгоняем жесткие диски

Многие использующие Linux не подозревают о том, что его можно сделать еще быстрее, по крайней мере, в области работы с жестким диском.

Итак, первое, что требуется вам, это утилита hdparm версии 3.9 (узнать версию можно с помощью hdparm -V). Она доступна только из-под root. Эта утилита управляет параметрами драйвера IDE в Linux.

ПРЕДУПРЕЖДЕНИЕ

Перед всеми экспериментами уйдите в однопользовательский режим (telinit 1) или остановите все лишние сервисы. Дело в том, что в ходе экспериментов можно подвесить систему - думаю, никому не охота потерять данные. Плюс - на некоторых машинах в результате "игр" с DMA (ключи -d и -X) и unmask irq (-u) на дисках может нарушиться целостность файловой структуры, поэтому будьте осторожны.

Давайте посмотрим на диск (здесь я буду проводить эксперименты над своим вторым диском).

[root@multik /root]# hdparm /dev/hdb /dev/hdb: 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) geometry = 2491/255/63, sectors = 40032696, start = 0

Как вы видите, все отключено - везде стоят "0" или "off". Давайте посмотрим, что же может выжать Linux из этого диска.

[root@multik /root]# hdparm -t /dev/hdb /dev/hdb: Timing buffered disk reads: 64 MB in 17.08 seconds = 3.75 MB/sec

Всего 3.75 мегабайт в секунду. Это ли современные скорости? Между прочим, большинство дистрибутивов работают с диском именно так.

Итак, давайте его разгоним хоть чуть-чуть. Следующая команда должна пройти без ошибок на любом более-менее новом железе.

[root@multik /root]# hdparm -m2c3u1 /dev/hdb /dev/hdb: 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 часто помогает на машинах, где модем перестает качать или музыка заикается во время интенсивной работы с жестким диском.

Давайте еще раз посмотрим скорость: [root@multik /root]# hdparm -t /dev/hdb /dev/hdb: Timing buffered disk reads: 64 MB in 9.28 seconds = 6.90 MB/sec

Вот, уже неплохо, но все равно слабовато. Та техника, которая стоит у меня, способна на большее.

Что нам остается еще сделать? Правильно - включить наконец DMA.

[root@multik /root]# hdparm -d1 /dev/hdb /dev/hdb: setting using_dma to 1 (on) using_dma = 1 (on) [root@multik /root]# hdparm -t /dev/hdb /dev/hdb: Timing buffered disk reads: 64 MB in 3.06 seconds = 20.92 MB/sec Неплохая прибавка в скорости, не считаете?

Желающие и имеющие соответствующее оборудование, могут поиграться с параметром -X33 или -X66, включающие соответственно UDMA33 и UDMA66. Мое железо такого не тянет, посему я вынужден удовлетвориться такими результатами.

Итак, вы протестировали машину на разных тестах (или просто поработали достаточно долгое время за ней) и убедились, что винты спокойно тянут такое. Теперь достигнутое надо зафиксировать. Самое простое - добавить в конец /etc/rc.d/rc.local строчку, вызывающую hdparm с вашими параметрами. В моем случае это будет /sbin/hdparm -m2c3u1d1 /dev/hdb.

В случае RedHat-подобных дистрибутивов (ASPLinux, Mandrake, SuSE и т.д.) самое логичное - это поправить файл /etc/sysconfig/harddisks - например, параметру -m2 в нем соответствует строчка MULTIPLE_IO=2. Но этот способ не подходит тем, у кого к машине подключены разные приводы - некоторые диски могут не поддерживать режим UDMA и другие прелести современной жизни. В этом случае остается только один выход - заносить все эти параметры в rc.local.

Остается одна проблема - современные машины и ноутбуки поддерживают режим "спячки". При его включении снимается питание со всех устройств, оставляя его только на материнской плате для поддержки состояния машины. Таким образом, когда машина "просыпается", то все параметры винчестеров возвращаются к своему первоначальному состоянию. Часто при этом на консоли и в логе появляются сообщения о невозможности спозиционировать головку на диске (правильно, ведь диску необходимо время, что бы набрать скорость). Правда, надо отдать должное, на некоторых ноутбуках стоит "умный" BIOS, который возвращает им установленные значения. На Linux процессом "спячки" и "пробуждения" управляет демон apmd. Итак, если ваша машина подвержена такому недугу, придется поправить файл /etc/sysconfig/apmd (где располагается этот файл в дистрибутивах, отличных от RedHat-подобных, я не знаю, уточните по man 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"

Но будьте осторожны, эти параметры применятся ко всем жестким дискам в системе. Как ограничить apmd - я не нашел.

Кстати, так же можно чуть разогнать и CD-ROM. Правда, не все параметры применимы и к ним (попробуйте для начала убрать -m2).

Итак, все разогнано, но вас начинает потихоньку доставать, что ваш новый 52х скоростной CD-ROM постоянно завывает, когда вы с него играете mp3 музыку. В мире Windows просто - есть кучка программ, заплатив за которые деньги, вы получите доступ к "рычагу скоростей" вашего привода. В самом деле, для проигрывания mp3 хватит 2х привода, плюс к тому же он не так шумит и диски не греются. Итак, давайте затормозим свой привод.

В Linux еще проще:
[root@multik /root]#hdparm -E 1 /dev/hdc /dev/hdc: setting cdrom speed to 1

Таким образом мы устанавливаем приводу, находящемуся на /dev/hdc, скорость 1х.

Из проведенных экспериментов стало ясно, что большинство новых приводов поддерживают весь диапазон скоростей. Более старые - какое-то кратное их число. И только совсем старые поддерживают 2 скорости - 1х и свою максимальную.

Вот и все.

(с) 2001 Вячеслав Калошин (multik@asplinux.ru).

Разместить комментарий

В комментариях к материалам сайта нельзя использовать теги HTML и BB. Адреса email и ссылки на другие сайты в комментариях запрещены и в текстах не отображаются. Все комментарии проходят постмодерацию. Если у вас есть фотография, иллюстрирующая данный материал, вы можете добавить ее к своему комментарию. Загружаемое изображение должно быть в формате GIF или JPG.
Ваше имя: *
Комментарий: *
Фотография:
Код подтверждения: *