ДЛЯ НАЧАЛА: ЖИВЫЕ

- Knoppix -
Линукс за пять минут
- Puppy Linux -
Хороший друг


ДЛЯ ДЕЛА: ПРОФИ

- Debian -
Он такой один
- Linux Mint -
С родинкой на щеке!
- CentOS -
Копейка рубль бережёт!
- Fedora -
По следам Red Hat
- Ubuntu Linux -
Мы одной крови!
- Mageia -
Красота и удобства
- openSUSE -
Настоящее немецкое качество
- Slackware -
Линукс из кубиков
- ALT Linux -
Что русскому хорошо





ДЛЯ ДЕЛА: РОЛЛЫ

- ArchLinux -
Гениальное - просто!
- PCLinuxOS -
Просто линукс
- Aptosid -
Почувствуй силу!


ДЛЯ ДЕЛА: СОБЕРИ САМ

- Gentoo -
Каждому своё
- LinuxFromScratch -
Линукс с нуля


ДЛЯ ДЕЛА: ЛЁГКИЕ

- DeLiCate -
Старость в радость!
- SLAX -
Тысяча и один модуль


ЗАЩИТА

- OpenWall -
Не стучите, закрыто!
- Kali -
Вам, хакеры!


ПРИЛОЖЕНИЯ

- Planet CCRMA -
Работа со звуком
- VegaStrike -
Каждому по планете!


ЭКСПЕРИМЕНТ

- коЛинуксы -
Не выходя из Виндоус
- GoboLinux -
Очевидно и вероятно
- ReactOS -
Освободите Виндоус!


РОДНЯ

- BSD-семейство -
На плечах гигантов
- OpenIndiana -
До звёзд рукой подать


АРХИВ (2003-2016)
ФОРУМ




НАШИ ПРОЕКТЫ

MATRIX GL
ПОЛЕЗНЫЕ СОВЕТЫ
ПИНГВИН В КАРМАНЕ
ЗАКЛАДКИ
СТАТЬИ
КОНТАКТЫ


ПОМОЧЬ






Личный архив ЕЗ

Оптимизация дисковой подсистемы при помощи hdparm

Программа hdparm позволяет изменить некоторые важные параметры дисковой подсистемы. Обычно при помощи изменения значений некоторых параметров удается повысить производительность системы. Настоятельно рекомендуется использовать hdparm для включения режима UDMA в случае, когда система его поддерживает, но он почему-то выключен.

Для начала запустите просто hdparm /dev/hda, чтобы увидеть статус основных режимов:

$ sudo hdparm /dev/hda

/dev/hda:

multcount = 16 (on)

IO_support = 3 (32-bit w/sync)

unmaskirq = 1 (on)

using_dma = 1 (on)

keepsettings = 0 (off)

readonly = 0 (off)

readahead = 256 (on)

geometry = 65535/16/63, sectors = 160086528, start = 0

Здесь у меня всё хорошо и настроено. На свежеустановленной системе всё обычно не так. Теперь посмотрим примерную производительность. Сделайте hdparm -Tt /dev/hda. 1-е число покажет скорость чтения из дискового кэша ОС (она не зависит от диска, но зависит от скорости оперативной памяти, процессора и т.д. и одинакова для всех дисков, установленных в системе). У меня она равна 340 Мб/с на довольно слабой по нынешним меркам системе. 2-е - скорость последовательного чтения с диска в его буфер. Эта скорость сильно зависит от режима доступа к диску и скорости самого диска. Если скорость меньше 10-15 Мб/с - очень плохо, на современных винчестерах такого быть не должно. Скорость порядка единиц Мб/с на современном диске определенно говорит о ненастроенности системы (скорее всего, в этом случае выключен UDMA). У меня 27 Мб/с на 20-гиговом Maxtor с 5400 об/мин и около 45 Мб/с на 80-гиговом тоже Maxtor, но с 7200 об/мин (режимы доступа - UDMA100). Замечу, что в версии 5.4 в hdparm поменялся алогритм вычисления скорости, поэтому результаты старых и новых версий сильно отличаются.

