4Gbps FibreChannelで高速ストレージ転送

接続に使用した光ファイバー
4Gbps FibreChannel HBA
お前のようなHDDがいるか

はじめに

GbEじゃ遅い!!!10GbEは高い!!!そうだ!!!4Gbps FibreChannelは激安だ!!!これにしよう!!!

というわけで、メモリ64GBのバケモノであるSun Fire T2000を外付けストレージとして使うことで、膨大なメモリ容量をキャッシュとして活用して高速ストレージとして使おうと思った。その結果、そこそこ高速なストレージを作ることに成功した。

仮想マシンのディスクイメージをFibreChannel接続のストレージに置いておく、とかいう使い方をしているが、かなり快適に使用できる。おすすめ。

用語

FibreChannel / iSCSI

FibreChannel(FC)はストレージを光ファイバーで高速に接続するための規格。iSCSIもストレージをEthernetで接続するための規格。どちらも上位レイヤーのプロトコルに使われているのはSCSIなので、設定内容とかに類似点がある。
今回は、FibreChannel機器同士をケーブルで直接つなぐポイントトゥーポイント接続を使う。

HBA (Host Bus Adapter)

PCに接続して、インターフェースを増設する拡張カードのこと。FibreChannel/SASとかの増設カードはHBAって呼ぶことが多い。

ターゲット

FibreChannel/iSCSIで、イニシエーターに対してディスク領域を提供する機器。

イニシエーター

FibreChannel/iSCSIのネットワークで、ターゲットからディスク領域の提供を受ける機器。イニシエーターは、ターゲットに接続し、提供されたディスク領域をマウントして読み書きする。

LUN (Logical Unit Number)

LUNとはSCSI接続の記憶装置において、1台の機器の中に複数の装置が存在する場合に、これを識別するための番号。
http://e-words.jp/w/LUN.html

ターゲットは、イニシエーターに提供するディスク領域を識別するための番号を付ける。この番号がLUNである。

用意したもの

Emulex LPE11000 HBA

Sun Fire T2000にもともと2枚刺さってた。

QLogic QLA2460 HBA

なんかヤフオクで2枚セットが800円だったので購入。

光ファイバー

光ファイバーの規格とかよく知らないので何も考えずテキトーに50/125μmのマルチモード、両端LCコネクタのをAmazonで購入。1500円くらい。10GbE対応らしいので将来10GbEを導入するときも安心。

Sun Fire T2000

こいつがターゲットになる。
RAM 64GBのバケモノ。CPUはSPARC。OSはSolaris。
CPU UltraSPARC T1 4cores 16threads 1GHz
RAM DDR2 Reg ECC 4GBx16=64GB
OS Solaris 11.3
HDDはシステム用に250G(2.5inch SATA 5400rpm)、データ用に1TB(2.5inch SATA 5400rpm)を積んである。どちらもサーバー用ではなく、ノートPC用のもの。
こいつの64GBのメモリーを活用するために今回の企画が始まった。

Windows PC

いたって普通のWindows PC。こいつがイニシエーターである。

ベンチマーク

HDDのアクセス速度 ZIL無効

1TB(5400rpm 2.5inch SATA)のHDDをSun Fire T2000に接続してZFSでプール作成。Sun Fire T2000とWindows PCをFibreChannel 4Gbpsで接続。ZFSのキャッシュ(ARC)のおかげでHDDとは思えないほど速い。最高。

# zpool create data c1t2d0
# zfs create -V 1024g -s data/fcdata01
# stmfadm create-lu /dev/zvol/rdsk/data/fcdata01
# stmfadm add-view [32桁の16進数]

HDDのアクセス速度 ZIL有効

上記の構成から、1GBのRAM Diskを作成し、それをZFSプールの同期書き込みキャッシュ(ZIL)として追加した。

ZILは本来はSSDを使うことを想定していて、データが消失するRAM Diskに設定するのはデータ消失のリスクが増えそう。本番運用するときはやめたほうがいいと思う。

ランダム読み込みが驚異的な速さを示す一方でシーケンシャル書き込みが遅くなった。何故。

# zpool create data c1t2d0
# ramdiskadm -a data_zil 1g
# zpool add data log /dev/ramdisk/data_zil
# zfs create -V 1024g -s data/fcdata01
# stmfadm create-lu /dev/zvol/rdsk/data/fcdata01
# stmfadm add-view [32桁の16進数]

RAM Diskのアクセス速度

# ramdiskadm -a ramdisk01 5g
# stmfadm create-lu /dev/ramdisk/ramdisk01
# stmfadm add-view [32桁の16進数]

Solaris 11をFibreChannelターゲットとして構成する

FibreChannel HBAを接続する

