| HOME | INDEX |

   
 

IDEディスクの最適化

   
     

hdparmのインストール

   


IDEディスクの最適化ツールのインストール。

# apt-get install hdparm

IDE ディスクのベンチマーク

   


ディスクの装着状況の確認。


# df

Filesystem

1k-blocks

Used

Available

Use%

Mounted on

/dev/hda1

3937220

571488

3165728

16%

/

/dev/hda3

152648512

50749524

94144816

36%

/home

/dev/hda ディスクに対してベンチマークを行う。

# hdparm -t /dev/hda

/dev/hda:
Timing buffered disk reads: 64 MB in 17.61 seconds = 3.63 MB/sec



IDE ディスクの最適化

   


チューニング対象となる主なパラメータは、以下の4つ。


-c get/set IDE 32-bit IO setting
-d get/set using_dma flag
-m get/set multiple sector count
-u get/set unmaskirq flag (0/1)

32bit I/O オン、DMA オン を設定。

# hdparm -c1 -d1 /dev/hda

dev/hda:
 setting 32-bit I/O support flag to 1
 setting using_dma to 1 (on)
 I/O support = 1 (32-bit)
 using_dma = 1 (on)

ベンチマーク結果。

# hdparm -t /dev/hda

/dev/hda:
Timing buffered disk reads: 64 MB in 1.32 seconds = 50.39 MB/sec


自動起動設定

   


hdparm コマンドは、マシンの起動時に実行する必要がある。/etc/init.d/hdparm ファイルを作成し、マシンの起動時に実行するようする。

# vi /etc/init.d/hdparm

#! /bin/sh
#
# Setting IDE Bus Master
#
# chmod a+x /etc/init.d/hdparm
#
# 環境に合わせて変更すること
# 対象ディスクがない場合は0を設定すること
DAEMON=/sbin/hdparm
DEV_A=/dev/hda
DEV_B=0
DEV_C=0
DEV_D=0

COMMENT="----------"

# DAEMON check
test -x $DAEMON || exit 0

# Select Working
# c: I/O 32bit
# d: DMA

case "$1" in
start)
 echo $COMMENT " hdparm -c1 -d1 " $COMMENT
 if [ $DEV_A != 0 ]; then
  $DAEMON -c1 -d1 $DEV_A # ← 32bit I/O と DMA をオン
 fi
 if [ $DEV_B != 0 ]; then
  $DAEMON -c1 -d1 $DEV_B
 fi
 if [ $DEV_C != 0 ]; then
  $DAEMON -c1 -d1 $DEV_C
 fi
 if [ $DEV_D != 0 ]; then
  $DAEMON -c1 -d1 $DEV_D
 fi
;;
stop)
 echo $COMMENT " hdparm -c0 -d0 " $COMMENT
 if [ $DEV_A != 0 ]; then
  $DAEMON -c0 -d0 $DEV_A # ← 32bit I/O と DMA をオフ
 fi
 if [ $DEV_B != 0 ]; then
  $DAEMON -c0 -d0 $DEV_B
 fi
 if [ $DEV_C != 0 ]; then
  $DAEMON -c0 -d0 $DEV_C
 fi
 if [ $DEV_D != 0 ]; then
  $DAEMON -c0 -d0 $DEV_D
 fi
;;
status)
 echo $COMMENT " hdparm -i " $COMMENT
 if [ $DEV_A != 0 ]; then
  echo
  echo $COMMENT $DEV_A $COMMENT
  $DAEMON -i $DEV_A
  $DAEMON -v $DEV_A
 fi
 if [ $DEV_B != 0 ]; then
  echo
  echo $COMMENT $DEV_B $COMMENT
  $DAEMON -i $DEV_B
  $DAEMON -v $DEV_B
 fi
 if [ $DEV_C != 0 ]; then
  echo
  echo $COMMENT $DEV_C $COMMENT
  $DAEMON -i $DEV_C
  $DAEMON -v $DEV_C
 fi
 if [ $DEV_D != 0 ]; then
  echo
  echo $COMMENT $DEV_D $COMMENT
  $DAEMON -i $DEV_D
  $DAEMON -v $DEV_D
 fi
;;
bench)
 echo $COMMENT " hdparm -t " $COMMENT
 if [ $DEV_A != 0 ]; then
  echo
  echo $COMMENT $DEV_A $COMMENT
  $DAEMON -t $DEV_A
 fi
 if [ $DEV_B != 0 ]; then
  echo
  echo $COMMENT $DEV_B $COMMENT
  $DAEMON -t $DEV_B
 fi
 if [ $DEV_C != 0 ]; then
  echo
  echo $COMMENT $DEV_C $COMMENT
  $DAEMON -t $DEV_C
 fi
 if [ $DEV_D != 0 ]; then
  echo
  echo $COMMENT $DEV_D $COMMENT
  $DAEMON -t $DEV_D
 fi
;;
*)
 echo "Usage: /etc/init.d/hdparm {start|stop|status|bench}"
 exit 1
 ;;
 esac

exit 0

実行属性を与える。

# chmod 755 /etc/init.d/hdparm

update-rc.d で runlevel ごとの起動スクリプトへのシンボリックリンクを更新する。

# update-rc.d hdparm defaults 20


 
   
Copyright © 2002-2004 by mallet, All rights reserved