免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1545 | 回复: 5
打印 上一主题 下一主题

DMA无法打开的问题,请高手解惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-09 11:34 |只看该作者 |倒序浏览
用hdparm -d1 -X68 -c3 -m16 /dev/hda命令去打开硬盘的DMA方式
但提示:HDIO_SET_DMA failed: Operation not permitted
操作不允许,这是什么原因,请给为大侠帮忙解惑
我用的是红帽子9.0,具体的命令如下:

[root@localhost root]# hdparm -d1 -X68 -c3 -m16 /dev/hda
/dev/hda:
setting 32-bit IO_support flag to 3
setting multcount to 16
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
setting xfermode to 68 (UltraDMA mode4)
multcount    = 16 (on)
IO_support   =  3 (32-bit w/sync)
using_dma    =  0 (off)
[root@localhost root]#

论坛徽章:
0
2 [报告]
发表于 2005-01-09 14:01 |只看该作者

DMA无法打开的问题,请高手解惑

直接写hdparm -c 1 -d 1 -k 1 /dev/hda就行了

论坛徽章:
0
3 [报告]
发表于 2005-01-09 18:53 |只看该作者

DMA无法打开的问题,请高手解惑

我去试试,先

论坛徽章:
0
4 [报告]
发表于 2005-01-09 19:00 |只看该作者

DMA无法打开的问题,请高手解惑

在网上找了一个和我有同样问题的帖子,但他说需要重新编译内核,让内核支持IDE控制器,这样才能打开DMA方式,但我现在不会编译内核,就把它先贴出来,给朋友们一些参考:

【转贴】彻底搞定linux下硬盘DMA工作模式

系统:slackware9.1,硬盘西部数据80G,内核2.6.6

装完系统后,第一次打开应用程序总是特别的慢,而且从windows分区拷贝文件也是特别慢,同一台机器装的magiclinux就没有这个问题。怀疑是硬盘的DMA没有设置好,而记得当初编译2.6.6内核的时候选择了默认打开硬盘的DMA模式,尝试解决这个问题:

从网上搜索相关发现有hdparm命令可以用,用法如下:

#hdparm -i /dev/hda 查看硬盘的物理参数和支持的工作模式
#hdparm -v /dev/hda 查看当前硬盘的工作模式
#hdparm -Tt /dev/hda 测试一下优化前和优化后的硬盘读写速率

测试了自己的硬盘:
Timing buffered disk reads: 64 MB in 24 seconds = 2.5 MB/sec
只有可怜的2.5MB,肯定了自己的猜测。

那就接着根据网上搜到的命令用hdparm命令来把它调好:
#hdparm -d1 -c3 -X66 -m16 /dev/hda
可是出现了以下字符:
/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)

然后测试硬盘速度还是可怜的2.5MB,尝试失败。
于是仔细研究这些参数的意义:
# /sbin/hdparm -x66 -d1 -u1 -m16 -c3 /dev/hda
选项说明:
① c3 :就是把硬盘的16位格式转换为32位模式(32-bit mode w/sync)。控制数据如何从pci总线传递到控制器。
② m16 :改变硬盘的多路扇区的读功能,-m16可以使得硬盘在一次i/o中断中读入16个扇区的数据。但是不是所有的硬盘都支持这个功能。使用hdparm -i /dev/hda 可以察看您的硬盘最大能读写的扇区数目。
③ d1:打开DMA模式。
④ x66 :在支持UDMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。X34 在支持DMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。支持 ATA33 可以加上 -X66 这个参数,ATA66则是 -X68,-X69是mode 5(ATA100), -X68是mode 4(ATA66)可用于光驱。
⑤ u1 :Linux在处理磁盘中断时,可以unmask其他的中断或者响应其他中断相关的任务。
于是不断的拿X66.X68.X69等参数来实验后立即用#hdparm -tT /dev/hda来测试性能,仍然不成功。再找网上的方法,有如下:

1./etc/rc.d/rc.local 最后面加上一行
/sbin/hdparm -d1 -c3 -X66 -m16 -q /dev/hda
建议加上-q参数,因为man里面说的,这样可以开机即是DMA模式,不用手动设定,但此方法和命令其实是一样的,解决不了我的问题。

2.修改/etc/sysconfig/harddisks也可以打开DMA模式
我的slackware9.1没有这个文件,不行。

3.要靠手工在/etc/conf.d/hdparm里面写好,然后rc-update add hdparm default。
和方法1目的一样,对我没有。

4.编辑/etc/conf.d/local.start加入
hdparm -d1 -c1 -X69 /dev/hda 重启即可,也类似方法3

5.#hdparm -d1 -c1 -X69 -k1 -K1 /dev/hda
直接命令设定,比较简单,但对偶还是没用。

再搜,有人说要重新编译内核才行,我只好重新编译,幸亏有原来编译备份的.config文件,在相关的地方好像是IDE chipset support根据感觉选了一通,重新生成bzImage,重启电脑,还是失败,,,,,

不甘心,继续努力在网上找答案,来到linuxsir.org用搜索功能的只搜主题选项,搜索“硬盘DMA”,把所有的结果仔细看了一遍,发现解决办法还是要编译内核,但之前要运行#lspci命令来确定自己电脑的IDE控制芯片是什么。
运行#lspci,结果如下:
00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] System Controller (rev 13)
00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] AGP Bridge
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40)
00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06)
00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 1a)
00:07.3 USB Controller: VIA Technologies, Inc. USB (rev 1a)
00:07.4 SMBus: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
00:09.0 Multimedia audio controller: C-Media Electronics Inc CM8338A (rev 10)
00:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
00:13.0 Unknown mass storage controller: Triones Technologies, Inc. HPT366/368/370/370A/372 (rev 04)
01:05.0 VGA compatible controller: nVidia Corporation NV20 [GeForce3 Ti 200] (rev a3)

找到答案,我编译内核凭的是模糊的记忆,没有真正按照自己的硬件来编译,结果造成IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE 没有编译进支持,导致DMA不可用。接下来就好办了,重新编译内核,重启电脑,测试结果如下:
#hdparm -tT /dev/hda
/dev/hda:
Timing buffer-cache reads: 128 MB in 0.57 seconds =225.78 MB/sec
Timing buffered disk reads: 64 MB in 1.74 seconds = 36.81 MB/sec
终于搞定,而且2.6内核是自动开机即运行,默认开启DMA,所以不用做任何设置了。

论坛徽章:
0
5 [报告]
发表于 2005-01-09 19:03 |只看该作者

DMA无法打开的问题,请高手解惑

我用lspci,命令查看,结果我的IDE控制器,显示未知设备

论坛徽章:
0
6 [报告]
发表于 2005-01-09 20:35 |只看该作者

DMA无法打开的问题,请高手解惑

看你的主板是什么芯片组了.  如果实在不知道你可以把内核中所有的IDE选项打勾... 不过实在是个下下策.

我之前遇过的不是因为IDE驱动, 是下面一项的原因:

CONFIG_BLK_DEV_PIIX:

This driver adds explicit support for Intel PIIX and ICH chips and also for the Efar Victory66 (slc90e66) chip. This allows the kernel to change PIO, DMA and UDMA speeds and to configure the chip to optimum performance.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP