Мини-HOWTO: Ultra-DMA в Linux

Brion Vibber

Перевод: Павел Гашев, ASPLinux

Аннотация

В этом документе объясняется, как использовать жесткие диски и интерфейсы Ultra-DMA, Ultra-ATA, Ultra33 и Ultra66 в Linux. Более свежую версию этого мини-HOWTO вы можете найти по адресу: http://pobox.com/~brion/linux/Ultra-DMA.html.


Введение

В этом документе объясняется, как использовать жесткие диски с интерфейсом Ultra-DMA, Ultra-ATA, Ultra33, Ultra66 в Linux. Во многих случаях в их использовании нет ничего сложного, но некоторые действия могут повысить производительность. Однако, в некоторых случаях вам нужно сильно постараться, чтобы все это настроить.


Ответственность

Информация в этом документе, насколько я знаю, правильна и должна работать. Тем не менее, здесь могут быть опечатки, здесь могут быть какие-нибудь мистические ошибки, возникшие во время передачи, и здесь может быть странная несовместимость именно с вашей системой, так что это может работать не так, как надо. Так что... перед тем как вы начнете возиться со своим жестким диском, СОХРАНИТЕ ВСЮ НЕОБХОДИМУЮ ИНФОРМАЦИЮ В ДРУГОМ МЕСТЕ! Если вы нерегулярно сохраняете вашу информацию, то лучше сделать это прямо сейчас.


Благодарности

Michel Aubry - Патч для включения UDMA на VIA для ядра <=2.0.33 & другая информация, большой унифицированный патч UDMA для 2.0.34+

Andrew Balsa - Предоставил некоторую важную информацию по UDMA и общий патч для UDMA для Intel TX, SiS и VP1 на ядрах <=2.0.33; а также большой унифицированный патч UDMA для 2.0.34+

Maxime Baudin - Французкий перевод

Bokonon - "Контроллер" на "интерфейс"

John G. - - Патч VIA VP2 для <=2.0.33 & информация

Martin Gaitan - Работа по установке Promise Ultra33 ide0/ide1

Andre M. Hedrick - текущий сопроводитель подсистемы IDE Linux

Hеvard Tautra Knutsen - Норвежский перевод

Norman Jacobowitz - Заставил меня добавить информацию о VP3

John Levon - Информация о материнских платах TX Pro

Peter Monta - Информация по использованию двух карт Ultra33

Masayoshi Nakano - Японский перевод

Gadi Oxman - Патч для Promise Ultra33 для ядра <=2.0.34 и нахождение "секретных чисел"

Andy Pearce - Предложено добавить информацию о дополнительных файлах устройств hde-h

Andrei Pitis - Патч для LILO

Brion Vibber - Сам документ


История документа

Версия 3.0, 9 ноября 1999: Наконец нашлось время произвести некоторые ключевые изменения, такие как указание архива патчей IDE на Kernel.org archives надоедливая школа! Все ссылки sunsite обновлены на новые metalab.unc.edu или www.linuxdoc.org

v2.1, 27 мая 1999: Исправлены некоторые незначительные упущения и ошибки 2.0, и добавлена информация о Promise Ultra66 и ядрах 2.2/2.3.

v2.0, 7 августа 1998: Значительные изменения и почти полная реструктуризация документа на встроенные интерфейсы и дополнительные интерфейсные платы; Большой Унифицированный патч UDMA (часть Гигантского патча) для 2.0.35. Добавлены благодарности в алфавитном порядке по фамилии. "Контроллер" в большинстве случаев изменен на более технически правильный "интерфейс". Добавлена информация о включении/выключении UDMA, черный список, и еще кое-что!

v1.45, 6 июля 1998: Незначительные изменения - патч для Red Hat 5.1 и 2.0.34 для Promise Ultra33, патч LILO для загрузки с PCI интерфейса (Promise Ultra33)

