FreeBSD Daily Topics

2010年1月4日AHCI to CAMおよびATA to CAMを有効にする方法

tips

How to use ATA_CAM

ATAをCAMに統合する開発が進められています。ATAをCAMのインターフェースで統一して扱えるようになる以外にも、AHCI to CAMでネイティブコマンドキューのサポートが進むことになるといった性能面での向上も期待されます。

最新のFreeBSD 9-CURRENTや8-STABLEでこうした機能が試せます。本稿では、FreeBSD 9-CURRENTや8-STABLEでこうした機能を有効にする方法方を紹介します。なお、ATA_CAMについてはFreeBSD committerである重村氏の次のドキュメントに要点がまとめられています。

AHCI to CAMやATA to CAMを有効にするには、次のようにカーネルオプションを指定してカーネルを再構築します。

リスト AHCI to CAMを有効にしてネイティブコマンドキューを利用する場合の設定例 - ATAPIのCD/DVDデバイスは変更しないでそのまま使うケース
# enable - ATA and ATAPI CD/DVD device
device          ata
device          atapicd         # ATAPI CDROM drives
options         ATA_STATIC_ID   # Static device numbering

# disable - ATA disks and others
nodevice        atadisk         # ATA disk drives
nodevice        ataraid         # ATA RAID drives
nodevice        atapifd         # ATAPI floppy drives
nodevice        atapist         # ATAPI tape drives

# enable - AHCI to CAM
device          ahci            # AHCI
リスト ATA to CAMを利用する場合
# disable - ATA and ATAPI devices
nodevice        ata
nodevice        atadisk         # ATA disk drives
nodevice        ataraid         # ATA RAID drives
nodevice        atapicd         # ATAPI CDROM drives
nodevice        atapifd         # ATAPI floppy drives
nodevice        atapist         # ATAPI tape drives
nooptions       ATA_STATIC_ID   # Static device numbering

# enable - ATA to CAM
device          atacore         # Core ATA functionality
device          atapci          # PCI bus support; only generic chipset support
device          ataintel        # Intel
options         ATA_CAM
リスト AHCI to CAMとATA to CAMを両方とも利用する場合
# disable - ATA and ATAPI devices
nodevice        ata
nodevice        atadisk         # ATA disk drives
nodevice        ataraid         # ATA RAID drives
nodevice        atapicd         # ATAPI CDROM drives
nodevice        atapifd         # ATAPI floppy drives
nodevice        atapist         # ATAPI tape drives
nooptions       ATA_STATIC_ID   # Static device numbering

# enable - AHCI to CAM
device          ahci            # AHCI

# enable - ATA to CAM
device          atacore         # Core ATA functionality
device          atapci          # PCI bus support; only generic chipset support
device          ataintel        # Intel
options         ATA_CAM

IDEモードで認識されるSATA HDDと、AHCI / SATAネイティブモードで認識されるデバイス名は異なります。たとえばIDEモードでは「/dev/ad0」で認識されている場合、AHCI / SATAネイティブモード on ATAでは「/dev/ad6」のように認識され、これがAHCI / ATA to CAMでは「/dev/ada0」のように認識されます。デバイス名、デバイス番号ともにかわりますので、システムを再起動する前に/etc/fstabを編集してください。編集を忘れた場合や間違えた場合にはLiveCDからシステムを起動して編集するか、ATA to CAM integrationに挑戦で説明されている要領でシステムを起動して編集して使います。次に認識されるデバイス名の例を列挙します。

  • SATA(IDEモード)on ATA - /dev/ad0
  • SATA(ネイティブモード)on ATA - /dev/ad6 (M/Bによっては別の番号になります)
  • SATA to CAM - /dev/ada0
  • AHCI to CAM - /dev/ada0

AHCI to CAMやATA to CAMが有効になった場合のシステム起動時の出力例を次に示します。

リスト 認識されたAHCIコントローラとチャンネル
ahci0: <Intel ICH10 AHCI SATA controller> port 0xf900-0xf907,0xf800-0xf803,0xf700-0xf707,0xf600-0xf603,0xf500-0xf51f mem 0xfdffd000-0xfdffd7ff irq 19 at device 31.2 on pci0
ahci0: [ITHREAD]
ahci0: AHCI v1.20 with 6 3Gbps ports, Port Multiplier supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ahcich0: [ITHREAD]
ahcich1: <AHCI channel> at channel 1 on ahci0
ahcich1: [ITHREAD]
ahcich2: <AHCI channel> at channel 2 on ahci0
ahcich2: [ITHREAD]
ahcich3: <AHCI channel> at channel 3 on ahci0
ahcich3: [ITHREAD]
ahcich4: <AHCI channel> at channel 4 on ahci0
ahcich4: [ITHREAD]
ahcich5: <AHCI channel> at channel 5 on ahci0
ahcich5: [ITHREAD]
リスト AHCI to CAMで認識されたSATAドライブ - デバイス名が「ad」ではなく「ada」になっているところに注目
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <ST3250620AS 3.AAC> ATA-7 SATA 2.x device
ada0: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO size 8192bytes)
ada0: Command Queueing enabled
ada0: 238474MB (488395055 512 byte sectors: 16H 63S/T 16383C)
リスト ATA to CAMで認識されたCD/DVDドライブ - デバイス名が「acd」ではなく「cd」で認識されているところに注目
cd0 at ata2 bus 0 scbus0 target 0 lun 0
cd0: <HL-DT-ST DVDRAM GSA-4163B A100> Removable CD-ROM SCSI-0 device 
cd0: 33.300MB/s transfers (UDMA2, PIO size 65534bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present

AHCI to CAMやATA to CAMで認識されたデバイスはSCSIデバイスのようにcamcontrol(8)で制御できます。

camcontrol(8)でATA to CAMのデバイスを制御する例
# camcontrol devlist
<HL-DT-ST DVDRAM GSA-4163B A100>   at scbus0 target 0 lun 0 (cd0,pass0)
<ST3250620AS 3.AAC>                at scbus2 target 0 lun 0 (pass1,ada0)
# camcontrol tags 2:0:0
(pass1:ahcich0:0:0:0): device openings: 32
# camcontrol readcap 2:0:0
(pass1:ahcich0:0:0:0): READ CAPACITY(10). CDB: 25 0 0 0 0 0 0 0 0 0 
(pass1:ahcich0:0:0:0): CAM Status: SCSI Status Error
(pass1:ahcich0:0:0:0): SCSI Status: Check Condition
# camcontrol eject 0:0:0
Unit stopped successfully, Media ejected
# camcontrol load 0:0:0 
Unit started successfully, Media loaded
#

開発段階でまだどうなるかわかりませんが、FreeBSD 8.1-RELEASEでは少なくともオプションを指定してカーネルを再構築することで利用できるようになるとみられます。デフォルトで有効になるのは9系になる可能性があります。ネイティブコマンドキューイングを有効にするとon ATAのときとはIO性能に違いが現れます。パフォーマンスチューニングはさらにこれから取り組まれることになるため、現状よりも性能の改善が期待できるとみられます。

おすすめ記事

記事・ニュース一覧