Жесткий диск работает в режиме pio. Режимы передачи данных


Всем привет, сегодня мы с вами поговорим о DMA: именно о той технологии, которая помогает вашему компьютеру воспроизводить для вас музыку, выводить изображение на экран, записывать информацию на жесткий диск, и при этом оказывать на центральный процессор просто мизерную нагрузку.

DMA, что это? О чем вы говорите?

DMA, или Direct Memory Access – технология прямого доступа к памяти, минуя центральный процессор. В эпоху 486-ых и первых Pentium во всю царствовала шина ISA, а также метод обмена данными между устройствами – PIO (Programmed Input/Output).

PIO по своей сути прост: чтобы получить данные с устройства, драйвер операционной системы (или же firmware другого устройства), должен был читать эти данные из регистров устройства. Давайте разберемся на примере:

  • На сетевую карту пришло 1500 байт данных.
  • Сетевая карта инициирует прерывание с целью сообщить процессору, что данные необходимо забрать с устройства, иначе произойдет так называемый buffer overrun.
  • Операционная система ловит прерывание от контроллера прерываний и отдает его на обработку драйверу.
  • Драйвер в цикле побайтно читает данные с регистров сетевой карты.
В итоге, если чтение одного байта отнимает около 1 мс процессорного времени, то чтение 1500 байт – соответственно 1500 мс. Но это всего лишь один Ethernet пакет, представте себе, сколько пакетов получает сетевая карта, когда вы читаете любимый хабрахабр. Конечно в реальности чтение в PIO режиме можно организовывать по 2, 4 байта, однако потери производительности при этом все равно будут катастрофическими.

Когда объемы данных, которыми оперирует процессор начали возрастать, стало понятно, что нужно минимизировать участие процессора в цепочке обмена данными, а то прийдется туго. И вот тогда активное применение нашла технология прямого доступа к памяти.

Кстати говоря, DMA используется не только для обмена данными между устройством и ОЗУ, но также между устройствами в системе, возможен DMA трансфер между двумя участками ОЗУ (хотя данный маневр не применим к x86 архитектуре). Также в своем процессоре Cell, IBM использует DMA как основной механизм обмена данными между синергетическими процессорными элементами (SPE) и центральным процессорным элементом (PPE). Также каждый SPE и PPE может обмениватся данными через DMA с оперативной памятью. Данный прием – на самом деле большое преимущество Cell, ибо избавляет от проблем когерентности кешей при мультипроцессорной обработке данных.

И снова теория

Прежде чем мы перейдем к практике, я бы хотел осветить несколько важных аспектов программирования PCI, PCI-E устройств.

Я вскользь упомянул о регистрах устройства, но как же к ним имеет доступ центральный процессор? Как многие из вас знают, есть такая сущность в компьютерных технологиях, как IO порты (Input/Output ports). Они предназначены для обмена информацией между центральным процессором и периферийными устройствами, а доступ к ним возможен с помощью специальных ассемблерных инструкций - in/out. BIOS (или OpenFirmware на PPC based системах) на ранних этапах инициализации PCI устройств, а также некоторых других (Super IO контроллера, контроллера PS/2 устройств, ACPI timer и т.д.), закрепляет за определенным контроллером собственный диапазон IO портов, куда и отображаются регистры устройства.

Также регистры устройства могут отображатся в ОЗУ (Memory Mapped Registers), т.е. на физическое адресное пространство. Данный метод имеет ряд преимуществ, а именно:

  • Скорость доступа к физической памяти выше, нежели к IO портам.
  • IO порты могут отображать не более 65535 байт регистров, в то время как размер ОЗУ современных компьютеров в разы больше.
  • Читать регистры устройства из ОЗУ проще, нежели с помощью IO портов:)
Данные о том, какой диапазон IO портов или ОЗУ закреплен за устройством, хранятся в конфигурационном пространстве PCI, а именно в регистрах BAR0, BAR1, BAR2, BAR4, BAR5 .

Итак, существует два метода утилизации DMA: contiguous DMA и scatter/gather DMA.

Contiguous DMA