v1.41, 3 мая 1998: Исправлена пара опечаток, добавлены благодарности переводчикам.

v1.4, 28 апреля 1998: UDMA-Generic patch, некоторая общая информация. Добавлен раздел Копирование.

v1.3, 5 марта 1998: Информация о VIA VP3, лучшие инструкции по выполнению патча, указатель на более свежий патч Promise.

v1.2, 27 января 1998: Дополнительная информация по работе с Promise.

v1.1, 21 января 1998: Новая информация о чипсете VIA, установка через интерфейс Promise Ultra33, и включение режимов передачи Bus Master & UDMA.

v1.0, 19 января 1998: Более менее законченная первая версия в формате SGML.


Copying

This document may be freely copied and distributed for informational purposes. It may not be modified, except for reformatting, without the permission of the author. If you wish to translate this document into another language you may do so, however you should contact the author first so that updated versions of this document can be sent out to translators as well as directly to the Linux Documentation Project.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу


Что такое Ultra-DMA, и зачем мне это надо?

Вот краткий обзор технологий IDE дисков:


IDE, EIDE и ATAPI

Это старые технологии. Большинство жестких дисков и не-SCSI интерфейсов, которые вы можете купить сегодня или уже используете - EIDE, хотя множество винчестеров большой емкости - UDMA.


Bus Master DMA

Bus Master DMA - это технология, повышающая скорость обмена с жестким диском, требующая поддержки материнской платы, BIOS и, по крайней мере, какой-то поддержки от самого жесткого диска.

Подробнее смотрите на http://developer.intel.com/design/pcisets/busmastr/FAQs.htm.


Ultra-DMA он же Ultra-ATA он же Ultra33 он же...

Ultra-DMA может называться по-разному, но мы его будем называть просто UDMA.

UDMA - это более продвинутая технология, обеспечивающая передачу данных жесткого диска со скоростью до 33.3 Мб/сек в UDMA режиме 2 и 66.7 Мб/сек в режиме 4, что от двух до четырех раз быстрее, чем EIDE, и дешевле, чем SCSI. Много новых компьютеров уже поставляется с UDMA-дисками большого размера и UDMA-интерфейсами, однако возможна установка дополнительной карты UDMA-интерфейса (такой как Promise Ultra33 или Ultra66), чтобы увеличить скорость даже на старых не-UDMA дисках.

Подробнее о UDMA смотрите на http://www.quantum.com/src/whitepapers/ultraata/

Замечу, что длина кабеля UDMA, по сравнению с простым DMA, желательно должна быть менее 30см, и не более 18 дюймов. Для скорости 66Мб/сек требуется специальный 80-жильный кабель не большей длины. Если у вас появляется большое количество CRC-ошибок, то попробуйте использовать кабель покороче.


По крайней мере "Ultra"?

Прежде, чем пойдем дальше, давайте проясним заблуждение. Эти 33 и 66 MB/сек - максимальная скорость передачи (burst transfer rate), а это встречается не очень часто. Вот кусок из UDMA.txt:

Быстрый (burst) (немедленный) режим передачи предполагает от 16.6МБ/сек
(PIO режим 4) до 16.6МБ/сек (DMA режим 2) и до 33МБ/сек (UDMA).
Kim-Hoe Pang в своем патче ядра 2.1.55 логически проверил скорость передачи
в максимальном режиме UDMA: 60 нс/слово, что означает 33МБ/сек.

Замечу, что скоростной (burst) режим передачи влияет только на данные,
передаваемые из кэша EIDE винчестера (476Кб на IBM 6.4Гб),
а это IMHO не особенно актуально для большинства пользователей Linux.

Ядро Linux использует для кэширования доступа к винчестеру столько
оперативной памяти, насколько это возможно, и если данные не находятся в
кэше ядра, то мало шансов, что они будут в меньшем по размеру кэше
винчестера.