Sun Fire T2000のPCI Express x8スロットにEmulex LPe11000、QLogicの二枚を挿入した。

ドライバの確認

 prtpicl -v -c scsi-fcp 

コマンドで、現在のFibreChannel HBAの構成やインストールされているドライバの名前などが表示される。

# prtpicl -v -c scsi-fcp

SUNW,emlxs (scsi-fcp, 27600000703)
:Label PCIE1
:DeviceID 0
:UnitAddress 0
:vendor-id 0x10df
:device-id 0xfc20
:revision-id 0x2
:subsystem-vendor-id 0x10df
:subsystem-id 0xfc21
:class-code 0xc0400
:cache-line-size 0x10
:interrupts 00 00 00 01
:fcode-rom-offset 0xc000
:fcode-version 1.50a8
:manufacturer Emulex
:device_type scsi-fcp
:copyright Copyright (c) 2005 Emulex
:#address-cells 0x2
:#size-cells 0
:clock-frequency 0x2625a00
:compatible pci10df,fc20
:alternate-reg 01 08 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
:node_wwn 20 00 00 00 c9 57 18 09
:port_wwn 10 00 00 00 c9 57 18 09
:reg
00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 08 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 03 08 00 18 00 00 00 00 00 00 00 00 00 00
00 00 00 00 01 00 02 08 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00
:assigned-addresses
82 08 00 10 00 00 00 00 03 30 00 00 00 00 00 00 00 00 20 00 82 08 00 18 00 00 00 00 03 30 20 00 00 00 00 00 00 00 20 00 81 08 00 20 00 00 00 00 00 00 30 00 00 00
00 00 00 00 01 00 82 08 00 30 00 00 00 00 03 34 00 00 00 00 00 00 00 04 00 00
:ddi-intr-weight 0xa
:target-depth 0x200
:msi-count 0x8
:msi-mode 0x3
:ddi-forceload misc/emlxs/emlxs_fw
:fct-queue-depth 0
:target-mode 0x1
:enable-auth 0
:vport-restrict-login 0x1
:enable-npiv 0
:linkup-delay 0xa
:num-nodes 0
:pm-support 0
:adisc-support 0x1
:assign-alpa 0
:cr-count 0x1
:cr-delay 0
:ack0 0
:link-speed 0
:topology 0x6
:network-on 0x1
:ub-bufs 0x3e8
:max-xfer-size 0x3e000
:num-iocbs 0x400
:log-errors 0xffffffff
:log-warnings 0xffffffff
:log-notices 0xffffffff
:console-errors 0
:console-warnings 0
:console-notices 0
:fm-ereport-capable
:fm-errcb-capable
:fm-accchk-capable
:pm-hardware-state needs-suspend-resume
:model LPe11000-S
:devfs-path /pci@7c0/pci@0/pci@8/SUNW,emlxs@0
:driver-name emlxs
:binding-name pci10df,fc20
:bus-addr 0
:instance 1
:_class scsi-fcp
:name SUNW,emlxs
QLGC,qlc (scsi-fcp, 27600000764)
:Label PCIE2
:DeviceID 0
:UnitAddress 0
:vendor-id 0x1077
:device-id 0x2432
:revision-id 0x3
:subsystem-vendor-id 0x103c
:subsystem-id 0x7040
:class-code 0xc0400
:cache-line-size 0x10
:interrupts 00 00 00 01
:fcode-rom-offset 0xb800
:device_type scsi-fcp
:#address-cells 0x2
:#size-cells 0
:min-grant 0
:max-latency 0
:devsel-speed 0
:short-version 2.03 06/30/08
:compatible (2760000078aTBL)
| pciex1077,2432.103c.7040.3 |
| pciex1077,2432.103c.7040 |
| pciex103c,7040 |
| pciex1077,2432.3 |
| pciex1077,2432 |
| pciclass,c0400 |
:port-wwn 50 01 43 80 06 32 5a 88
:node-wwn 50 01 43 80 06 32 5a 89
:model HPAE311A
:version HPAE311A Host Adapter FCode(SPARC): 2.03 06/30/08
:manufacturer QLGC
:reg
00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 09 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 03 09 00 14 00 00 00 00 00 00 00 00 00 00
00 00 00 00 10 00
:assigned-addresses
81 09 00 10 00 00 00 00 00 00 40 00 00 00 00 00 00 00 01 00 82 09 00 14 00 00 00 00 03 40 00 00 00 00 00 00 00 00 40 00 82 09 00 30 00 00 00 00 03 44 00 00 00 00
00 00 00 04 00 00
:ddi-intr-weight 0xa
:ddi-forceload (2760000077bTBL)
| misc/qlt/qlt_fw_2400 |
| misc/qlt/qlt_fw_2500 |
| misc/qlt/qlt_fw_8100 |
| misc/qlt/qlt_fw_2031 |
| misc/qlt/qlt_fw_8301 |
:load-flash-fw 0
:intr-hs 0
:t10-dif 0
:resp-mode 0
:max-respq-size 0x2
:max-reqq-size 0x2
:intr-mode 0
:fw-dump-flags 0
:log-entries 0x1002
:extended-logging 0
:pci-max-read-request 0x800
:ddi-forceattach 0x1
:fm-ereport-capable
:fm-errcb-capable
:devfs-path /pci@7c0/pci@0/pci@9/QLGC,qlc@0
:driver-name qlt
:binding-name pciex103c,7040
:bus-addr 0
:instance 0
:_class scsi-fcp
:name QLGC,qlc

