在Linux下使用硬盘的DMA模式

Author: 谢勇 Date: 2001年 38期

#1    一、准备工作
  ?牐犑紫龋贚inux下打开DMA模式之前,最重要的事情就是备份硬盘上的数据。因为在开启DMA模式之后谁也无法预料到硬盘是否还能正常工作,数据是否还完整。把Linux下所有的重要数据备份到其他硬盘或CD-R等存储媒介上是最好的选择,最好不要把数据备份在同一块硬盘上,更不要把数据备份到同一个硬盘分区。
  #1    二、修改设备节点参数
  ?牐犚猿队没В╮oot)的身份登录Linux系统,修改hdparm目录下的一些设备节点参数。下面就是一个修改硬盘设备节点参数的例子,注意,不同型号,不同容量的硬盘可能列出的参数不太一样,但是修改的过程和方法大体上是一样的。
  ?牐?# /sbin/hdparm /dev/hda
  ?牐?/dev/hda:
  ?牐爉ultcount = 0 (off)??
  ?牐營/O support = 0(default 16-bit)??
  ?牐爑nmaskirq = 0 (off)??
  ?牐爑sing_dma = 0 (off)??
  ?牐爇eepsettings = 0(off)??
  ?牐爊owerr = 0 (off)??
  ?牐爎eadonly = 0 (off)??
  ?牐爎eadahead = 8 (on)??
  ?牐爂eometry=629/240/63,sectors=9514260,start=0
  ?牐?#
  ?牐犚⒁獾氖牵琽ff代表此参数不起作用,on表示打开此功能或模式。上面的参数列表写得非常清楚,Multcount(多扇区读)没有打开;此硬盘格式为16位格式;DMA数据传输模式没有打开。很显然,这样的参数并没有使硬盘达到最佳的优化,没有能完全发挥当今高速IDE硬盘的性能。
  ?牐犖擞呕才蹋岣哂才痰氖荽渌俾剩紫然故且私庖韵抡庑┎问暮澹?
  ?牐燾3:就是把硬盘的16位格式转换为32位格式。
  ?牐爉16:改变硬盘的多路扇区读功能,-m16可以使得硬盘一次读入16个扇区的数据。但是不是所有的硬盘都支持这个功能。使用hdparm -i /dev/hda 可以查看硬盘最大能读写的扇区数目。
  ?牐燿1X34 在支持DMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。
  ?牐燿1X66 在支持UDMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。
  ?牐犃私庖陨喜问淖饔煤秃逯螅衷谇肽阕邢讣觳橛才躺系谋昵?,看看它是否支持DMA 或者 UDMA模式,然后才对照这些参数来优化你的硬盘,以防出现不可预见的错误。
  ?牐犛呕才痰牟问部梢圆慰枷旅娴睦樱⒁猓皇撬械挠才潭际视靡韵碌挠呕问氚凑帐导是榭隼瓷柚貌问?
  ?牐?# hdparm -d1X66 -m16 -c3 /dev/hda
  ?牐?# hdparm /dev/hda
  ?牐?/dev/hda:
  ?牐爉ultcount = 16 (on)??
  ?牐營/O support = 3 (32-bit w/sync)??
  ?牐爑nmaskirq = 0(off)??
  ?牐爑sing_dma = 1(on)??
  ?牐爇eepsettings = 0(off)??
  ?牐爊owerr = 0(off)??
  ?牐爎eadonly = 0(off)??
  ?牐爎eadahead = 8(on)??
  ?牐爂eometry=629/240/63,sectors=9514260,start=0
  ?牐犘薷耐暾庑┎问螅惺焙虿⒉荒芤淮涡园延才逃呕晒ΑH绻谟才袒乖谡9ぷ鞯氖焙蛐薷恼庑┦荩才袒峤搿靶菝摺弊刺U饩托枰扔才痰葡?灭后,硬盘不处于繁忙状态下优化硬盘参数才会比较容易成功。
  ?牐爃dparm的改变是一个临时的状态,再次启动Linux系统的时候hdparm将会消失。所以要想永久保存修改后的信息,就必须把修改后的参数和数据写入/etc/rc.d/rc.local或者/etc/rc.local文件,甚至比启动过程早运行的程序中。
  ?牐犠詈笠嵝汛蠹业氖牵绻愕闹靼宓男酒榛騆inux内核kernel(比如内核kernel版本过于陈旧,2.2版以前)不支持UDMA模式,那就没有必要去修改硬盘设备的参数了。升级主板或者kernel是解决这个问题的较好办法。