hdparm でハードディスクを高速化する
- 2006.04.08
- Linux
もしハードディスクが PIOモードで動いていたらDMAモードに変更するだけで、14倍の速度アップ!
■ハードディスクの読み出し速度を測定する
まずは、HDDの読み出し速度を測る。
# hdparm -Tt /dev/hda /dev/hda: Timing cached reads: 1856 MB in 2.00 seconds = 929.07 MB/sec Timing buffered disk reads: 10 MB in 3.48 seconds = 2.87 MB/sec
-Tスイッチは、キャッシュシステム、つまりメモリ、CPU、バッファキャッシュをテストするという意味。
-tスイッチは、キャッシュ上に無いデータを読み出して、ハードディスクのパフォーマンスをテストする。
読み出し速度が2.87MB/秒。Ultra ATA100の理想値 100MB/秒 のたった3%かい!!
■HDDの設定を確認する
/dev/hdaの設定を調べる。
# hdparm /dev/hda /dev/hda: multcount = 16 (on) IO_support = 0 (default 16-bit) ←I/Oが16ビット unmaskirq = 0 (off) ←他の割り込みタスクに対応していない using_dma = 0 (off) ←DMAがオフになっている!(PIOモードということ) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 65535/16/63, sectors = 40020664320, start = 0
/dev/hdaのHDD情報を取得する。
# hdparm -i /dev/hda /dev/hda: Model=ST340016A, FwRev=3.05, SerialNo=3HS1JMCX ←ハードディスクのモデル名 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78165360 IORDY=on/off, tPIO={min:240,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 ←udma5はUltra ATA100を指す AdvancedPM=no WriteCache=enabled Drive conforms to: device does not report version: * signifies the current active mode ←udma5が現在の設定という意味
シーゲートの ST340016A をホームページで検索してみると、Ultra ATA/100 インターフェースだということが分かり、udma5(Ultra ATA/100モード)で動いているので、チューニングする必要はない。
同じシーゲートの ST340016A を別のLinuxマシンで調べてみると、udma2(Ultra ATA/33)で動いていた。このマシンはマザーボードが古いので、これ以上の転送速度は出せないということなのだ。残念。
■チューニング実行
-u1 (unmaskirq)要求したデータがディスクから返ってくる待ち時間に、ネットワークトラフィックなど他の割り込みタスクに応答できるようになる。
-c3 (I/O support)モード3、つまり同期32ビットモードをサポート。
-d1 (using_dma)DMAモードをオンにする。-d1 でオンになる。-d0 でオフになりPIOモードに戻る。
# hdparm -u1 -c3 -d1 /dev/hda /dev/hda: setting 32-bit IO_support flag to 3 setting unmaskirq to 1 (on) setting using_dma to 1 (on) IO_support = 3 (32-bit w/sync) unmaskirq = 1 (on) using_dma = 1 (on)
■チューニングの結果
HDDの読み出し速度を測る。
# hdparm -Tt /dev/hda /dev/hda: Timing cached reads: 1860 MB in 2.00 seconds = 931.07 MB/sec Timing buffered disk reads: 122 MB in 3.02 seconds = 40.40 MB/sec
読み出し速度が40.40MB/秒になり、14倍の速度アップ。
ちなみに -c 1 オプションを付けて実行して、16ビットを32ビットモードへ変更しても速度アップしない。
■/etc/rc.d/rc.localに記述しておく
再起動すると、設定がPIOモードへ戻るので、rc.localに記述しておく。
# vi /etc/rc.d/rc.local
次の一行をお尻に追加する。
/sbin/hdparm -u1 -c3 -d1 /dev/hda
■参考サイト
MySQLのパフォーマンスを向上するために
hdparm
- http://www.itmedia.co.jp/help/tips/linux/l0086.html
- http://www.atmarkit.co.jp/flinux/rensai/linuxtips/189slowhdd.html
- http://www.stackasterisk.jp/tech/systemManagement/hd01_01.jsp
-
前の記事
perl | CPAN を使ってモジュールをダウンロードする 2006.04.07
-
次の記事
Lynx をインストールする 2006.04.08