Еще у hdparm есть интересные ключи -I и -i (далее я буду приводить лишь ключи, которые в синтаксисе команды пишутся сразу после слова hdparm), выводящие получаемую от диска информацию о нем. Здесь можно посмотреть, в частности, поддерживаемые и используемые режимы работы и наличие дополнительных возможностей (напр., поддержку SMART).

Теперь будем настраивать. Во-1-х, командой hdparm -c3 /dev/hda включим 32-битный режим доступа. Включим "interrupt-unmask flag" ключом -u1. Выставим на максимум число секторов, обрабатываемых за 1 запрос (ключ -m<число>, где <число> может быть 32 и ниже, в зависимости от диска - если -m32 не сработает, попробуйте -m16). Также можно увеличить число последовательных секторов, считываемых "на всякий случай" при операциях чтения. Это делается ключом -a<число>. Число подбирается индивидуально - чем оно больше, тем, до некоторого предела, будут производительнее операции последовательного чтения (в частности, вышеупомянутый тест с ключом -t) и, как правило, менее производительны операции чтения небольших объемов данных, расположенных не подряд. У меня стоит -a256, выбранное исключительно по той причине, что с этой настройкой в тесте получается максимальная скорость (конечно же, этот тест слабо отражает производительность на реальных задачах).

Разрешение проблем с режимом UDMA

Если в выводе hdparm -I вместо

PIO modes: pio0 pio1 pio2 pio3 pio4

DMA modes: mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

звездочка стоит возле какого-нибудь mdma2 или, того хуже, pio4 - что-то не так. Во-1-х, попробуйте ключ -d1, он в нормальной ситуации должен включать dma (правда, в _нормальной_ ситуации он как раз не требуется - всё включается и так). Также напомню, что используемый режим должен поддерживаться одновременно диском и IDE-контроллером, поэтому у меня на 80-ке:

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 udma6

т.к. мой i815 не умеет UDMA133, хотя винт умеет. Ну и естественно, udma3 и выше возможны лишь с 80-жильным кабелем.

Если принудительное включение dma ключом -d1 не удалось, проблема лежит глубже. Выполните команду dmesg | less и поищите в загрузочных сообщениях ядра место, где говорится про инициализацию дисковых контроллеров:

ICH2: IDE controller at PCI slot 0000:00:1f.1

ICH2: chipset revision 17

ICH2: not 100% native mode: will probe irqs later

ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:DMA, hdb:DMA

ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:DMA, hdd:DMA

Если вместо имени чипа (у меня это ICH2 - южный мост i815EP) стоит какой-нибудь Unknown - требуется обновить ядро. Например, 2.4.20 не знает о nForce2, и ничего выше mdma2 и 7 Мб/с там не получить. Если имеются еще какие-нибудь сообщения об ошибках, связанных с IDE-контроллером - надо разбираться подробнее в каждом конкретном случае.

Иногда при использовании режима, не самого быстрого из поддерживаемых, можно вручную включить более быстрый. Для этого служит ключ -X. Его можно использовать в виде -X udma5 или -X<число>, где число в случае udma-режимов равно 64 + номер режима (69 для udma5 aka ATA100).

hdparm и CD-приводы

Большинство приведенных выше ключей работают и для CD-приводов (кроме -m, да и тесты на них особого смысла проводить нет). Плюс есть один очень полезный ключ -E, выставляющий скорость чтения (-E20, например).

И напоследок. Чтобы все установленные параметры выставлялись при каждом запуске системы, запишите в /etc/rc.d/rc.local строчку(и) для вызова hdparm с нужными параметрами, при этом ключи можно объединять, например:

hdparm -d1c3m16a256X69 /dev/hda

И не забудьте сравнить производительность (хотя бы при помощи встроенного теста) производительность до и после настройки.

Вернуться к оглавлению


При частичной или полной перепечатке, переводе, переработке материалов сайта ссылка на Knoppix.ru обязательна.
(c) Knoppix.ru 2003 - 2016