トップ 最新 追記

PC日記

カテゴリ | Linux | Mac | tDiary
2008|03|04|05|
2009|11|
2010|02|05|08|09|10|11|12|
2011|01|05|11|
2013|06|
2014|08|
2015|01|04|08|

2008-03-08

_ [Linux] DMA(Direct Memory Access)をONにする

いつの間にかDMA(Direct Memory Access)がOFFになっていた。

たぶんカーネルのコンパイルを手動で実施するようにしたからだと思う。

ここを参考にDMAを設定する。

まずは今のHDDの状態を表示する。

# hdparm /dev/hda

/dev/hda:
 multcount     = 16 (on)
 IO_support    =  0 (default 16-bit)
 unmaskirq     =  0 (off)
 using_dma     =  0 (off)  <== OFFになってる
 keepsettings  =  0 (off)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 58140/16/63, sectors = 58605120, start = 0

どこかのカーネルパラメータを設定すればDMAがONになるはず。

HDDの情報を表示してみた。

# hdparm -i /dev/hda

/dev/hda:

 Model=TOSHIBA MK3018GAP, FwRev=M2.01 A, SerialNo=Y2550332T
 Config={ Fixed }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=46
 BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=58605120
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 *udma4 udma5 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-1,2,3,4,5

 * signifies the current active mode

カーネルパラメータをいじる前にHDDの性能を計っておく。

# hdparm -Tt /dev/hda

/dev/hda:
 Timing cached reads:   320 MB in  2.01 seconds = 159.18 MB/sec
 Timing buffered disk reads:   26 MB in  3.05 seconds =   8.52 MB/sec

カーネル設定をいじる前に、ハードウェア構成を確認しておく

# lspci
00:00.0 Host bridge: Transmeta Corporation LongRun Northbridge (rev 03)
00:00.1 RAM memory: Transmeta Corporation SDRAM controller
00:00.2 RAM memory: Transmeta Corporation BIOS scratchpad
00:02.0 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
00:04.0 Multimedia audio controller: ALi Corporation M5451 PCI AC-Link Controller Audio Device (rev 01)
00:06.0 Bridge: ALi Corporation M7101 Power Management Controller [PMU]
00:07.0 ISA bridge: ALi Corporation M1533/M1535 PCI to ISA Bridge [Aladdin IV/V/V+]  <==これが関係していそう
00:09.0 USB Controller: NEC Corporation USB (rev 41)
00:09.1 USB Controller: NEC Corporation USB (rev 41)
00:09.2 USB Controller: NEC Corporation USB 2.0 (rev 02)
00:0c.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 01)
00:0f.0 IDE interface: ALi Corporation M5229 IDE (rev c3)
00:10.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
00:12.0 Network controller: Intersil Corporation Prism 2.5 Wavelan chipset (rev 01)
00:13.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
00:14.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M6 LY

カーネル設定

# cd /usr/src/linux
# make menuconfig

Device Drivers  --->
  <*> ATA/ATAPI/MFM/RLL support  --->
    [*]     Generic PCI bus-master DMA support
    <*>       ALI M15x3 chipset support
    [ ]         ALI M15x3 WDC support (DANGEROUS)

これでカーネル再構築後、PCを再起動させてみると、DMAがONになっていた。

# hdparm /dev/hda

/dev/hda:
 multcount     = 16 (on)
 IO_support    =  0 (default 16-bit)
 unmaskirq     =  0 (off)
 using_dma     =  1 (on)  <== ONになった
 keepsettings  =  0 (off)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 58140/16/63, sectors = 58605120, start = 0

HDDの性能を計ってみる。

hdparm -Tt /dev/hda

/dev/hda:
 Timing cached reads:   308 MB in  2.01 seconds = 153.46 MB/sec
 Timing buffered disk reads:   66 MB in  3.04 seconds =  21.70 MB/sec
-Tスイッチ
キャッシュシステム、つまりメモリ、CPU、バッファキャッシュをテストするという意味。
-tスイッチ
キャッシュ上に無いデータを読み出して、ハードディスクのパフォーマンスをテストする。

8.52MB/sec→21.70MB/secにスピードアップ。約2.5倍。

今回はカーネルパラメータを変更するだけでDMAがONになったのは、以前にDMAがONになるように設定してあったから。本来、DMAをONにするには以下のコマンドを実行する必要がある。

-d1はDMAをON、-d0はDMAをOFF。

# emerge hdparm
# hdparm -d1 /dev/hda
# rc-update add hdparm default

トップ 最新 追記