Тонкая настройка IDE дисков в Linux с помощью hdparm

К сожалению, настройки по умолчанию для IDE жёстких дисков сделаны с уклоном в надёжность работы, в том числе на некачественом оборудовании. На большинстве же современных материнских плат и жёстких дисков можно заметно увеличить производительность IDE подсистемы, причём это не потребует много времени.

[Денис Смирнов (mithraen@freesource.info)]

Тонкая настройка IDE дисков с помощью hdparm

Введение

К сожалению, настройки по умолчанию для IDE жёстких дисков сделаны с уклоном в надёжность работы, в том числе на некачественом оборудовании. На большинстве же современных материнских плат и жёстких дисков можно заметно увеличить производительность IDE подсистемы, причём это не потребует много времени.

Характеристики IDE устройства

Для получения характеристик IDE устройства выполните команду:

   "hdparm -i /dev/hda"
Вместо /dev/hda можно указать любое другое IDE устройство

Пример результата для HDD

   /dev/hda:

   Model=IC35L120AVVA07-0, FwRev=VA6OA52A, SerialNo=VNC602A6G9A19A
   Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
   RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52
   BuffType=DualPortCache, BuffSize=1863kB, MaxMultSect=16, MultSect=8
   CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=66055248
   IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
   PIO modes: pio0 pio1 pio2 pio3 pio4
   DMA modes: mdma0 mdma1 mdma2
   UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5
   AdvancedPM=yes: disabled (255) WriteCache=enabled
   Drive conforms to: ATA/ATAPI-5 T13 1321D revision 1: 2 3 4 5
Пример результата для CD-RW
   /dev/hdd:

   Model=CD-W58E, FwRev=1.0A, SerialNo=
   Config={ Fixed Removeable DTR<=5Mbs DTR>10Mbs nonMagnetic }
   RawCHS=0/0/0, TrkSize=0, SectSize=0, ECCbytes=0
   BuffType=unknown, BuffSize=0kB, MaxMultSect=0
   (maybe): CurCHS=0/0/0, CurSects=0, LBA=yes, LBAsects=0
   IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
   PIO modes: pio0 pio1 pio2 pio3 pio4
   DMA modes: sdma0 sdma1 sdma2 mdma0 mdma1 *mdma2
   AdvancedPM=no
Расшифровка
  • MaxMultSect: Это поле содержит максимальное число секторов, которое ваш жесткий диск может прочитать за "один присест".
  • MultSect: Текущая настройка количества секторов, считываемых за один раз. * PIO modes и DMA modes: Здесь перечисляются режимы, которые поддерживает жесткий диск. Режим, помеченный символом "звездочка" (*), является текущим.
  • AdvancedPM: Признак 'yes' указывает на то, что жесткий диск поддерживает APM (Advanced Power Management - Расширенное Управление Питанием).
Запустив другую команду, вы получите дополнительную информацию:
   darkstar:~$ hdparm /dev/hda
Результат работы команды:
   /dev/hda: multcount = 0 (on) I/O support = 0
   (16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0
   (off) nowerr = 0 (off) readonly = 0 (off) readahead = 8 (on) geometry
   = 2482/255/63, sectors = 39876480, start = 0

Коротко...

  • multcount - число секторов, считываемых одновременно;
  • I/O support - режим обмена с жестким диском (16/32/32sync);
  • using_dma - указывает, используется ли в настоящий момент режим DMA или нет;
  • keepsettings - указывает, сохраняются ли настройки после программного сброса (изменять эту настройку не рекомендуется, если вы не уверены в том, что делаете);
  • readonly - обычно установлен в 1 только для CD-ROM, этот флаг сообщает системе - является ли устройство read-only или нет;
  • readahead - количество секторов для опережающего чтения;

Настройка

ПРЕДУПРЕЖДЕНИЕ! Неправильная настройка может привести к потере данных на жёстком диске, а возможно и самого диска.

  • I/O Support
    • -с0 -- установка 16-и битного режима (по-умолчанию)
    • -c1 -- установка 32-х битного режима (обычно то, что вам нужно)
    • -c3 -- установка 32-х битного синхронного режима (мне не известно, когда именно это надо)
  • Multicount

    Количество секторов передаваемых сразу (одним блоком). Степень двойки, максимальное число -- параметр MaxMultSect в выводе hdparm -i. Чаще всего вам именно его и нужно указывать.

  • Включение DMA

    Большинство современных чипсетов и HDD поддерживают DMA под линуксом. Для некоторых самых новых чипсетов в данный момент поддержки DMA может не быть, однако это не так часто бывает. Обычно в течении нескольких недель после выхода нового чипсета появляется его поддержка в последнем ядре, так что если DMA у вас не включается, то следует, скорее всего, обновить ядро.

    • -d0 -- запрещение DMA
    • -d1 -- включение DMA

  • DMA mode и PIO mode

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

    • -X<число> -- установка режима PIO или DMA
      Режимы multiword DMA: 32 (базовое число) + номер режима:
      • -X32 -- mdma0
      • -X33 -- mdma1
      • -X34 -- mdma2.
      Для PIO базовое число 8, для UltraDMA 64.
      • -X64 -- udma0
      • -X65 -- udma1
      • -X66 -- udma2
      • -X67 -- udma3
      • -X68 -- udma4
      • -X69 -- udma5

  • Readahead (опережающее чтение)

    На сколько чекторов вперёд читать при запросе. Ускоряет производительность при чтении файлов большого размера, однако замедляет работу с файлами небольшого размера.

    Лучше всего установить то же значение, что и для multicount.

    • -aN -- опережающее чтение N секторов

Тестирование

Для тестирования наберите:

   hdparm -t <имя устройства>

Желательно это делать, когда заметной дисковой активности нет.

Потом попробуйте какой-нибудь вариант конфигурации, например:

   hdparm -u1c1d1m8a8 <имя устройства>
После чего опять повторите:
   hdparm -t <имя устройства>
И сравните результаты.

По результату этого теста не стоит подбирать опции -a и -m, для этого лучим тестом будут реальные приложения, исполняемые на вашей машине. Если это домашняя машина, а не боевой сервер, на котором важна свертонкая подстройка (но на таких серверах редко оказываются IDE-диски, о которых здесь идёт речь), то тогда параметр multicount (-m) ставите на максимум, а параметр read-ahead (-a) равным multicount.

Особенности дистрибутивов

ALT Linux Master: Настройки hdparm задаются в файле /etc/sysconfig/harddisk/hd??

Денис Смирнов <mithraen@freesource.info>

Оригинал статьи расположен по адресу: http://www.opennet.ru/base/sys/htparm_tune.txt.html

[ опубликовано 27/11/2003 ]

Денис Смирнов (mithraen@freesource.info) - Тонкая настройка IDE дисков в Linux с помощью hdparm   Версия для печати