Данный метод очень прост и сейчас практически отжил свое, однако до сих пор используется для программирования звуковых контроллеров (к примеру Envy24HT). Его принцип следующий:
  • Выделяется один буфер достаточно большого размера в оперативной памяти.
  • Физический адрес (точнее сказать адрес на шине участка памяти, потому как physical address и bus address – равны в x86 архитектуре, но не равны в PPC) этого буфера записывается в регистр устройства.
  • Во время того, как приходят данные на устройство, контроллер устройства инициирует DMA трансфер.
  • После того, как буфер полностью заполнен, контроллер устройства инициирует прерывание, чтобы сообщить центральному процессору, что буфер следует передать операционной системе.
  • Драйвер операционной системы обрабатывает прерывание, и передает полученные данные из буфера, далее по стеку устройств операционной системы.
Как видите все достаточно просто, и как только шина ISA обзавелась поддержкой DMA, данный метод нашел очень широкое применение. Например драйвера сетевых карт имели два таких DMA буфера: один на прием данных (rx), другой на отсылку (tx).

Scatter/gather DMA

С ростом скорости Ethernet адаптеров, contiguous DMA показал свою несостоятельность. В основном из-за того, что требовались области памяти достаточно большого размера, которые подчас невозможно было выделить, так как в современных системах фрагментация физической памяти достаточно высока. Во всем виноват механизм виртуальной памяти, без которого нынче никуда:)

Решение напрашивается само собой: использовать вместо одного большого участка памяти несколько, но в разных регионах этой самой памяти. Возникает вопрос, но как же сообщить контроллеру устройства, как инициировать DMA трансфер и по какому адресу писать данные? И тут нашли решение, использовать дескрипторы, чтобы описывать каждый вот такой участок в оперативной памяти.

Типичный дескриптор DMA буфера содержит следующие поля:

  1. Адрес участка ОЗУ (именно bus address), который предназначен для DMA трансфера.
  2. Размер описываемого участка ОЗУ.
  3. Опциональные флаги и другие специфические аргументы.
  4. Адрес следующего дескриптора в памяти.
Структура дескрипторов определяется конкретным производителем контроллера устройства, и может содержать какие-либо другие поля. Дескриптор также как и DMA буфер, размещается в оперативной памяти.

Алгоритм scatter/gather DMA следующий:

  • Драйвер операционной системы выделяет и иницилизирует дескрипторы DMA буферов.
  • Драйвер выделяет DMA буферы (участки ОЗУ для DMA трансфера) и записывает необходимую информацию о них в дескрипторы.
  • Устройство по мере возникновения потребности, заполняет DMA буферы, и после того, как заполнен один или несколько буферов инициирует прерывание.
  • Драйвер ОС просматривает все дескрипторы DMA буферов, определяет какие из них были заполнены контроллером устройства, пересылает данные из буфера далее по стеку устройств и помечает буфер как готовый к DMA трансферу.
Порядок в каком контроллер устройства заполняет DMA буферы, определяется производителем. Контроллер может писать в первый свободный DMA буфер, либо просто писать подряд (дескрипторы DMA буферов в данном случае образуют односвязный кольцевой список) во все буфера и т.д.

Стоп...

На сегодня пожалуй все, иначе информации станет слишком много. В следующей статье я покажу вам, как с этой уличной магией работает IOKit. Жду отзывов и дополнений;)

Привет всем читателям блога. В этой статье поговорим о том, как восстановить производительность системы. Часто у пользователей возникает проблема очень медленной работы компьютера, особенно при записи и при чтении дисков, либо просто необоснованные «тормоза» системы при работе или загрузке.Почему система зависает читайте
Причин возникновения этого может быть великое множество, сегодня предлагаю рассмотреть довольно распространенную – это неверный режим работы CD/DVD - ROM’а или жестких дисков , т. е. поговорим о PIO и DMA . Как проверить жесткий диск на ошибки и устранить их читайте

В чем суть и разница PIO и DMA .

