什么是DMA?如何打开DMA?如何防DMA被系统关闭?
2007-08-08 13:39
786 查看
DMA(DirectMemoryAccess,直接内存存取),顾名思义DMA功能就是让设备可以绕过处理器,直接由内存来读取资料。打开硬 盘的DMA模式将大幅度的提高硬盘系统的功能,使我们能更快更好的进行视频处理和文件传输。打开刻录机的DMA选项,可以保障刻录品质,并降低刻录时的 CPU占用率。所以在我们首次连接好DVD刻录机,进入Windows系统后要做的第一件事情就是要确认DVD刻录机的DMA模式已打开。
在 Windows 98 启用内存直接存取 DMA,方法:
右击 Windows 桌面上的“我的电脑” 图标并从弹出菜单选择 “属性”。 系统属性窗口出现。单击“设备管理”标签。双击“CDROM驱动器”, 查看硬盘驱动器列表。 右击 IDE DISK (可能会有其他名称, 例如 GENERIC IDE DISK)并从弹出菜单选择 “属性”。 该硬盘属性窗口出现。单击“设置”标签。选择 “DMA” 如果该项未选, 然后单击“确认”。 Windows 提示您是否要重新启动, 单击“是”。
在 Windows 2000 启用内存直接存取 DMA,方法:
作为管理员(或具管理员特权的用户)登录进入Windows。右击Windows桌面上的“我的电脑”图标并从弹出菜单选择“属性”。系统属性 窗口出现。单击“硬件”标签, 然后单击“设备管理器”。设备管理器窗口出现。双击“IDE ATA/ATAPI控制器”来查看控制器列表。双击“主IDE通道”。主IDE信道属性窗口出现。 单击“高级设置”标签,选择装置0及装置1的“DMA”,单击确认。对“从IDE通道”进行同样设置。Windows问您是否要重新启动,单击“是”。
在 Windows XP 启用内存直接存取 DMA,方法:
作为管理员(或具管理员特权的用户)登录进入Windows。单击“开始”按钮,然后右击“我的电脑”并从弹出菜单选择“属性”。系统属性窗口 出现。单击“硬件”标签,然后单击“设备管理器”。设备管理器窗口出现。双击“IDE ATA/ATAPI 控制器”来查看控制器列表。双击“主IDE通道”。主IDE通道属性窗口出现。单击“高级设置”标签。选择装置0及装置1的“DMA”,单击确认。对“从 IDE通道”进行同样设置。您不必重新启动Windows。
附表:硬盘接口特性及其发展简表
如何防止系统自动关闭DMA?
[align=left]在Windows 2000、 XP、2003系统有时会自行关闭硬盘的DMA模式,自动改用PIO模式运行!这就造成在使用以上系统中硬盘性能突然下降,其中最明显的现象有:系统起动 速度明显变慢,一般来说正常Windows XP系统启动时那个由左向右运动的滑条最多走2~4次系统就能启动,但这一问题发生时可能会走5~8次或更 多!出现以上问题时大家最好看看自己硬盘的DMA模式是不是被Windows 系统自行关闭了。查看自己的系统是否打开DMA模式:
1.双击“管理工具”,然后双击“计算机管理”;
2.单击“系统工具”,然后单击“设备管理器”;
3.展开“IDE ATA/ATAPI 控制器”节点;
4.双击您的“主要IDE控制器”;
5.点击“高级设置”。
看到“设备0”,下面的传输模式应设为“DMA(若可用)”,再下面“当前传输模式”,如果是“Ultra DMA Mode *(*为数字,DMA33 为2,DMA66为4,DMA100为5、DMA133为6)”,那么你的系统正常,但如果以前你自己设的是“Ultra DMA Mode 6”又没有 改动,而现在是“Ultra DMA Mode 4”或“Ultra DMA Mode 2”更或者是“PIO 模式”而且改不过来!可能就是系统自行关 闭了DMA模式了。
分析问题
好了,先来说说问题是如何产生的。在Windows 2000/XP/2003中有 这样一个设定: Windows IDE/ATAPI 端口驱动程序 (Atapi.sys) 累积收到总共6个超时或循环冗余检验 (CRC) 错误 后,驱动程序将把通信速度(传送模式)从最快的直接内存访问 (DMA) 模式分步骤降为较慢的 DMA 模式。如果驱动程序继续收到超时或 CRC 错 误,则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。 问题就在这里!一般来说一个正常的硬盘很少会有超时或循环冗余检验 (CRC) 错 误,但是当我们使用这些系统里的挂起(也有叫休眠)并恢复计算机后就很容易造成超时或循环冗余检验 (CRC) 错误。因为系统设定的超时值为4秒,当系 统向 ATA 磁盘发出读取请求时如果硬盘回应时间超过 4 秒的超时值时才会产生超时或循环冗余检验 (CRC) 错误,但因为系统在挂起(也有叫休 眠)时硬盘是在停转状态中,恢复计算机时硬盘有个从停止到运动的过程,这就很容易造成大部分硬盘回应时间超过 4 秒的超时值。也就是说当我们使用计算机 挂起6次后系统就会把通信速度(传送模式)从最快的直接内存访问 (DMA) 模式分步骤降为较慢的 DMA 模式。如果挂起6次以上则驱动程序最终将把 传送模式降为最慢的模式(PIO 模式)。这就是Windows 系统突然变慢的原因。
解决问题
若要为受影响的设备重新启用典型DMA或更快DMA的传送模式,请执行以下操作:
1.双击“管理工具”,然后双击“计算机管理”;
2.单击“系统工具”,然后单击“设备管理器”;
3.展开“IDE ATA/ATAPI 控制器”节点;
4.双击您要为其恢复典型 DMA 传送模式的控制器;
5.单击“驱动程序”选项卡;
6.单击“卸载”。
当此过程完成后,重新启动您的计算机。当 Windows 重新启动后,将重新枚举硬盘控制器,同时与该控制器相连的每个设备的传送模式将重置为默认值。
但这样只是把硬盘设备的传送模式重置为默认值,当我们再使用挂起系统时系统又会自行关闭DMA模式!所以我们还要做以下操作:
1.单击“开始”,单击“运行”,键入 Regedit,然后单击“确定”。
2.在注册表中找到并单击以下项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E96A-E325-11CE-BFC1-08002BE10318}/0001和
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E96A-E325-11CE-BFC1-08002BE10318}/0002
3.在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
4.键入 ResetErrorCountersOnSuccess,然后按 Enter 键。
5.在“编辑”菜单上,单击“修改”。
6.键入 l,然后单击“确定”。
7.按照下列步骤操作,然后退出注册表编辑器:
注意
上面注册表最后的项“”列出的带有“0001”编号的子项对应于一台仅有一个 IDE 控制器的计算机的主要 IDE 通道和次要 IDE 通道。如果您 的计算机有两个 IDE 控制器,则对于每个控制器,主要 IDE 通道和次要 IDE 通道的带有编号的子项分别是:“0001、0002、0003、 0004、0005、0006……”。
为检查是否找到了正确的子项,请检查子项的 DriverDesc 值是包含字符串值“主要 IDE 通道”,还是包含字符串值“次要 IDE 通道”。
建立以上注册表键值的目的是
在Windows中,使系统向 ATA 磁盘发出读取请求时的 4 秒的超时值更改为 10 秒。还实现了一种较不严格的变通策略以在发生超时错误和 CRC 错误时降低传送模式(从较快的 DMA 模式到较慢的 DMA 模式,最终降为 PIO 模式)。以前的情况是,在每当累积发生的超时错误或 CRC 错误的总数达到 6 次时,IDE/ATAPI 端口驱动程序 (Atapi.sys) 将降低传送模式。当我们建立以上注册表键值实现新的策 略后,Atapi.sys 仅在连续发生 6 次超时错误或 CRC 错误后才降低传送模式。
这一新的策略实现后将大大降低系统降低或关闭DMA传送模式的机会。现在我们可以安心地使用挂起系统和高性能的DMA硬盘模式,再也不会发生系统性能突然下降的情况了[/align]
**************************************************************************
*******************************************************************************
*********************************************************************
LINUX 系统: hdparm 命令
hdparm.conf文件配置:
gentoo的配置文件是/etc/conf.d/hdparm,配置和在console中测试的参数是一致的:
具体的参数含义,可以看wiki上的说明,只有两点要注意:
1. 测试可以用硬盘性能可以用下面的命令:
2. debian中安装了hdparm之后自动就会跟系统一起启动,而gentoo下要手工设置为启动级别为boot:
3。
UDMA3(ATA33)
# hdparm -X66 -c1 -d1 -m16 /dev/hda
UDMA4(ATA66)
# hdparm -X68 -c1 -d1 -m16 /dev/hda
UDMA5(ATA100)
# hdparm -X69 -c1 -d1 -m16 /dev/hda
在 Windows 98 启用内存直接存取 DMA,方法:
右击 Windows 桌面上的“我的电脑” 图标并从弹出菜单选择 “属性”。 系统属性窗口出现。单击“设备管理”标签。双击“CDROM驱动器”, 查看硬盘驱动器列表。 右击 IDE DISK (可能会有其他名称, 例如 GENERIC IDE DISK)并从弹出菜单选择 “属性”。 该硬盘属性窗口出现。单击“设置”标签。选择 “DMA” 如果该项未选, 然后单击“确认”。 Windows 提示您是否要重新启动, 单击“是”。
在 Windows 2000 启用内存直接存取 DMA,方法:
作为管理员(或具管理员特权的用户)登录进入Windows。右击Windows桌面上的“我的电脑”图标并从弹出菜单选择“属性”。系统属性 窗口出现。单击“硬件”标签, 然后单击“设备管理器”。设备管理器窗口出现。双击“IDE ATA/ATAPI控制器”来查看控制器列表。双击“主IDE通道”。主IDE信道属性窗口出现。 单击“高级设置”标签,选择装置0及装置1的“DMA”,单击确认。对“从IDE通道”进行同样设置。Windows问您是否要重新启动,单击“是”。
在 Windows XP 启用内存直接存取 DMA,方法:
作为管理员(或具管理员特权的用户)登录进入Windows。单击“开始”按钮,然后右击“我的电脑”并从弹出菜单选择“属性”。系统属性窗口 出现。单击“硬件”标签,然后单击“设备管理器”。设备管理器窗口出现。双击“IDE ATA/ATAPI 控制器”来查看控制器列表。双击“主IDE通道”。主IDE通道属性窗口出现。单击“高级设置”标签。选择装置0及装置1的“DMA”,单击确认。对“从 IDE通道”进行同样设置。您不必重新启动Windows。
附表:硬盘接口特性及其发展简表
硬盘接口特性及其发展简表 http://z80.yeah.net | ||
接口名称 | 传输速率 | 连接方式 |
ATA-1 | 40针电缆连接 | |
单字节 DMA 0 | 2.1 MByte/s | |
PIO - 0 | 3.3 Mbyte/s | |
单字节 DMA 1,多字节 DMA 0 | 4.2 MByte/s | |
PIO - 1 | 5.2 MByte/s | |
PIO - 2,单字节 DMA 2 | 8.3 MByte/s | |
ATA-2 | 40针电缆连接 | |
PIO -3 | 11.1 MByte/s | |
多字节 DMA 1 | 13.3 MByte/s | |
PIO -4,多字节 DMA 2 | 16.6 MByte/s | |
ATA-3 | 40针电缆连接 | |
多字节 DMA3,Ultra DMA 33 | 33.3 MByte/s | |
ATA-4 | 40针80芯电缆连接 | |
Ultra DMA 66 | 66.7 MByte/s | |
ATA-5 | 40针80芯电缆连接 | |
Ultra DMA 100 | 100.0 MByte/s | |
ATA-6 | 40针80芯电缆连接 | |
Ultra DMA 133 | 133.0 MByte/s | |
Serial ATA 1.0 | 4针电缆连接 | |
Serial ATA 1.0 | 150 MByte/s |
[align=left]在Windows 2000、 XP、2003系统有时会自行关闭硬盘的DMA模式,自动改用PIO模式运行!这就造成在使用以上系统中硬盘性能突然下降,其中最明显的现象有:系统起动 速度明显变慢,一般来说正常Windows XP系统启动时那个由左向右运动的滑条最多走2~4次系统就能启动,但这一问题发生时可能会走5~8次或更 多!出现以上问题时大家最好看看自己硬盘的DMA模式是不是被Windows 系统自行关闭了。查看自己的系统是否打开DMA模式:
1.双击“管理工具”,然后双击“计算机管理”;
2.单击“系统工具”,然后单击“设备管理器”;
3.展开“IDE ATA/ATAPI 控制器”节点;
4.双击您的“主要IDE控制器”;
5.点击“高级设置”。
看到“设备0”,下面的传输模式应设为“DMA(若可用)”,再下面“当前传输模式”,如果是“Ultra DMA Mode *(*为数字,DMA33 为2,DMA66为4,DMA100为5、DMA133为6)”,那么你的系统正常,但如果以前你自己设的是“Ultra DMA Mode 6”又没有 改动,而现在是“Ultra DMA Mode 4”或“Ultra DMA Mode 2”更或者是“PIO 模式”而且改不过来!可能就是系统自行关 闭了DMA模式了。
分析问题
好了,先来说说问题是如何产生的。在Windows 2000/XP/2003中有 这样一个设定: Windows IDE/ATAPI 端口驱动程序 (Atapi.sys) 累积收到总共6个超时或循环冗余检验 (CRC) 错误 后,驱动程序将把通信速度(传送模式)从最快的直接内存访问 (DMA) 模式分步骤降为较慢的 DMA 模式。如果驱动程序继续收到超时或 CRC 错 误,则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。 问题就在这里!一般来说一个正常的硬盘很少会有超时或循环冗余检验 (CRC) 错 误,但是当我们使用这些系统里的挂起(也有叫休眠)并恢复计算机后就很容易造成超时或循环冗余检验 (CRC) 错误。因为系统设定的超时值为4秒,当系 统向 ATA 磁盘发出读取请求时如果硬盘回应时间超过 4 秒的超时值时才会产生超时或循环冗余检验 (CRC) 错误,但因为系统在挂起(也有叫休 眠)时硬盘是在停转状态中,恢复计算机时硬盘有个从停止到运动的过程,这就很容易造成大部分硬盘回应时间超过 4 秒的超时值。也就是说当我们使用计算机 挂起6次后系统就会把通信速度(传送模式)从最快的直接内存访问 (DMA) 模式分步骤降为较慢的 DMA 模式。如果挂起6次以上则驱动程序最终将把 传送模式降为最慢的模式(PIO 模式)。这就是Windows 系统突然变慢的原因。
解决问题
若要为受影响的设备重新启用典型DMA或更快DMA的传送模式,请执行以下操作:
1.双击“管理工具”,然后双击“计算机管理”;
2.单击“系统工具”,然后单击“设备管理器”;
3.展开“IDE ATA/ATAPI 控制器”节点;
4.双击您要为其恢复典型 DMA 传送模式的控制器;
5.单击“驱动程序”选项卡;
6.单击“卸载”。
当此过程完成后,重新启动您的计算机。当 Windows 重新启动后,将重新枚举硬盘控制器,同时与该控制器相连的每个设备的传送模式将重置为默认值。
但这样只是把硬盘设备的传送模式重置为默认值,当我们再使用挂起系统时系统又会自行关闭DMA模式!所以我们还要做以下操作:
1.单击“开始”,单击“运行”,键入 Regedit,然后单击“确定”。
2.在注册表中找到并单击以下项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E96A-E325-11CE-BFC1-08002BE10318}/0001和
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E96A-E325-11CE-BFC1-08002BE10318}/0002
3.在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
4.键入 ResetErrorCountersOnSuccess,然后按 Enter 键。
5.在“编辑”菜单上,单击“修改”。
6.键入 l,然后单击“确定”。
7.按照下列步骤操作,然后退出注册表编辑器:
注意
上面注册表最后的项“”列出的带有“0001”编号的子项对应于一台仅有一个 IDE 控制器的计算机的主要 IDE 通道和次要 IDE 通道。如果您 的计算机有两个 IDE 控制器,则对于每个控制器,主要 IDE 通道和次要 IDE 通道的带有编号的子项分别是:“0001、0002、0003、 0004、0005、0006……”。
为检查是否找到了正确的子项,请检查子项的 DriverDesc 值是包含字符串值“主要 IDE 通道”,还是包含字符串值“次要 IDE 通道”。
建立以上注册表键值的目的是
在Windows中,使系统向 ATA 磁盘发出读取请求时的 4 秒的超时值更改为 10 秒。还实现了一种较不严格的变通策略以在发生超时错误和 CRC 错误时降低传送模式(从较快的 DMA 模式到较慢的 DMA 模式,最终降为 PIO 模式)。以前的情况是,在每当累积发生的超时错误或 CRC 错误的总数达到 6 次时,IDE/ATAPI 端口驱动程序 (Atapi.sys) 将降低传送模式。当我们建立以上注册表键值实现新的策 略后,Atapi.sys 仅在连续发生 6 次超时错误或 CRC 错误后才降低传送模式。
这一新的策略实现后将大大降低系统降低或关闭DMA传送模式的机会。现在我们可以安心地使用挂起系统和高性能的DMA硬盘模式,再也不会发生系统性能突然下降的情况了[/align]
**************************************************************************
*******************************************************************************
*********************************************************************
LINUX 系统: hdparm 命令
hdparm.conf文件配置:
/dev/hda { mult_sect_io = 16 write_cache = off interrupt_unmask = on io32_support = 1 dma = on transfer_mode = 69 lookahead = on read_ahead_sect = 256 }
gentoo的配置文件是/etc/conf.d/hdparm,配置和在console中测试的参数是一致的:
hda_args="-d1 -c1 -m16 -u1 -W0 -A1 -a256"
具体的参数含义,可以看wiki上的说明,只有两点要注意:
1. 测试可以用硬盘性能可以用下面的命令:
hdparam -tT /dev/hdX
2. debian中安装了hdparm之后自动就会跟系统一起启动,而gentoo下要手工设置为启动级别为boot:
rc-update add hdparm boot
3。
UDMA3(ATA33)
# hdparm -X66 -c1 -d1 -m16 /dev/hda
UDMA4(ATA66)
# hdparm -X68 -c1 -d1 -m16 /dev/hda
UDMA5(ATA100)
# hdparm -X69 -c1 -d1 -m16 /dev/hda
相关文章推荐
- 如何在 Windows XP 中关闭和打开“系统还原”
- Android如何打开/关闭系统解锁服务?—典型错误分析
- 【Win7移动中心是什么如何打开以及关闭】
- 如何在自己的系统中打开并关闭外部程序
- EAS中如何打开和关闭系统的rpc日志收集开关。
- SELinux是什么意思,如何关闭?Linux下的防火墙用什么命令打开?
- 如何在自己的系统中打开并关闭外部程序
- Win7旗舰版系统无法打开家长控制是什么原因如何解决
- Android如何快速打开系统软键盘和关闭系统软键盘
- Win7移动中心是什么如何打开以及关闭
- 什么是watchdog + 为何在要系统初始化的时候关闭watchdog
- win7 64位 系统中“打开或关闭Windows功能”列表空白
- Win8.1系统如何快速开启飞行模式以关闭网络
- Win10系统如何关闭"启用病毒防护""启用Windows防火墙"提示?
- Unix编程学习笔记--------系统调用的疑问????? 到底什么是系统调用???? 系统调用是如何实现的???
- C# WinForm 如何实现启动系统程序、文件或打开新网页?
- 如何调用MFC中的函数打开一个系统资源面板,获取文件
- C#中打开和关闭系统中的应用程序(以计算器为例)
- C#提升性能"数据库连接打开与关闭"经验分享(附:优化过的DBHelper类) 之配餐系统的开发