2006年9月1日

ディスクIO性能(3) - PDC20270 のRAID機能(dmraid)を探る(1)

昔 Promise technology とはLinux界隈では物騒な話があった。そのためか IDE controller が本来の性能が出せなかった時期が長かった。また、Promise社はATA RAIDの雄で良くオンボードRAIDチップとして乗っていた。HardwareRAIDとして売られているが、OSドライバとカード上のBIOSが、RAID機能の100パーセントを提供するHardwareRAIDもどきなので、ベンダーからLinux用の専用ドライバを組み込まないといけない。これが面倒であった。

ただし、オープンソースでのRAIDドライバは開発は進んでおり

  • Linux 2.4 系では ataraid
  • Linux 2.6 系では dmraid
が使える。但し、dmraid は比較的新しいのでディストリビューション側でまだinitrdに組み込まれていないので、ルートファイルシステムに使いたい場合は、手動でなんとかしなければいけないようだ。

dmraid を試す

Debian etch に dmraid 1.0.0 rc9 が含まれるので手軽に試してみよう。

  • ASUS M2NPV-VM
  • Athlon64X2 3800+
  • CD1G-D2U667/ELP (但し、DDR2-533で運用)
  • FastTrack100 TX2 (PDC20270)
  • Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm

RAID0のテスト

  1. カードのBIOS設定(FastBuild Utility)にて 4台HDDの Stripe Array を定義する。
  2. 別HDDにインストール済み Debian/Linux etch システムを起動する。 下記のようにRAIDカードとHDDが認識されているのを確認する
    # dmesg
    ...
    PDC20270: IDE controller at PCI slot 0000:04:09.0
    ACPI: PCI Interrupt Link [APC2] enabled at IRQ 17
    ACPI: PCI Interrupt 0000:04:09.0[A] -> Link [APC2] -> GSI 17 (level, low) -> IRQ 209
    PDC20270: chipset revision 2
    PDC20270: ROM enabled at 0xfda00000
    PDC20270: 100% native mode on irq 209
        ide2: BM-DMA at 0x8c00-0x8c07, BIOS settings: hde:pio, hdf:pio
        ide3: BM-DMA at 0x8c08-0x8c0f, BIOS settings: hdg:pio, hdh:pio
    ...
    Probing IDE interface ide2...
    hde: ST340015A, ATA DISK drive
    hdf: ST340015A, ATA DISK drive
    ide2 at 0x9c00-0x9c07,0x9802 on irq 209
    Probing IDE interface ide3...
    hdg: ST340015A, ATA DISK drive
    hdh: ST340015A, ATA DISK drive
    ide3 at 0x9400-0x9407,0x9002 on irq 209
    ...
    hde: max request size: 128KiB
    hde: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hde: cache flushes supported
     hde: unknown partition table
    hdf: max request size: 128KiB
    hdf: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdf: cache flushes supported
     hdf: unknown partition table
    hdg: max request size: 128KiB
    hdg: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdg: cache flushes supported
     hdg: unknown partition table
    hdh: max request size: 128KiB
    hdh: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdh: cache flushes supported
     hdh: unknown partition table
    ...
  3. dmraidをインストール
    # apt-get install dmraid
  4. RAIDセットとデバイスを確認する。
    # dmraid -s
    *** Set
    name   : pdc_gddhfeaj
    size   : 312660992
    stride : 128
    type   : stripe
    status : ok
    subsets: 0
    devs   : 4
    spares : 0
    # dmraid -r
    /dev/hde: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdf: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdg: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdh: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
  5. RAIDセットの有効化
    # dmraid -a yes -v
    INFO: Activating stripe RAID set "pdc_gddhfeaj"
    これでRAIDセット /dev/mapper/pdc_gddhfeaj として1つのブロックデバイスに見えるようになる。
  6. fdisk でパーティションを切る。パーティションを再認識させるためには、該当RAIDセットの無効化&有効化を行う。
    # fdisk /dev/mapper/pdc_gddhfeaj
    ...
    # /etc/init.d/dmraid restart
    Shutting down DMRAID devices... RAID set "pdc_gddhfeaj1" is not active
    INFO: Deactivating partition RAID set "pdc_gddhfeaj1"
    INFO: Deactivating stripe RAID set "pdc_gddhfeaj"
    .
    Setting up DMRAID devices...INFO: Activating stripe RAID set "pdc_gddhfeaj"
    INFO: Activating partition RAID set "pdc_gddhfeaj1"
    .
  7. ファイルシステムを作る。
    # mkfs.ext3 -E stride=16 /dev/mapper/pdc_gddhfeaj1
    ext3 では、RAIDセットのchunk sizeをファイルシステムのブロック単位で指定すると、少し適した配置をしてくれる。
  8. 再起動を行い問題なく立ち上がるか確認する。

再起動後に、下記のようなメッセージが出る場合は運用は諦めよう!似たようなバグ報告があるのでそのうち直るかも。

hde: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
hde: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156393776, sector=156328497
ide: failed opcode was: unknown
PDC202XX: Primary channel reset.
ide2: reset: success
hde: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
hde: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156393776, sector=156328497
ide: failed opcode was: unknown
end_request: I/O error, dev hde, sector 156328497
上記は実際、2台のRAID0を構築したときに発生した。単体HDDより大きなサイズのパーティションを作成した場合のみ起き、上記のエラーログが延々出力され、起動が完了しない(shellも使えない)。運良く KNOPPIX 5 だとエラーを吐きながらも起動が完了するので、fdisk等でパーティションを書き換えることができた。4台では起きないのでかなりレアな条件が重なるとエラーになるっぽいなぁ。

RAID1のテスト

  1. カードのBIOS設定(FastBuild Utility)にて 2台HDDの Mirror Array を定義する。
  2. あとはRAID0と変わらない
    
    # dmraid -s
    *** Active Set
    name   : pdc_gdijjjaf
    size   : 78165248
    stride : 128
    type   : mirror
    status : ok
    subsets: 0
    devs   : 2
    spares : 0
    # dmraid -a yes -v
    INFO: Activating mirror RAID set "pdc_gdijjjaf"
    # fdisk /dev/mapper/pdc_gdijjjaf
    ...
    # /etc/init.d/dmraid restart
    ...
    # mkfs.ext3 /dev/mapper/pdc_gdijjaf1
    
RAIDセットと元の単体HDDの総セクター数は、RAIDセットの方が必ず小さくなるのでRAID0であったような起動時の異常は起きそうにはない。

結論

安全を考えるとまだdmraidの安定運用はRAID1以外では期待できないのだろうなぁ。運が良ければ、RAID0/RAID10/RAID5が運用できそうだなぁ。

0 件のコメント:

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...