一直在使用老的机器跑rhel5.2。始终觉得硬盘的io速度不够快。今天看的一篇文章讲到linux默认是关闭dma的,于是手动打开,速度确实快了不少
注意:/sbin/hdparm命令不支持SATA硬盘。
Linux下的32位I/O和DMA默认是关闭的。如果用的是16位I/O的话,就无法充分发挥电脑的性能。
如果要打开32位I/O和DMA,就需要以root身份进行设置。为了降低因出错而重启系统对文件系统的损害,最好以单用户模式进行。
首先,使用下面的命令检查硬盘驱动器的当前I/O情况:
[root@anima lwg]# /sbin/hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 8 MB in 3.31 seconds = 2.42 MB/sec
[root@anima lwg]#
如果要显示当前I/O、DMA设置,可以分别使用下面的命令:
[root@anima lwg]# /sbin/hdparm -c /dev/hda (显示当前I/O设置)
/dev/hda:
IO_support = 0 (default 16-bit)
[root@anima lwg]# /sbin/hdparm -d /dev/hda (显示当前DMA设置)
/dev/hda:
using_dma = 0 (off)
[root@anima lwg]#
通过上面的命令,已经知道现在32位I/O和DMA是关闭的,可以分别用下面的命令将其打开:
[root@anima lwg]# /sbin/hdparm -c 1 /dev/hda (打开32位I/O)
/dev/hda:
setting 32-bit IO_support flag to 1
IO_support = 1 (32-bit)
[root@anima lwg]# /sbin/hdparm -d 1 /dev/hda (打开DMA)
/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)
[root@anima lwg]#
然后使用下面的命令使设置生效:
[root@anima lwg]# /sbin/hdparm -k 1 /dev/hda
/dev/hda:
setting keep_settings to 1 (on)
keepsettings = 1 (on)
[root@anima lwg]#
好啦!现在再查看一下驱动器的I/O情况:
[root@anima lwg]# /sbin/hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 116 MB in 3.03 seconds = 38.34 MB/sec
[root@anima lwg]#
可以看到,现在系统的I/O性能提高了很多。
但是,上面的设置只是对当前的系统有效,当再次重启系统时,又得重新设置了。
如果要使每次系统启动时都打开DMA,可以在/etc/rc.d/rc.local文件中添加上面的命令来实现:
[root@anima lwg]# echo "/sbin/hdparm -c 1 -d 1 -k 1 /dev/hda" >> /etc/rc.d/rc.local
[root@anima lwg]#
hdparm命令帮助:
[root@anima lwg]# /sbin/hdparm --help
hdparm - get/set hard disk parameters - version v5.7
Usage: hdparm [options] [device] ..
Options:
-a get/set fs readahead
-A set drive read-lookahead flag (0/1)
-b get/set bus state (0 == off, 1 == on, 2 == tristate)
-B set Advanced Power Management setting (1-255)
-c get/set IDE 32-bit IO setting
-C check IDE power mode status
-d get/set using_dma flag
--direct use O_DIRECT to bypass page cache for timings
-D enable/disable drive defect management
-E set cd-rom drive speed
-f flush buffer cache for device on exit
-g display drive geometry
-h display terse usage information
-i display drive identification
-I detailed/current information directly from drive
--Istdin reads identify data from stdin as ASCII hex
--Istdout writes identify data to stdout as ASCII hex
-k get/set keep_settings_over_reset flag (0/1)
-K set drive keep_features_over_reset flag (0/1)
-L set drive doorlock (0/1) (removable harddisks only)
-M get/set acoustic management (0-254, 128: quiet, 254: fast) (EXPERIMENTAL)
-m get/set multiple sector count
-n get/set ignore-write-errors flag (0/1)
-p set PIO mode on IDE interface chipset (0,1,2,3,4,...)
-P set drive prefetch count
-q change next setting quietly
-Q get/set DMA tagged-queuing depth (if supported)
-r get/set device readonly flag (DANGEROUS to set)
-R register an IDE interface (DANGEROUS)
-S set standby (spindown) timeout
-t perform device read timings
-T perform cache read timings
-u get/set unmaskirq flag (0/1)
-U un-register an IDE interface (DANGEROUS)
-v defaults; same as -mcudkrag for IDE drives
-V display program version and exit immediately
-w perform device reset (DANGEROUS)
-W set drive write-caching flag (0/1) (DANGEROUS)
-x tristate device for hotswap (0/1) (DANGEROUS)
-X set IDE xfer mode (DANGEROUS)
-y put IDE drive in standby mode
-Y put IDE drive to sleep
-Z disable Seagate auto-powersaving mode
-z re-read partition table
[root@anima lwg]#
关于硬盘DMA:
硬盘的DMA模式大家应该都知道吧,硬盘的PATA模式有DMA33、DMA66、DMA100和DMA133,较新的有SATA-150、SATA-300。一般来说现在大多数人用的还是PATA模式的硬盘,硬盘使用DMA模式相比以前的PIO模式传输的速度要快2~8倍。DMA模式的启用对系统的性能起到了实质性的作用。
DMA传输模式:
“Ultra DMA Mode *(*为数字,DMA33为2, DMA66为4,DMA100为5、DMA133为6)”。Linux联盟收集整理。(T002)
分享到:
相关推荐
"如何在Linux系统下用DMA方式传输数据" 在 Linux 系统中,使用 DMA 方式传输数据可以占用更少的 CPU 资源。 Linux 支持硬盘以 DMA 方式转输数据,但在安装 Red Hat 7.0 时关于 DMA 的默认选项是 Disable 的。下面将...
### Linux操作系统核心知识点详解 #### 一、Linux内核版本号构成 Linux内核版本号由三个部分组成:`Major.minor.patchlevel`。 - **Major(主版本号)**:表示内核的大版本更新,通常在一个较长时间段内保持稳定...
Linux系统对ISA总线直接存储器访问(DMA)的实现是一项关键的技术,它允许外部设备在不通过CPU的情况下直接与内存进行数据交换,从而提高了系统的效率和响应速度。这篇文章将深入探讨Linux内核如何处理ISA总线上的...
在Linux操作系统中,直接存储器访问(Direct Memory Access, DMA)是一种高效的数据传输方式,它允许硬件设备直接读写系统内存,而无需CPU介入。这种方式极大地减少了CPU的负担,尤其在处理大量数据传输任务时,如...
在Linux系统中,DMA(Direct Memory Access,直接内存访问)是一种高效的数据传输机制,它允许外部设备如硬盘、网络接口卡等直接与系统的内存进行数据交换,而不通过CPU。这大大减轻了CPU的工作负担,提高了系统的...
DMA驱动是操作系统内核的一部分,负责初始化和管理DMA控制器,设置数据传输的相关参数,如传输方向、数据宽度、地址等。在数据传输过程中,驱动会触发DMA控制器开始工作,并在传输完成后得到通知,以便进行后续处理...
在Linux操作系统中,DMA(Direct Memory Access,直接内存访问)是一种高效的数据传输机制,它允许硬件设备如硬盘、网络接口卡等直接与内存交互,而无需CPU介入。这对于提高系统性能,尤其是处理大量数据流的应用至...
在Linux嵌入式系统中,DMA(Direct Memory Access,直接内存访问)是一种高效的数据传输机制,它允许外部设备如硬盘、网络接口卡等直接与内存进行数据交换,而无需CPU的介入。这种方式大大减轻了CPU的负担,提高了...
交叉编译环境可以在PC机上直接安装Linux、在Windows下虚拟机上安装Linux、或是两台电脑,分别安装Windows操作系统和Linux操作系统。 知识点5:根文件系统 根文件系统rootfs.jffs2是Linux操作系统的基本组成部分,...
在Red Hat Linux操作系统中,直接内存访问(Direct Memory Access,简称DMA)是一种高效的数据传输机制,它可以减轻CPU的负担,让硬盘等外部设备直接与内存交换数据,而无需CPU参与。在Red Hat 7.0的默认配置中,DMA...
DMA的实现依赖于具体的系统硬件,不同的体系结构下,DMA传输方式和编程接口可能大相径庭。在Linux内核中,DMA的实现充分考虑到了不同架构的兼容性,提供了一套通用的框架来支持DMA操作。 #### 数据传输方式 DMA...
Linux 文件系统是Linux操作系统的核心组成部分,负责组织和管理计算机中的数据存储。在Linux中,文件系统不仅是文件的集合,还包括设备、符号链接等对象。本文主要探讨了在Red Hat 9.0环境下Linux文件系统的管理,...
操作系统内核实验是深入理解操作系统工作原理的重要途径,特别是在Linux环境下,通过实践可以更好地学习其设计思想和实现机制。Linux是一种广泛使用的开源操作系统,它的内核是系统的核心部分,负责管理硬件资源、...
本文主要探讨了三种广泛使用的操作系统——Linux、Mac OS(苹果系统)以及与之相关的POSIX标准,同时也涉及了DMA原理,这是一个在操作系统中用于高效数据传输的技术。 1. Linux系统: Linux是一种自由开放源码的类...
在提高Linux操作系统的运行速度方面,我们可以采取一系列措施来优化硬件性能、调整应用程序优先级以及选择轻量级的桌面环境。以下将详细阐述这些方法。 首先,提升硬盘和光驱的数据传输性能是优化系统速度的关键...
### 嵌入式Linux操作系统在PC104上的实现 #### 一、引言 随着信息技术的迅速发展,嵌入式系统已经成为现代科技的重要组成部分。Linux作为一种免费且开源的操作系统,凭借其强大的功能和高度的灵活性,在嵌入式领域...
硬盘DMA模式和PIO模式 DMA(Direct Memory Access,直接内存访问)是一种高速数据传输操作,允许外部设备和存储器之间直接读写数据,不需要CPU干预。整个数据传输操作在一个称为DMA控制器的控制下进行的。CPU除了在...