Намного большее значение имеет устойчивая скорость передачи (sustained transfer rate) - скорость, на которой данные передаются с винчестера в память. Проще всего использовать hdparm, чтобы измерить устойчивую скорость передачи, например "hdparm -t /dev/hda", для измерения скорости первого IDE диска.

Вот некоторые данные, собранные после большого количества испытаний, с
использованием утилиты hdparm (Mark Lord):

PIO в режиме 4 под Linux дает скорость передачи:   +/- 5.2MB/s

DMA в режиме 2 под Linux дает скорость передачи:   +/- 7.2MB/s

UDMA в режиме 2 под Linux дает скорость передачи:  +/- 9.8MB/s

Как вы можете видеть, UDMA все еще в два раза быстрей обычного EIDE, и все еще значительно быстрей Bus Master DMA. Большинство современных UDMA-дисков дают от 10 до 15 МБ/сек с использованием UDMA в режиме 2 (33 MB/s) или 4 (66 МБ/сек).

Кроме того, использование DMA, в отличии от PIO, значительно сокращает использование процессора во время обмена с диском.


UDMA или SCSI?

Я не могу дать вам точные цифры, но, по общему мнению, SCSI может дать лучшую производительность, чем UDMA. Тем не менее, если вы посмотрите на цены винчестеров, то заметите, что UDMA значительно дешевле. В большинстве случаев, коэффициент цена/производительность говорит в пользу UDMA.


Использование жестких дисков UDMA с интерфейсом EIDE

Это просто. Все жесткие диски UDMA полностью совместимы с EIDE, просто включите винчестер в EIDE интерфейс, и у Linux не должно быть проблем с его определением и использованием .


Использование жестких дисков с интерфейсом UDMA

У меня есть две новости. Одна плохая, другая хорошая. Хорошая новость - UDMA-интерфейс работает как UDMA-винчестерами, так и с EIDE-винчестерами, причем, в любом случае, намного быстрее, чем на обычном EIDE.

Плохая новость - старые версии ядра (2.0.x) полностью не поддерживают UDMA. Новые версии (2.0.x) поддерживают UDMA33. Однако, имеются патчи, включающие поддержку UDMA для ядер, которые этого не делают.

К тому же, некоторые интерфейсы UDMA, выполненные в виде PCI-карт, в отличие от встроенных в материнскую плату, также требуют патч, и, более того, работа с ними достаточно сложна. Собственно для этого и существует данный документ.


Интерфейсы UDMA в виде PCI плат

Существуют интерфейсы UDMA, выполненные в виде PCI-плат, позволяющие установить поддержку UDMA без замены материнской платы, или для установки четырех дополнительных устройств. К тому же, они изначально устанавливаются на некоторые виды компьютеров (Gateway 2000, Dell).

Большинство из них не поддерживаются старыми ядрами (2.0.x), но многие из них должны работать с ядром 2.2.x и, соответственно, с дистрибутивами, основанными на этих версиях (RedHat 6.0, SuSE 6.1). Тем не менее, некоторые последние платы (например Promise Ultra66) не работают даже с текущими ядрами версий 2.2.x. Если у вас есть такая плата, то либо надо произвести патч ядра, либо установить свежий дистрибутив. В случае, если вам надо установить Linux на жесткий диск, подключенный к такой интерфейсной плате, то придется использовать пару фокусов:


Promise Ultra33

Это PCI-карта с двумя UDMA-каналами, поддерживающая до четырех устройств http://www.promise.com. Она поставлялась с ранними моделями компьютеров Gateway 2000 Pentium II.

Ядра 2.0.35 и выше, и все 2.2.x поддерживают Ultra33, и у вас не должно быть проблем с установкой дистрибутивов. Тем не менее, старые версии (2.0.34) не имеют такой поддержки, и вам будет сложно установить старый дистрибутив, если не можете или не хотите использовать новый (например, если это утвержденная версия в вашей организации).

Установка Linux и Ultra33