PIO и DMA - это два режима работы жестких дисков, в общем случае любого привода.
PIO (Programmable Input/Output) - уже устаревший режим, для работы ему необходимо
задействовать центральный процессор, что приводит к значительной потери производительности.
DMA (Direct MemoryAccess) - современный метод, который минует процессор и
обращается напрямую к оперативной памяти, это позволяет значительно увеличить производительность и избавиться от надоедливых «тормозов».
Режим DMA в различных вариантах уже давно используется в операционных системах Windows 7, 8, а также в 10, однако в Windows XP, часто случается ситуация в которой DMA автоматически переключается в PIO и уже вывести его обратно обычными методами не получится. Из-за чего возникает эта ситуация?
В Windows XP внедрен механизм контроля ошибок , если при чтении с жесткого диска или другого привода слишком часто возникают ошибки, то система автоматически переходит в более медленный режим, где их процент меньше. Однако, Windows XP может перевести в такой режим и нормально работающее устройство.
Как устранить ошибки Windows читайте

И так, проверим режимы работы всех приводов, чтобы система не тормозила..

1 . Запускаем консоль «Управление компьютером» правой кнопкой на «Мой компьютер»


в выпадающем меню выбираем пункт «Диспетчер устройств» , либо через
Панель управления. Или Пуск - Выполнить - devmgmt.msc

2. Выбираем «Диспетчер устройств» , выбираем IDE ATA/ATAPI контроллеры ,


откроется несколько строчек с контроллерами – нас интересуют:
Первичный и Вторичный каналы IDE → заходим поочередно в свойства этих каналов (правой кнопкой на канале, строка «Свойства »), в закладку «Дополнительные параметры» ,
здесь выделены две группы «Устройство 0» и «Устройство 1» , в каждой есть строки
«Режим передачи» – в ней должно быть выбрано «DMA, если доступно », далее строка «Текущий режим передачи» , должно быть что-то типа «Режим ультра DMA:4,


если здесь стоит «Режим PIO», то это как раз наш случай и мы будем его исправлять .
Если везде стоит режим ультра DMA, то у Вас все в порядке и дальнейшие действия можно не продолжать.
3. Для начала попробуем исправить вручную – в каждой строке «Режим передачи» ставим «DMA, если доступно» , жмем «ОК» и перезагружаем компьютер. После включения вновь
смотрим режимы работы каналов, если везде стоит DMA, то все в порядке, если остался PIO, то продолжаем дальше.
4. Вновь найдите Первичный и Вторичный каналы IDE и удалите их (правой кнопкой на каждом канале, в списке выбираем «Удалить» ). Не бойтесь, все будет нормально работать.
Снова перезагрузите компьютер – Windows XP найдет контроллеры и переведет их в быстрый режим работы, т.е в DMA . Проверьте результат, везде должен стоять режим DMA.
5. Если все перечисленное не помогло и у Вас опять высвечивается «Режим PIO» , тогда необходимо будет переставить драйвера для материнской платы – перегрузиться
и вновь проверить результат.
6. Ну и последний пункт, если после всех страданий режим PIO так и не пропал, тогда придется подредактировать в реестре. Хочу отметить – производите какие-либо операции с
реестром очень осторожно и внимательно, любое неправильное действие может привести к полной неработоспособности Вашей системы. Лучше всего сделать заранее копию реестра.
Как настроить Windows XP с помощью реестра читайте

Для начала попробуйте отключить систему контроля ошибок.
Для этого в ветке реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs\ ,
создайте ключ ErrorControl и установите его значение равным 0.


После этого перегрузитесь и выполните пункт №4.


в ней можно вручную выставить режим DMA .
Здесь располагаются несколько папок - 0000, 0001, 0002.
0000 – отвечает за сам контролер;
0001 – отвечает за Secondary IDE Chanell;
0002 – отвечает за Primary IDE Chanell;
Открываем папку для нужного нам канала. В ней находятся
несколько ключей, для начала выбираем:
MasteDeviceTimingModeAllowed
SlaveDeviceTimingModeAllowed
и проставляем значение равное 0хffffffff.
После этого выставляем значение следующих ключей:
MasterDeviceTimingMode
SlaveDeviceTimingMode
в соответствии с следующими данными, в зависимости от
поддерживаемого UDMA - режима:
UDMA Mode 2 – 0×2010
UDMA Mode 4 – 0×8010
UDMA Mode 5 – 0×10010
UDMA Mode 6 – 0xffff

