Hdparm命令

 
目錄 [顯示隱藏]
1 版權聲明
2 前言
3 安裝 hdparm
4 取得磁碟機資訊
5 測試裝置
6 修改裝置設定

6.1 檢查目前設定
6.2 DMA 模式 -d
6.3 傳輸模式 (PIO/SDMA/MDMA/UDMA) -X
6.4 32 位元 IO_SUPPORT -c
6.5 MultSect -m
6.6 unmaskirq -u
6.7 寫入快取 -W
6.8 讀取前視 (Read-lookahead) -A
6.9 預讀 (Readahead) -a

7 儲存 hdparm 選項
8 疑難排解

8.1 hdparm -i 有顯示 UDMA 模式,但是設定那個模式之後什麼都沒有發生
8.2 我收到「Operation not supported」錯誤,連基本的「hdparm -i」命令也一樣

9 參考文件
10 待撰
11 版權聲明

版權聲明

原文 URL: http://www.gentoo-wiki.com/HOWTO_Use_hdparm_to_improve_IDE_device_performance

版權聲明: 依照 Gentoo Wiki 規定,原文與此譯文皆為 GNU Free Documentation License 授權。

[ 編輯]

前言

Hdparm 這個工具是用來設定 IDE 裝置的,包括如 DMA 模式、傳輸模式設定以及一些其他能改善硬碟及光碟機效能的設定。這些設定預設是關閉的,您應該會想要把他打開。本指南也希望能提供 hdparm 設定方面最新的資訊,說明如何檢查你的硬碟支援哪些設定,然後選用最高可用的設定。很多 hdparm 指南都直接說開啟特定模式,像是「-X33」、「-c1」等等,但是這些指南大多已經過時了,結果反而有很多人不知道有新的設定,直接就用上舊的。硬碟效 能提升,系統整體速度也會變快;另外應該也能解決 DVD 播放跳格或是燒錄太慢之類的問題。

安裝 hdparm

首先檢查看有沒有裝 hdparm,以 root 身份輸入:

# hdparm -V

如果有安裝好,應該會看到像是這樣的資訊:

hdparm v5.7

不然就會收到錯誤訊息:

bash: hdparm: command not found

如果沒有裝 hdparm,就可以用這個指令安裝:

# emerge hdparm

Emerge 完成之後再用上面的指令測試一下看有沒有安裝成功。

取得磁碟機資訊

不同的磁碟機能力有所不同,要做好設定就需要先知道每臺磁碟機能做到什麼程度。用下面這個指令應該就能取得該有的資訊,記得把 hda 替換成你自己的磁碟機:

# hdparm -i /dev/hda

Udev 系統上可以用比較易懂的檔名存取磁碟機。 硬碟的話,把 # 替換成磁碟編號:

# hdparm -i /dev/discs/disc#/disc

光碟機的話:

# hdparm -i /dev/cdroms/cdrom#/cdrom

應該會得到類似下面的結果:

/dev/hdd:

Model=WDC WD80EB-28CGH2, FwRev=24.84G24, SerialNo=WD-WMA9N7936819
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=15509/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=768kB, MaxMultSect=16, MultSect=16
CurCHS=15509/16/63, CurSects=15633072, LBA=yes, LBAsects=15633072
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: device does not report version:

* signifies the current active mode

每個 IDE 硬碟及光碟機都做一次,特別要注意的是 MaxMultSec 和 PIO/DMA/UDMA 等可用的最高模式。

測試裝置

Hdparm 內含滿方便的測速模式,可以看一下每個設定的速度差異。進行測試前建議先關閉所有可能影響結果的程式。最好是從終端做,不要在 xorg 下用 xterm 來跑。測試的指令如下,記得要把 X 替換成你的磁碟機:

# hdparm -tT /dev/hdX

應該會看到類似這樣的測速結果:

/dev/hdd:
Timing cached reads: 496 MB in 2.00 seconds = 247.42 MB/sec
Timing buffered disk reads: 60 MB in 3.03 seconds = 19.81 MB/sec

建議先測好所有磁碟機記下結果,這樣設定完成之後才看得出來到底效能改善了多少。