Хотя существует патч для Ultra33, не так уж просто его применить и пересобрать ядро, если нет инсталлированного Linux. Так что вам понадобятся следующее (спасибо Gadi Oxman'у):

Если во время инсталляции у вас есть доступ к консоли, использовуйте
команду "cat /proc/pci", чтобы посмотреть установки Promise Ultra33:


    RAID bus interface: Promise Technology Unknown device (rev 1).
      Vendor id=105a. Device id=4d33.
      Medium devsel.  IRQ 12.  Master Capable.  Latency=32.
      I/O at 0xe000.   (a)
      I/O at 0xd804.   (b)
      I/O at 0xd400.   (c)
      I/O at 0xd004.   (d)
      I/O at 0xc800.   (e)

и использовать параметры "ide2=a,b+2 ide3=c,d+2" при запуске ядра.

В нашем случае это будет "ide2=0xe000,0xd806 ide3=0xd400,0xd006". Замечу, что в вашем случае цифры могут отличаться. Если у вас только один винчестер или два на одном кабеле, то можете не указывать ide3.

Red Hat 5.1: Загрузитесь с загрузочной дискеты и нажмите "Enter", когда появится приглашение. Когда запустится ядро, выберите язык, тип клавиатуры и вид инсталляции. Выберите, откуда будет производиться установка (пока это не имеет значения). Когда появится "Выберите путь к дистрибутиву", нажмите Alt-F2, и вы попадете в командный режим. Запустите "cat /proc/pci", запишите цифры и снова загрузитесь с загрузочной дискеты. Наберите "linux ide2= (цифры как в примере выше) ide3=(еще цифры)". Теперь можете без проблем поставить дистрибутив на винчестер. Тем не менее, вы не сможете поставить LILO. Вместо этого сделайте загрузочную дискету и загрузитесь с нее с теми же параметрами. Затем вы можете произвести патч ядра.

Red Hat 5.0 и Slackware 3.4: Примерно так же, но программа инсталляции этих дистрибутивов не позволяет устанавливать Linux на /dev/hde-h (устройства на ide2 и ide3). В этом случае необходимо использовать ide0 и ide1, вместо ide2 и ide3. Только не забудьте про устройства, необходимые для инсталляции. Например, если мы хотим поставить Linux c CD-ROM /dev/hdd (интерфейс ide1 на материнской плате) на винчестер /dev/hdd (ide2 - Ultra33), то должны использовать свободный ide0, а ide1 оставить без изменения. В нашем случае мы должны загрузится с параметром "ide0=0xe000,0xd806". В Red Hat 5.0 в командный режим можно попасть, используя "аварийный диск" (rescue disk). В Slackware в командный режим можно попасть в процессе стандартной установки. Тем не менее, в Red Hat 5.0 трудно загрузить Linux после окончания установки. Если у вас появились проблемы с загрузкой, попробуйте использовать загрузочный диск из Slackware ftp://ftp.cdrom.com/pub/linux/slackware-3.5/bootdsks.144/

С другими дистрибутивами Linux вам придется немного поимпровизировать, но процесс должен быть похож на вышеописанный.

ВАЖНО: Без патча (описываемого в разделе "Унифицированные патчи IDE"), ядру необходимы эти параметры, чтобы иметь доступ к диску! Следовательно, вы должны сконфигурировать LILO, вне зависимости, находится ли оно на винчестере или на флоппи-диске. Вы должны указать те же самые параметры, что и во время инсталляции, иначе система не загрузится! И придется указывать эти параметры вручную для LILO. Также вы можете, как можно быстрее, произвести патч ядра, и больше не придется беспокоится о параметрах загрузки. И еще, не существует возможности передать параметры ядру, находящемуся на флоппи-диске (сделанному при помощи "make zdisk"), т.е. вы должны использовать LILO (или LOADLIN).

В случае, если ядра без патча и программы инсталляции не могут использовать ide2 и ide3, даже если устройства определились правильно, попробуйте указать ide0 или ide1, вместо ide2 и ide3. Это, по сути, отключает IDE интерфейс материнской платы, и можете следовать инструкциям так, как если бы физически заменили интерфейс. Замечу, что если вы используете IDE CD-ROM, подключенный к материнской плате, но должны убедиться, что не перекрыли этот интерфейс. Если CD-ROM на hda или hdb, используйте ide1. Если он на hdc или hdd, используйте ide0.

Другой вариант установки Linux и Ultra33

Если вы не можете добиться желаемого результата программным путем, то попробуйте более грубый метод. Этот альтернативный метод практически должен сработать, но придется залезть в компьютер, со всеми выходящими отсюда последствиями. ВНИМАНИЕ: Если процесс подключения/отключения IDE устройств вам не знаком, то, перед тем как начать, прочитайте руководства, идущие вместе с компьютером, винчестером и/или с Promise Ultra33! Если вы что-нибудь открутите и не будете знать, как это поставить обратно, то останется лишь сожалеть об этом!

Как было сказано, все очень просто. В большинство современных материнских плат встроены IDE-интерфейсы. Отключите винчестер от Ultra33 и подключите его к материнской плате. Если к материнской плате подключены другие IDE устройства, такие как CD-ROM или ZIP, то очень просто подключить винчестер к свободному разъему кабеля IDE или временно отключить устройство, которое сейчас вам не нужно (стриммер или ZIP). Установите Linux. Скачайте и примените патч для Promise UDMA (см. следующий раздел).

Теперь вы готовы (почти) к тому, чтобы подключить винчестер обратно к Promise. Чтобы обезопасить себя, сделайте загрузочный диск с ядром (cd /usr/src/linux ; make zdisk), с которого можете загрузиться, если не получится с винчестера. На самом деле, лучше всего сделать два диска и один спрятать.

Хорошо, теперь настало время немного подумать: если у вас только один жесткий диск, и он будет подключен к Promise, то скорее всего он будет /dev/hde (a и b - это первичный интерфейс, c и d - это вторичный интерфейс материнской платы). Если вы хотите подключить другие устройства к первичному интерфейсу Promise, это будет /dev/hdf, к вторичному - /dev/hdg и /dev/hdh.

Отредактируйте /etc/fstab, сменив все разделы на винчестерах, отключаемых от материнской платы (/dev/hda, hdb, и т.д.), на соответственные значения в Promise (/dev/hde, hdf, и т.д.). Если вы хотите переподключить другие устройства (такие как CD-ROM или ZIP), смените и их. Например, если CD-ROM сначала был на /dev/hda, а туда вы подключали жесткий диск, и он теперь на /dev/hdb или /dev/hdc, поставьте обратно /dev/hda.

Если вы используете LILO, настройте его на загрузку с правильного устройства (если не знаете как, прочитайте LILO mini-HOWTO), иначе не удастся загрузиться даже с загрузочной дискеты, которая у вас есть, т.к. ее тоже нужно настроить на загрузку с нового раздела. Это можно сделать при помощи команды rdev. Вставьте диск в дисковод и наберите "rdev /dev/fd0 /dev/hde1". Только, конечно, вам нужно указать правильный корневой раздел (у меня, например, /dev/hde7)!

Перезагрузитесь. Система должна работать нормально.

Патч для Ultra33

Ядра 2.0.35 и выше поддерживают Promise Ultra33; скачайте и установите ядро из вашего дистрибутива или с http://www.kernel.org.

В качестве инструкции по сборке ядра, прочитайте Kernel HOWTO.

Использование других карт Ultra33 на одной машине

В данный момент это не поддерживается: не делайте это прямо сейчас, если вы только не хотите возиться с ядром, чтобы заставить их работать.


Promise Ultra66

По сути это та же Ultra33, но поддерживающая UDMA в режиме 4 со скоростью передачи 66МБ/сек

Патч для ядер 2.0.x и 2.2.x доступен на http://www.kernel.org/pub/linux/kernel/people/hedrickК тому же поддержка этих карт включена в серию 2.3.x (начиная с 2.3.3).

Тем не менее, чтобы произвести патч или заменить ядро, вам нужно использовать те же фокусы, как и для Ultra33 в предыдущем разделе. Или использовать загрузочный диск, provided by Promise


Artop ATP850UF

Эта карта поддерживается унифицированным кодом IDE. Инсталляция Linux на жесткий диск, подключенный к этой плате, потребует того же, что и для Promise Ultra33.


Добавление файлов устройств

Третий и четвертый интерфейс IDE (ide2 and ide3) используют файлы от /dev/hde* до /dev/hdh*. В старых дистрибутивах они автоматически не создаются, так что вам придется создать их вручную.

Это можно довольно просто сделать, если у вас установлены исходные тексты ядра. Просто запустите /usr/src/linux/scripts/MAKEDEV.ide, и он создаст все необходимые файлы устройств.


Встроенные интерфейсы UDMA

Существуют UDMA-совместимые интерфейсы, встроенные в материнские платы. Они используют стандартные порты и могут спокойно работать на медленных не-UDMA скоростях на старых 2.0.x ядрах. Таким образом, во время инсталляции не должно быть никаких проблем, а установка патча превращается из необходимого шага в роскошь. Некоторые платы поддерживаются последними ядрами 2.0.x, а в 2.2.x добавлена поддержка чипсетов Intel.


Intel FX, HX, VX, TX, LX, and BX

Еще раз благодарю Gadi за информацию:

Поддержка Bus Master DMA support для чипсета Intel TX
реализована в 2.0.31 и выше.

В старых ядрах (таких как 2.0.30 в Slackware 3.4), интерфейс работает в медленном EIDE режиме. Однако интерфейс автоматически распознается ядром и проблем в работе быть не должно.

Полная поддержка второго режима UDMA для этих чипсетов включена в ядра 2.2.x и унифицированный IDE патч; см. раздел "Унифицированные патчи IDE".


VIA VP2 и похожие чипсеты

Этот интерфейс тоже определяется автоматически и работает в режиме EIDE на старых ядрах. Если у вас такая плата, то можете скачать патч, повышающий пропускную способность, и избавитесь от надоевшего сообщения "неизвестное устройство PCI"

Он доступен на http://www.ipass.net/~prefect/; он разработан для чипсета VIA VP2/97, находящегося на материнских платах FIC PA-2007 и PA-2011, но работает на похожих чипсетах. Известно, что он работает на новых чипсетах VIA VP3.

Замечу, что патч поддерживает только режим Bus Master, а это не полный UDMA, но это все-таки лучше, чем простой EIDE. Чтобы включить режим BMDMA, следуйте инструкциям, расположенным на сайте.

Существует патч, полностью поддерживающий UDMA http://www.pyreneesweb.com/Udma/udma.htmlОн разработан для VIA VT82C586B, но должен работать на чипсетах VP2, VP3, VPX, P6 и AGP Apollo. Следуйте рекомендациям на сайте, но я рекомендую вам сохранить все файлы где-нибудь в другом месте, т.к. возможны проблемы с совместимостью с материнской платой. Но, если это работает, то это работает без проблем.

Замечу, что чипсет VP1 не поддерживается этими патчами, но работает с драйверами, входящими в "Унифицированные патчи IDE".


TX Pro и другие "Pro"

В данный момент для плат TX Pro поддержка UDMA не реализована. Они не похожи на платы TX: Я слышал, кто-то работает над этим, так что в будущем появится патч, но пока его нет.


HPT 366

Этот чипсет популярен на материнских платах Abit BP-6 и др. и содержит в себе поддержку четвертого режима UDMA (66МБ/сек) на двух каналах, в дополнении к двум другим каналам во втором режиме (33МБ/сек). Он поддерживается как драйверами, описанными в разделе "Унифицированные патчи IDE", так и текущими версиями ядра. На старых (2.0.x) версиях ядра инсталляция может потребовать работы, похожей на ту, что описана в разделе "Promise Ultra33"


Унифицированные патчи IDE

Унифицированные IDE патчи для ядер 2.0.x, 2.2.x и 2.3.x предоставляют поддержку множетва чипсетов и PCI плат. Если ваш чипсет не поддерживается текущим ядром, то можно использовать эти патчи.

Унифицированный IDE код поддерживает Andre Hedrick, он доступен на your local kernel archive mirror.

Поддержка UDMA предоставляется, как минимум, для следующих чипсетов, и вероятно работает на других:

  • Все чипсеты Intel: FX, HX, VX, TX, LX

  • Все чипсеты SiS (тестирован только SiS5598, но все семейство чипсетов содержит один и тот же контроллер 5513).

  • Чипсеты VIA (тестирован только 82C586B, но опять-таки все семейство имеет одну структуру). Для интерфейсов VIA имеется поддержка специальной диагностики.

  • PCI карты Promise и Artop.

  • Чипсет Aladdin V (ALi15x3)

  • Плата HPT343 и чипсет HPT366 (осторожно! см. раздел "HPT 366")

Он также разработан для легкой установки поддержки других чипсетов.

Вот несколько замечаний Andre Balsa, автора первых патчей:

На хороших материнских платах с жесткими дисками UDMA IBM достигается
максимальная скорость - около 10Мб/сек (hdparm -T)

Чипсеты Intel TX имеют один буфер FIFO на два IDE интерфейса,
так что использование двух жестких дисков UDMA не даст большего
быстродействия, чем один UDMA жесткий диск.
Тем не менее, SiS5598 имеет два полностью разделенных интерфейса,
каждый со своим буфером FIFO. Теоретически, каждый может дать
66Мб/сек, используя драйвер md и разделяя данные по двум
жестким дискам. Я думаю, SiS5571 имеет ту же архитектуру.
У меня нет данных о чипсетах VIA, не могу ничего о них сказать.

Драйвер IDE (U)DMA, (автор Mark Lord) переключается особенно
быстро, что влияет на задержку в передаче данных.
Он идеален для передачи множества мелких данных (например, на
сервере новостей), что в некоторых случаях может быть идеальней
SCSI.


Активирование и деактивирование UDMA

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

Тем не менее, в некоторых случаях устройство поддерживает UDMA, но BIOS говорит, что это не так. В этом случае возможно включение вручную.


Использование параметров запуска ядра

В ядрах 2.1.113 и выше можно включить DMA для обоих устройств на данном интерфейсе IDE, используя параметр ideX=dma, где X - номер интерфейса (первый - 0). Однако, это может не сработать.

Параметры могут быть установлены через LILO, LOADLIN или большинством других загрузчиков Linux. Для более подробной информации см. Bootdisk HOWTO.


Использование hdparm

hdparm - это программа, используемая для изменения параметров жестких дисков под Linux. Среди других ее функций есть и включение, и выключение UDMA для устройства, а также проверка скорости передачи данных.

На данный момент текущая версия hdparm - 3.6. Старые версии могут не правильно показывать и изменять параметры UDMA. Вы можете получить исходный тексты hdparm 3.6 на http://metalab.unc.edu/pub/Linux/system/hardware/hdparm-3.6.tar.gz.

Компиляция и инсталляция выглядит примерно так:

tar zxvf /tmp/download/hdparm-3.6.tar.gz
cd hdparm-3.5
make
su root
(type password when prompted)
make install
cp /usr/local/sbin/hdparm /sbin/hdparm
exit

Чтобы включить DMA для жесткого диска: hdparm -d1 /dev/hda

Чтобы выключить DMA для жесткого диска: hdparm -d0 /dev/hda

Чтобы измерить скорость передачи: hdparm -Tt /dev/hda

Чтобы посмотреть какие опции включены: hdparm /dev/hda

Чтобы узнать больше информации: : (показывает, какие режимы UDMA поддерживаются/включены) hdparm -i /dev/hda

Для более детальной информации (как, например, выбрать нужный режим UDMA) читайте руководство (``man 8 hdparm'').


Проблемы

Черный список UDMA

Следующие устройства включены в ``черный список''. Вы не должны использовать UDMA с этими устройствами, т.к. это может привести к потере данных. Чтобы избежать этого, драйвер должен автоматически выключить DMA для этих устройств.

  • Western Digital WDC AC11000H, AC22100H, AC32500H, AC33100H, AC31600H - всех версий

  • Western Digital WDC AC32100H revision 24.09P07

  • Western Digital WDC AC23200L revision 21.10N21


Разгоняете?

Если вы это делаете, будьте осторожны. Вот цитата из старой документации по UDMA:

Не превышайте частоту шины PCI. 37.5МГц - это максимальная частота
для шины PCI. Некоторые UDMA устройства не возьмут даже 37.5МГц,
хотя будут работать на 33.3МГц.

В любом случае, НИКОГДА. Слышите? НИКОГДА не устанавливайте
частоту шины PCI на 41.5МГц.

РЕКОМЕНДУЕМОЕ безопасное значение - 33МГц.


У вас новый BIOS?

Вот другой кусок из документации по UDMA:

Задача установки устройств для передачи данных через DMA
выполняется в основном BIOS-ом конкретной материнской платы.
Это в том случае, если BIOS запрограммирован правильно:

Например, с материнской платой ASUS SP-97V с оригинальным BIOS-ом
(Rev. 1.03) в Linux возможен сбой и во втором режиме DMA и UDMA;
она работает нормально только в четвертом PIO режиме или под
Windows 95 во всех режимах. Я скачал последнюю версию BIOS
(Rev. 1.06) с веб-сервера ASUS и загрузил ее в EPROM.
С тех пор все работает просто прекрасно (на частоте шины в 66МГц).

Это говорит о том, что BIOS устанавливает специфические
синхронизирующие параметры (active pulse, recovery clock).
В моей версии, возможно, эти параметры были неправильны.
Драйвер Windows 95 устанавливал собственные параметры
(не основываясь на BIOS), поэтому с самого начала у меня были проблемы
с драйвером под Linux, когда как Windows 95 работал нормально.

Таким образом, еще раз: (U)DMA драйвер Linux зависит от параметров
(U)DMA контроллера BIOS-а. Если у вас проблемы, сначала проверьте,
нет ли более свежей версии BIOS для этой материнской платы.

...

Свежие версии BIOS могут быть загружены с веб-сайта производителя
материнской платы. Операция загрузки BIOS довольно проста, но
должна быть выполнена строго по руководству материнской платы.

Последние версии Award BIOS работают стабильно с UDMA.


Если вы все еще не можете заставить его работать!

Если ничего в этом документе вам не помогло или, как минимум, помогло не достаточно, лучший выход - это написать письмо, полностью описывающее ваши трудности, какой у вас интерфейс UDMA, на материнской плате или в виде карты, жесткий диск на самом деле UDMA или обычный EIDE, какую конфигурацию имеют ваши диски, версия (дистрибутив и ядро) Linux и что-нибудь еще, что может помочь, и послать его в конферецию comp.os.linux.hardware. Возможно, вы вскоре получите необходимые разъяснения.


Если у вас есть информация о UDMA, которой нет в этом mini-howto:

Круто! Если вы располагаете информацией, которую я не знаю, во что бы то ни стало пошлите ее мне (brion@pobox.com), и вскоре я помещу ее в эту документацию.