После этого перегрузитесь и проверьте результат – должно все нормально работать.
Как ускорить и восстановить производительность Windows 10, читайте
Какая скорость передачи информации в компьютерах, читайте
Надеюсь эта статья поможет Вам правильно выставитьрежимы PIO и DMA и повысить общую производительность системы.


Уважаемые читатели!
Если вам понравился блог и опубликованные материалы, оказались полезными для Вас, то прошу оказать помощь на содержание и развитие данного блога. Сделать это можно,пожертвовав любую сумму. Ваша финансовая поддержка будет использована для продвижения блога, на наполнение блога хорошим материалом, улучшения функциональности и удобности для читателя и реализацию дальнейших планов.
1) Путём перечисления денег на карту Сбербанка: 4424 7710 1196 4323
2) Самый простой способ, который не составит больших усилий у каждого пользователя, читателя блога - это в конце каждой статьи есть несколько кнопок ("поделиться" ) для добавления статьи в социальные сети или блоги и другие ресурсы общения в интернете.
Заранее благодарен всем, кто поможет в развитии блога.

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

Возможные режимы работы жесткого диска

У HDD есть возможность работать с данными в двух режимах: устаревший PIO и более новый DMA. Они кардинально отличаются принципом своей работы и, соответственно, скоростью обработки данных. Так в режиме PIO все данные обрабатываются при помощи процессора что сильно его нагружает и, как следствие, приводит к падению общей производительности системы. А вот режим DMA – это уже аппаратная обработка данных при которой используются разнообразные ускорители и ЦП в этом процессе не участвует.

Самопроизвольное переключение Виндовс на режим PIO и признаки этого

Windows по умолчанию работает с HDD в скоростном режиме DMA, но иногда из-за специфических ошибок самостоятельно переключается в режим PIO. Причем обратно включить DMA весьма проблематично и сделать это стандартными способами практически невозможно. Характерные признаки того, что Windows переключилась на работу с жестким диском в режим PIO это:

Падение быстроты работы с HDD в несколько раз;
Медленная скорость работы системы во время дисковых операций;
Чрезмерная загрузка процессора (80-90%) при работе с жестким диском;
Система начала «тормозить» резко. То есть еще час назад все было нормально, а потом резко появились проблемы.

На данный момент жесткий диск - это самое слабое место всей системы и падение его скорости работы даже в два раза приводит к катастрофическим последствиям. Для того чтобы убедиться, что Windows действительно переключилась на работу с жестким диском в медленный режим PIO нужно сделать следующее:

1. Нажмите на значок «Мой компьютер» правой клавишей мыши и выберите пункт «Управление»;

2. Раскройте ветку контроллера и найдите канал, к которому подключен ваш жесткий диск;
3. Нажмите на нем правую клавишу мыши, зайдите в «Свойства» и переключитесь на «Дополнительные параметры»;
4. Посмотрите на строку «Текущий режим передачи». Если там написано «Режим DMA», то значит все нормально, а вот если «Режим PIO», то вам придется проделать несколько несложных операций и вернуть диск в предпочтительный режим работы.

Включаем режим DMA

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

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

  1. Нажмите Win+R и напечатайте в появившейся строке команду regedit ;
  2. Перейдитепопути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36Е96A-Е325-11CE-BFC1-08002BE10318};

  1. Найдите строку MasterDeviceTimingModeAllowed.
  2. Если в колонке значение этой строки написано 0х00000001f, то это значит, что ваш жесткий диск действительно работает в режиме PIO;
  3. Поменяйте значение на 0xffffffff и перезагрузите компьютер.

После этого ваш жесткий диск вновь переключится на режим DMA, а скорость его работы и общая скорость работы системы увеличится в разы.

