激活硬盘被关闭的DMA模式

编程知识 更新时间:2023-05-02 23:33:58

激活硬盘被关闭的DMA模式

  宣恩向  2010-05-16 11:32:40 一、DMA小知识
DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由 CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。——百度百科。所以,DMA模式的优点:1占用更少的CPU资源;2更快的读写数据速度。

二、硬盘工作的模式
PIO模式及速度。
PIO mode 0 --> 3.3MB/s
PIO mode 1 --> 5.2 MB/s
PIO mode 2 --> 8.3 MB/s
PIO mode 3 --> 11.1 MB/s
PIO mode 4 --> 16.7MB/s

DMA模式及速度。
Single Word DMA 0 --> 2.1 MB/s
Single Word DMA 1 --> 4.2 MB/s
Single Word DMA 2 --> 8.3 MB/s
Multi Word DMA 0 --> 4.2 MB/s
Multi Word DMA 1 --> 13.3 MB/s
Multi Word DMA 2 --> 16.7 MB/s

UltraDMA模式及速度。
UltraDMA 0 -->16.7 MB/s
UltraDMA 1 -->25 MB/s
UltraDMA 2 -->33.3 MB/s
UltraDMA 3 -->44.4 MB/s
UltraDMA 4 -->66.6 MB/s
UltraDMA 5 -->100 MB/s
UltraDMA 6 -->133 MB/s

三、硬盘工作模式为什么会自动降为PIO模式
根据微软知识库 http://support.microsoft/?kbid=817472的介绍。“在 Windows IDE/ATAPI 端口驱动程序 (Atapi.sys) 累积收到总共六个超时或循环冗余检验 (CRC) 错误后,驱动程序将把通信速度(传送模式)从最快的直接内存访问 (DMA) 模式分步骤降为较慢的 DMA 模式。如果驱动程序继续收到超时或 CRC 错误,则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。”受影响的操作系统是win2000,win XP,win 2003。
出现CRC或超时错误的原因不外乎:
1、主板上的控制芯片不堪其负;
2、在非标准外频下工作,比如超频;
3、劣质的数据线;
4、硬盘过热或者已有缺陷;
5、系统休眠之后唤醒,如果硬盘反应超过10秒才读出数据的话,也会导致超时错误。


四、硬盘工作模式降为PIO模式的表现
一个设定工作模式为UDMA6的硬盘,当出现6个CRC错误后,系统主动将降为UDMA5然后再出现6个CRC错误是UDMA4,UDMA3 ,UDMA2, UDMA1,接着是PIO mode 4,PIO mode 3,PIO mode 2,PIO mode 1 ,最后是最慢的PIO mode 0模式。在这个模式下,系统象上了岁数的老人,慢腾腾的吞吐数据,看电影将会是一卡一卡的画面,游戏里会莫名的停顿,读写速度将是不可忍受的每秒3.3MB。
1、测速
如果这个时候你用HD tune之类的软件测试硬盘,看到的速度将介于2.9 MB/s到3.3 MB/s之间。
 

2、设备管理器
打开设备管理器,查看IDE ATA/ATAPI控制器下对应的IDE通道,你将会看到IDE通道的属性。
 

而“当前传送模式”不再是“Ultra DMA Mode X”,而是“Pro Mode 0”。
3、注册表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001](注:其中0001代表你硬盘接在控制器那一个口上,数据可以是0001到0008)下MasterDeviceTimingMode(主盘)或SlaveDeviceTimingMode(从盘)键值被改写成20以下的数值。数值为1至19表示PIO模式。
 

典型的键值参考如下:
UDMA Mode1 0x0001010
UDMA Mode2 0x0002010
UDMA Mode3 0x0004010
UDMA Mode4 0x0008010
UDMA Mode5 0x00016010
UDMA Mode6 0x00024010 或0x00032010

五、解决之道

1、微软公司提供的办法,分两步操作(此方法来自微软网站)。

第一步 卸载受影响的驱动

①双击“管理工具”,然后双击“计算机管理”。
②单击“系统工具”,然后单击“设备管理器”。
③展开“IDE ATA/ATAPI 控制器”节点。
④双击您要为其恢复典型 DMA 传送模式的控制器。
⑤单击“驱动程序”选项卡。
⑥单击“卸载”。
⑦当此过程完成后,重新启动您的计算机。当 Windows 重新启动后,将重新枚举硬盘控制器,同时与该控制器相连的每个设备的传送模式将重置为默认值。
⑧重启操作系统。
 


第二步 修改注册表,使Atapi.sys仅在连续发生6次超时错误或CRC错误后才降低传送模式,而不是累积发生的超时错误或CRC错误的总数达到6次就降低传送模式。

①单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
②在注册表中找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001
③在 “编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
④键入 ResetErrorCountersOnSuccess,然后按 Enter 键。
⑤在“编辑”菜单上,单击“修改”。
⑥键入 1,然后单击“确定”。

 


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001的0001指你的硬盘所在的端口,也许你的硬盘插在0002端口或者其它端口,我的建议是你在如下注册表项都新建一个名为“ResetErrorCountersOnSuccess” 的DWORD 值,并赋值为1:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0002
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0003
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0004
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0005
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0006
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0007
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0008

2、当以上方法不管用。
计算机运行环境确实恶劣,或者控制器芯片工作不正常,或者劣质的传输线,或者硬盘已有问题,第一个方法将不再管用,系统很快又把硬盘的UDMA模式强制改为PIO模式。这个时候,我们迫不得已还需要继续用它来工作的话,这就需要采取降速。

第一步 卸载受影响的驱动 (跟微软方法的第一步相同操作)
 


第二步 进BIOS里设置,降低芯片的传输速度。
重启后按DEL或者F2进入BIOS设置,找到硬盘设置页面。在“DMA Mode”那一项,一般是“AUTO”即自动识别,以现在一般硬盘都工作在UDMA6为例,把工作模式降低一到两个级别,最好设置为UDMA 3 或者UDMA 4 。然后F10保存,退出。

以下图是设置成UDMA3模式后的截图,硬盘是希捷1.5T:

 

 


这两个图显示出主板BIOS的设置跟硬盘所能达到的速度无关,此硬盘官方标示的速度为120M每秒。但检查注册表下(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\000X
)相应的出错计数器“MasterIdDataCheckSum” DWORD 值,则发现长时间运行更大量的数据之后,此DWORD 值依然为0。

更多推荐

激活硬盘被关闭的DMA模式

本文发布于:2023-04-29 09:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/de248b65445c47266567f4ae085920a3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:硬盘   模式   DMA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 110677文章数
  • 28181阅读数
  • 0评论数