修改裝置設定

警告:修改設定有可能損壞硬體或致使系統不穩定。大多數的新磁碟機應該都沒有問題,但是後果請自負。註:這些設定重新開機就會重設,所以決定好設定之後還要再看後文,在開機時就重新設定。

檢查目前設定

有些只要不指定參數數值就可以檢查目前的設定。例如要看現行 DMA 模式的話:

# hdparm -d /dev/hda

有些則不能這麼用,像是傳輸模式 (-X) 就不會顯示目前設定而會直接把模式歸零,另外像是寫入快取 (-W) 則是會要求輸入設定。一般來說只要用下面這行指令就可以顯示磁碟機的所有設定:

# hdparm /dev/hda

顯示結果應該會類似下面這樣:

/dev/hda:
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 15509/16/63, sectors = 8004132864, start = 0

或是如前述,用「hdparm -i」顯示較進階的設定,像是傳輸模式等。

DMA 模式 -d

修改 DMA 模式有時可能讓系統死當,別忘記了!第一個要啟用的大既就是 DMA 模式了。DMA 模式很重要,例如要播放 DVD 或是燒錄光碟片的話,就最好開啟 DVD-ROM/RW 的 DMA 模式,不然很可能播放會跳格,燒錄速度一直拉不上去,甚至可能燒錄失敗。一般光碟機和硬碟開啟 DMA 模式也很有幫助,可以大幅提升速度,降低 CPU 負載。核心裡也要編入你的晶片組的 DMA 選項;這應該歸於「Device Drivers > ATA/ATAPI/MFM/RRL support」項目下,然後選取你的晶片組的選項。

要啟用裝置的 DMA,輸入:

# hdparm -d1 /dev/hda

一切順利的話應該會看到:

/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)

再來跑一下測速看看效能提升多少。

傳輸模式 (PIO/SDMA/MDMA/UDMA) -X

其實 DMA 還分成數種不同的傳輸模式:PIO 1-4 (Programmed IO)、SDMA 0-2 (Single-word DMA)、MDMA 0-2 (Multi-word DMA) 以及 UDMA 0-5 (Ultra-DMA)。設定用指令如下,把 ## 替換成想要的模式,hda 替換成要設定的磁碟機:

# hdparm -X## /dev/hda

一般來說數值愈高愈好,下表列出各傳輸模式和參數數值:

  0 1 2 3 4 5
PIO 08 09 10 11 12
SDMA 16 17 18
MDMA 32 33 34
UDMA 64 65 66 67 68 69

例如要設定 UDMA2 的話:

# hdparm -X66 /dev/hda

也可以用模式名稱設定:

# hdparm -X udma2 /dev/hda

現在大多數的碟磁應該都選用 UDMA 模式。啟用傳輸模式之後執行「hdparm -i」確認有設定好。設定好後再測速看看。

32 位元 IO_SUPPORT -c

用 -c# 參數可以設定 32 位元輸出入支援。IO_Support 總共有四個層級:

0 預設 16 位元
1 32 位元
2 16 位元
3 32 位元 + sync

可以的話大概選用 3 或是 1 最好,啟用 3 的指令是:

# hdparm -c3 /dev/hda

這個設定會改變 PCI 匯流排傳輸資料到控制器的方式,可以把流量加倍。

MultSect -m

執行「hdparm -i」的時候應該會看到一段 MaxMultSect。用 -m 參數把 MultSect 設成這個數值,把 # 替換成你的 MaxMultSect:

# hdparm -m# /dev/hda

這個設定控制單次 I/O 中斷會讀取幾個磁區。大多數新碟磁機應該都能用 MultSect 16,比較舊的用 8。修改這個設定之後應該能減少磁碟存取消耗的系統資源,增加磁碟頻寬。

unmaskirq -u

用下面指令可以啟用 unmaskirq:

# hdparm -u1 /dev/hda

啟用 unmasking 之後,磁碟中斷時 Linux 便可取消其他中斷遮罩,讓系統同時進行類似的工作,應該能提升系統整體反應。

寫入快取 -W

下面指令可以開啟寫入快取:

# hdparm -W1 /dev/hda

讀取前視 (Read-lookahead) -A

下面指令可以開啟讀取前視:

# hdparm -A1 /dev/hda

預讀 (Readahead) -a

預讀設定可以用下面指令修改:

# hdparm -a# /dev/hda

我的硬碟自動就設在 256 了。

儲存 hdparm 選項

決定好最佳 hdparm 設定之後,就要編輯 /etc/conf.d/hdparm 檔案,下次重新開機之後才會載入這些設定。要用 nano 編輯器修改的話:

# nano /etc/conf.d/hdparm

畫面應該會如下:

檔案:/etc/conf.d/hdparm (預設)
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/hdparm/files/hdparm-conf.d.3,v 1.2 2004/09/06 02:17:08 swegener Exp $

# You can either set hdparm arguments for each drive using hdX_args,
# discX_args, cdromX_args and genericX_args, e.g.
#
# hda_args="-d1"
# disc1_args="-d1"
# cdrom0_args="-d1"

# or, you can set hdparm options for ALL drives using all_args, e.g.
#
# all_args="-d1"

如果你的磁碟機大多都會使用相同的設定,就修改 all_args 那一行 (會套用在所有磁碟機上)。下面範例中,hda 和 hdb 是一般的硬碟,支援 UDMA-5,hdc 只支援 UDMA-2,hdd 則是光碟機,預讀只有 8,支援模式也只到 UDMA-0,另外這是一般的光碟機,不需要寫入快取。

檔案:/etc/conf.d/hdparm (範例)
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/hdparm/files/hdparm-conf.d.3,v 1.2 2004/09/06 02:17:08 swegener Exp $

# You can either set hdparm arguments for each drive using hdX_args,
# discX_args, cdromX_args and genericX_args, e.g.
#
# hda_args="-d1"
# disc1_args="-d1"
# cdrom0_args="-d1"

# or, you can set hdparm options for ALL drives using all_args, e.g.
#
#all_args="-d1"
hda_args="-A1 -d1 -u1 -c3 -X69 -W 1 -m 16"
hdb_args="$hda_args"
hdc_args="-A1 -d1 -u1 -c3 -X66 -W 1 -m 16"
hdd_args="-A1 -d1 -u1 -c3 -X64 -m 16 -a 8"

最後在開機時自動執行 hdparm:

# rc-update add hdparm boot

疑難排解

hdparm -i 有顯示 UDMA 模式,但是設定那個模式之後什麼都沒有發生

這最可能的原因就是主機板不支援這個模式所需要較高 ATA 模式。如果你確定你的主機板有支援,檢查看看硬磁是否有連接到正確的 IDE 插槽。不同的 ATA 規格插槽塗色會不一樣。下表列出各 UDMA 模式和其 ATA 需求:

UDMA ATA
0 ATA 16
1 ATA24
2 ATA33
3 ATA44
4 ATA66
5 ATA100

我收到「Operation not supported」錯誤,連基本的「hdparm -i」命令也一樣

你大概是把 hdparm 用在 SATA 或是什麼奇怪的磁碟機上了。Hdparm 對 SATA 支援有限,但是這類硬碟通常會自動設定使用最佳選項。基本資訊 (不加 -i) 和測速應該還是可以用。測看看硬碟速度如何 (一般來說 cached read 應該有 1000mb 以上,buffered reads 應該有 100mb 以上)。

參考文件

  • hdparm 說明 (英文)
  • Linux 微調指南 (英文) - http://www.laukas.com/knbase/linux_special/
  • LinuxDevCenter: 用 hdparm 加速 Linux (O’Reilly) (英文)- http://www.linuxdevcenter.com/pub/a/linux/2000/06/29/hdparm.html

待撰

  • 把輸出範例換成未設定的預設輸出;現在用的是已經調整過的設定。
  • 多加關於各模式的資訊以及可能獲得的改善
  • 一些範例速度,說明差不多會有多大的改善

問題與意見請至 discussion 頁面。

版權聲明

原文 URL: http://www.gentoo-wiki.com/HOWTO_Use_hdparm_to_improve_IDE_device_performance