DMA или Direct Memory Access - технология, применяющаяся в многих устройствах компьютера, а, в частности, в современных жестких дисках и СD-ROM для повышения их производительности. В параметрах любого жесткого диска вы всегда найдете упоминание о DMA. Но далеко не все знают, что по умолчанию в Windows 95/98 и NT 4.0 этот режим, для совместимости со старыми (даже, скорее, древними) дисками, просто-напросто отключен!

При включении этого режима загрузка процессора при операциях копирования уменьшается во много раз и порой заметно увеличивает производительность системы в целом. Все современные жесткие диски и CD-ROM-приводы корректно работают в DMA-режиме и используют заложенные в него возможности.

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

Важно не путать режим DMA и обозначение типа контроллера жесткого диска. Если ваш диск поддерживает UltraDMA 33 или 66, это означает лишь то, что он способен обмениваться данными с соответствующим IDE-контроллером на скорости 33 или 66 Мб/сек.

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

Для Windows 95/98

Щелкните правой кнопкой мыши на значке My Computer, выберите Properties и перейдите на вкладку Device Manager. Выберите пункт Disk Drives и Generic IDE Disk. Дважды щелкните на нем и перейдите ко вкладке Settings. Если флажок на против опции DMA установлен, значит, режим DMA работает. Если нет, установите. После перезагрузки он должен оставаться на своем месте.

Если он сбрасывается, значит либо диск, либо контроллер не поддерживают DMA. Аналогичную операцию можно проделать и с CD-ROM-приводом. Если по каким-либо причинам после перезагрузки устройство будет работать некорректно или вообще отсутствовать в списке, вам придется перезагрузиться в Safe Mode и снять флажок. Впрочем, в моей практике делать этого еще не приходилось. В случае использования дополнительного IDE-контроллера (например, для работы с UltraDMA 66 дисками), данная вкладка может выглядеть иначе, и управление режимом DMA берет на себя драйвер контроллера. Многие современные платы на чипсете Intel 440BX используют такой дополнительный UltraDMA-контроллер, так как BX изначально не поддерживает работу с UltraDMA 66 дисками.

Для Windows 2000

В отличие от Windows 9х, Windows 2000 по умолчанию настраивает многие компоненты системы на оптимальное быстродействие, за счет чего местами работает значительно быстрее. Это в полной мере относится и к жестким дискам.

Для того, чтобы узнать, используется ли у вас DMA в этой операционной системе, вам следует щелкнуть правой кнопкой мыши на значке My Computer, выбрать пункт Manage и в окне Computer Management выбрать Device Manager. В появившемся дереве необходимо выбрать IDE ATA/ATAPI controllers и Primary IDE Channel. Как правило, на основном канале контроллера и находится жесткий диск.

Дважды щелкните на Primary IDE Channel (или Secondary IDE Channel, в случае, если устройство расположено на дополнительном IDE-канале) и в появившемся окне выберите вкладку Advanced Settings. Блок Device 0 показывает установки устройства, установленного как Master, а блок Device 1 - устройства, установленного как Slave. Поле Current Transfer Mode показывает, в каком режиме работает устройство, а Transfer Mode позволяет изменять его вручную.

Для Windows NT 4.0

Простого пути для включения DMA в этой системе нет. Вам придется либо исправлять реестр, либо воспользоваться какой-либо утилитой, которая делает это за вас.

Второй способ предпочтительнее. Для этого можно использовать небольшую программку ConfigNT (confignt.lgg.ru). Помимо включения DMA, программка может изменять еще кучу разных параметров, которые не могут быть изменены с использованием стандартных средств.

Для включения режима DMA с помощью ConfigNT необходимо выбрать в программе вкладку IDE/ATAPI и в поле DMA Detection установить Enable для обоих каналов. После установки параметров необходимо перезагрузить компьютер.

Для того, чтобы на практике увидеть полученный прирост производительности, достаточно во время копирования большого файла, со включенным и отключенным DMA, запустить программу, измеряющую загрузку процессора. В Windows 2000 или NT проще всего воспользоваться стандартным Task Manager (Ctrl-Shift-Esc).

Виталий Шуравко







2024 © gtavrl.ru.