Emulex HBAのドライバとHBAのモード設定

Emulex HBAのドライバには、emlxsとlpfcの二種類あるが、今回はemlxsを使用。違いは知らない。

prtpicl -v -c scsi-fcp コマンドで出てきた、Emulex HBAの”devfs-path”,”binding-name”,”name”のうちどれか一つを指定する。

# update_drv -a -i 'pci10df,fc20' emlxs

または

# update_drv -a -i 'SUNW,emlxs' emlxs

次に、設定ファイルを変更してターゲットモードにする。

# vim /kernel/drv/emlxs.conf 
...
# target-mode:  Controls COMSTAR target mode support for an adapter port.
#
# 0 = Disables target mode support. Enables  initiator mode support.
# 1 = Enables  target mode support. Disables initiator mode support.
#
# Usage examples:
#     target-mode=1;          Sets global default for target mode
#     emlxs0-target-mode=0;   emlxs0 will be an initiator port
#     emlxs1-target-mode=1;   emlxs1 will be a target port
#
# Range:  Min:0  Max:1  Default:0
#
target-mode=1;
...

最後に、再起動する。
shutdown -i6 -g1 -y

QLogic HBAのドライバとHBAのモード設定

QLogicの場合、”qlc”ドライバーを適用したときはイニシエーターモード、”qlt”ドライバーを適用したときはターゲットモード、として動作する。今回はターゲットなので”qlt”ドライバーを適用する。

prtpicl -v -c scsi-fcp コマンドで出てきた、QLogic HBAの”devfs-path”,”binding-name”,”name”のうちどれか一つを指定する。
最初に、qlcドライバーの適用を外す。

# update_drv -d -i 'pciex103c,7040' qlc

次に、qltドライバーを適用する。

# update_drv -a -i 'pciex103c,7040' qlt

最後に、再起動する。
shutdown -i6 -g1 -y

HBAがターゲットモードとして認識されているか確認する

stmfadm list-targetコマンドで、HBAのWWNが表示されていればターゲットモードとして認識されている。

(WWNは”prtpicl -v -c scsi-fcp”のport-wwn,node-wwn欄に書いてある)

# stmfadm list-target
Target: wwn.10000000C9571809
Target: wwn.5001438006325A88

ZFSでボリュームを作る

今回はc1t2d0のHDDを一個でZFSプールを作成、そこにシンプロビジョニング有効で1TBのボリュームを作成した。

# zpool create data c1t2d0
# zfs create -V 1024g -s data/fcdata01
(-sオプション:シンプロビジョニング)

ボリュームをFibreChannelでアクセスできるようにする

# stmfadm create-lu /dev/zvol/rdsk/data/fcdata01
Logical unit created:  [32桁の16進数]
# stmfadm add-view [32桁の16進数]

Windows PCをイニシエーターとして構成する

Emulex,Qlogicの両方で試してみたが、両方とも正常に動作した。
FibreChannel HBAが正常に認識されていて、接続が正常で、ターゲットの設定が正常なら使えるはず。
今回は、特にドライバインストールも必要なく、簡単にHBAが認識された。
コントロールパネル→管理ツール→コンピューターの管理→ディスクの管理 と開くと、ターゲットで設定したディスク領域が認識されているはず。されていないならば「最新の情報に更新」「ディスクの再スキャン」を行う。
最初だとフォーマットされていないので、パーティションテーブルをGPTまたはMBRに設定する。そして、パーティションを切ってからフォーマットする。

20170707:追記

stmfadmの引数の指定はdskではなくrdskを指定するのが正しい。間違っていたので修正。

誤:# stmfadm create-lu /dev/zvol/dsk/data/fcdata01

正:# stmfadm create-lu /dev/zvol/rdsk/data/fcdata01

参考:http://www.bitshop.com/Blogs/tabid/95/EntryId/69/VirtualBox-iSCSI-Comstar-~-5k-second-disk-i-o.aspx

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中