Управляем дисками: hdpardDMA - DirectMemoryAccess, прямой доступ к памяти. «Непрямым» доступом к памяти называется обмен под управлением процессора, - процессор забирает у устройства данные, потом помещает их в память, и так в цикле до того пока устройство не закончит обмен. Чтобы освободить процессор от перекачек данных в память и обратно (процессору и так есть чем заняться кроме этого) был придуман DMA. Важно понимать, что в системе вроде MS-DOS, где процессор занят только одной задачей, PIO может оказаться быстрее DMA, последний режим дает выигрыш только в многозадачных системах. В messages: Jul 12 02:40:26 k418 kernel: hdc: dma_intr: status=0x51 { DriveReady SeekComplete Error }Jul 12 02:40:26 k418 kernel: hdc: dma_intr: error=0x84 { DriveStatusError BadCRC }Jul 12 02:40:26 k418 kernel: ide: failed opcode was: unknown To turn off dma per drive:
# hdparm -d0 /dev/hd[a-d] To list dma settings:
# hdparm -d /dev/hd[a-d] To turn dma on:
# hdparm -d1 /dev/hd[a-d] Where hd[a-d] is hda, hdb, hdc, hdd.
Где были найдены решения - The Answer Gang
- (http://wasm.ru/article.php?article=atazen02) Зачем нужен DMA?
Examples: root@k418:/var/www# hdparm -tT /dev/sda/dev/sda:Timing cached reads: 430 MB in 2.01 seconds = 214.31 MB/secTiming buffered disk reads: 226 MB in 3.02 seconds = 74.73 MB/sec root@bear:/var/www# hdparm -Tt /dev/sda/dev/sda:Timing cached reads: 24706 MB in 2.00 seconds = 12366.44 MB/secTiming buffered disk reads: 408 MB in 3.01 seconds = 135.41 MB/secroot@krishman:~# hdparm -tT /dev/sda/dev/sda:Timing cached reads: 1752 MB in 2.00 seconds = 876.24 MB/secTiming buffered disk reads: 230 MB in 3.02 seconds = 76.11 MB/sec# hdparm -I /dev/sda - информация о винчестере requested directly from the drive, which is displayed in a new expanded format with considerably more detail than with the older -i option.
Cледующее - извлечение из <3>, раздел "Оптимизация настроек жесткого диска с IDE-интерфейсом":
Доступ к информации на IDE-винчестере осуществляется в 50-100 раз медленнее, чем к данным в оперативной памяти. Поэтому настройка быстродействия жесткого диска является критичной. Команда hdparm позволяет ускорять IDE-диски (лучше всего Quantum (ныне Maxtor), хуже - WesternDigital, совсем плохо - Fujitsu. Ускорение в работе на операции ввода-вывода достигается использованием специализированных IDE-драйверов, прямого доступа к памяти, 32-разрядного обмена и блочных режимов передачи данных. НЕВЕРНЫЙ ВЫБОР ПАРАМЕТРОВ МОЖЕТ УГРОБИТЬ ДИСК. Следует посмотреть в BIOS, поддерживает ли система DMA и включена ли поддержка этого режима. Step01: применим к большинству дисков - включает 32-разрядный ввод-вывод по PCI-шинам, и может удвоить скорость: # /sbin/hdparm -c3 /dev/hda Здесь и далее предполагаем ускорение диска hda. Опция "-c3" работает почти со всеми 32-разрядными микросхемами IDE. Читай
# /sbin/man 8 hdparm -c3 /dev/hda Step02: включает обычный режим DMA для старых DMA-дисков (может удвоить скорость):
# /sbin/hdparm -d1 /dev/hda Step03: Протокол Multiword DMA mode 2 (скорость передачи данных - до 16.6 МБ/с), известный как ATA-2 интерфейс. Если диск поддерживает таковой, следует выполнить:
# /sbin/hdparm -d1 -X34 /dev/hda Step04: Протокол Multiword DMA mode 3 (максимальная скорость - 33 МБ/с), называемый Ultra DMA, а также ATA/ATAPI-4. С таким диском следует выбрать:
# /sbin/hdparm -d1 -X66 /dev/hda Step05: Протокол Ultra DMA с пропускной способностью 66 МБ/с, известный как ATA/ATAPI-5 (такие диски появились в 1999 году), включается так:
# /sbin/hdparm -d1 -X12 -X68 /dev/hda Step06: Протокол Ultra DMA c пpoпycкнoй cпocoбнocтью 100 MБ/c, извecтный кaк ATA/ATAPI-6 (наиболее распространённый на момент написания источника - 2003 г.; диски появились в 2000 году, когда был объявлен чипсет i820E, поддерживающий протокол UltraATA/100) включается так:
# /sbin/hdparm -d1 -X12 -X70 /dev/hda Step07: Режим Multiple sector mode (IDE Block Mode) поддерживается большинством современных IDE-дисков, - сокращает число обращений к диску, включается так:
# /sbin/hdparm -mXX /dev/hda Параметр XX - максимальное значение, поддерживаемое IDE/ATA-диском. Определить его можно командой: # /sbin/hdparm -i /dev/hda , на которую последует ~10-строчный ответ, в котором нас интересует параметр MaxMultSect=16 в четвертой строке.
Step08: Число секторов get/set влияет на быстродействие при многократном обращении к большим файлам. Значение этого параметра по умолчанию - 8 секторов (4 кБайт). Авторы советуют увеличить его вдвое: # /sbin/hdparm -a16 /dev/hda Step09: Флаг get/set interrupt-unmask несколько увеличивает скорость обмена с жестким диском и устраняет ошибки переполнения последовательного порта:
# /sbin/hdparm -u1 /dev/hda Step10: Кэширование записи несколько увеличивает скорость обмена с жестким диском. Для включения кэширования можно выполнить:
# /sbin/hdparm -W1 /dev/hda Step11: Для включения опций дай команду:
# /sbin/hdparm -K1 -k1 /dev/hda Step12: Протестировать настройки можно командой:
# /sbin/hdparm -vtT /dev/hda/dev/hda:multcount = 16 (on)I/O support = 3 (32-bit w/sync)unmasking = 1 (on)using_dma = 1 (on)keepsetting = 1 (on)nowerr = 0 (off)readonly = 0 (off)readahead = 16 (on) geometry - 1826/255/63, sectors=29336832, start=0Timing buffer-cache reads: 128 MB in 0.85 seconds = 150.59 MB/secTiming buffered disk reads: 64 MB in 2.54 seconds = 25.20 MB/sec После установки и проверки опций hdparm в конец файла /etc/rc.local логично добавить строку, например:
# /sbin/hdparm -c3 -d1 -X12 -X68 -m16 -a16 -u1 -W1 -k1 -K1 /dev/hda , которая будет устанавливать необходимые опции при каждой перезагрузке.
|