***Qlogic QLE2462 [#p91f5cc5]

20120620 linux-3.4.3で構築 scstに3.4へのパッチがあったので

Qlogic QLE2462 PCI Express(1.0a, 1.0, 1.1対応) x4(レーン)な4Gbps * 2 Fibre Channelカード。2005年頃の製品らしい。
こいつをCentOS6.x(x64)LinuxBoxに付けてFC-Target(scst)にさせてみた。
下図のようにFC-Target(右)を作って、FC-Initiator(左)をファイバーケーブルで繋げる。
&ref(2012y12m21d_013347795.png,nolink,noborder);
&ref(2012y12m21d_014141099.png,nolink,noborder);
高速なHDDがリモートに存在している感じ。

[[(旧)QLA2340>FC/QLA2340]]

***dmesg [#od4908b0]
カードを装着後のdmesgは下記のように表示される
 QLogic Fibre Channel HBA Driver: 8.03.07.05.06.2-k
 qla2xxx 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
 qla2xxx 0000:01:00.0: Found an ISP2432, irq 16, iobase 0xffffc900057bc000
  alloc irq_desc for 27 on node -1
  alloc kstat_irqs on node -1
 qla2xxx 0000:01:00.0: irq 27 for MSI/MSI-X
 qla2xxx 0000:01:00.0: Configuring PCI space...
 qla2xxx 0000:01:00.0: setting latency timer to 64
 qla2xxx 0000:01:00.0: Configure NVRAM parameters...
 qla2xxx 0000:01:00.0: Verifying loaded RISC code...
 qla2xxx 0000:01:00.0: firmware: requesting ql2400_fw.bin
 qla2xxx 0000:01:00.0: FW: Loading via request-firmware...
 qla2xxx 0000:01:00.0: Allocated (64 KB) for EFT...
 qla2xxx 0000:01:00.0: Allocated (1285 KB) for firmware dump...
 qla2xxx 0000:01:00.0:
 QLogic Fibre Channel HBA Driver: 8.03.07.05.06.2-k
  QLogic QLE2462 - QLogic 4GB FC Dual-Port PCI-E HBA for IBM System x
  ISP2432: PCIe (2.5GT/s x4) @ 0000:01:00.0 hdma+, host#=6, fw=5.06.02 (9496)
  alloc irq_desc for 17 on node -1
  alloc kstat_irqs on node -1
 qla2xxx 0000:01:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17
PCIe第一世代は1レーンあたりデータ転送速度2.5Gbpsで、8b/10bエンコードなので250MB/sとなる。
っでそれが x4レーン だから 2.5Gbps x4 = 10Gbps(1000MB/s)。4GbpsFCが2ポートなので帯域的には十分なのかな。

***QConvergeConsole CLI [#ha0860ae]
[[Qlogic>http://www.qlogic.com/Pages/default.aspx]]さんから提供されている管理ツール。単に中古品の状態を確認したいが故にインストール。
&ref(2012y06m09d_184939003.png);
ダウンロード画面で「&color(green){''qle2462 Linux Red Hat 64-bit''};」にて検索して、QConvergeConsoleCLI(x64)を取得します。
ダウンロード時はVersion: 1.0.1 build 32であった(QConvergeConsoleCLI-1.0.01-32.x86_64.rpm.gz)
&color(red){*};「FC-FCoE DD-Kit for RHEL」はOSインストール時に使用する追加ドライバー
&color(red){*};「FC-FCoE Driver for RHEL」はカーネル再構築の時に使えるドライバー(.koファイル)
&color(red){*};「Multi-boot image for 4Gb Adapters」は最新のBIOS, FCode, EFI, Firmwareらの詰め合わせセット

これを解凍してインストール
  gzip -d QConvergeConsoleCLI-1.0.01-32.x86_64.rpm.gz
  rpm -qlp ./QConvergeConsoleCLI-1.0.01-32.x86_64.rpm   &color(green){*中身の確認};
  rpm -Uvh QConvergeConsoleCLI-1.0.01-32.x86_64.rpm
っで、状態確認
  /opt/QLogic_Corporation/QConvergeConsoleCLI/scli -i
 BIOS Version                   : 1.28
 Running Firmware Version       : 5.06.02 (9496)
 Flash BIOS Version             : 1.28
 Flash FCode Version            : 1.24
 Flash EFI Version              : 1.08
 Flash Firmware Version         : 4.00.26
な状態であった。最新のBIOS詰め合わせセット(Multi-boot image for 4Gb Adapters Version: 1.94)らを確認すると
BIOS 3.00、FCode 3.15、EFI 2.21、Firmware 5.04.01であった。いずれ更新予定
加え、PCIeとの接続状況は
 PCIe Max Bus Width             : x4
 PCIe Negotiated Width          : x4
 PCIe Max Bus Speed             : 2.5 Gbps
 PCIe Negotiated Speed          : 2.5 Gbps
と一応x4で接続しているようだ。

***SCST [#f264390e]
[[Generic SCSI Target Subsystem for Linux>http://scst.sourceforge.net]]と言うそうな。以下その中の記事を参考にしました。
    http://scst.sourceforge.net/qla2x00t-howto.html

***firmware [#t27c3fd1]
CentOSでは既にyumで/lib/firmwareに''ql2400_fw.bin''が ql2400-firmware.noarch でインストールされていた。
ftp://ftp.qlogic.com/outgoing/linux/firmwareに最新版があるようだが、このままで。

***開発環境 [#i5ec7d09]
既に yum groupinstall "Development tools" で必要な環境はそろっているが、追加で以下のものが必要らしい。
  yum install gcc ncurses-devel kernel-devel lsscsi patch subversion
このうち実際には lsscsiとncurses-devel がインストール。

***ソース取得 [#udf59261]
subversion を使って
  cd /root
  svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst
で最新ソースを取得した。scst、scstadmin、qla2x00tらが混在している。
  &color(green){*};[[sourceforgeさん>http://sourceforge.net/projects/scst/files/scst/]]から個別にも得られるが、makeの際ヘッダーファイルが足りないなどでエラーがでる。
  どうもsubversion で取得したソース向けにMakefileが書かれているのみたい。個別ファイルの取得、フォルダ名の修正らを行えば
  コンパイルできそうだが、、、

***qla2xxxカーネルモジュールの除去 [#ma843d68]
OS側でFCカードが認識しているなら、qla2xxxモジュールは既にロードされている。このモジュールを外して、
ブート時に読み込ませないようにブラックリスト /etc/modprobe.d/blacklist.conf に加えておく。
  echo blacklist qla2xxx >> /etc/modprobe.d/blacklist.conf
&color(red){*};バックアップとして /etc/modprobe.d/blacklist.con_ などファイルを残すと modprobe の際「WARNING」が発生します

&color(white,red){*これからが分かれ目みたい};
もし、
-SCSI pass-through
-the iSCSI zero-copy optimization

らを使うならカーネル再構築(scstのパッチ込)が必要で、使わないのなら取得したscstのコンパイルで作成されるカーネルモジュールの
組み込みだけで完了みたい。[SCSI pass-through]がどんなもので、何の時に必要なのか。[the iSCSI zero-copy optimization]も
同様にいつ必要なのか中身を良く知らないので判断つかない。
まぁー取敢えず「使う」を前提に進める。「使わない」のならここをスキップ

***kernel再構築 with scst-patch [#v6056e9b]
CentOS6.xのカーネルは 2.6.32 である。netatalkのappke.koを作ったようにSRPMからの再構築でもいいのだろうが、その辺には暗いので却下。
&color(green){*20120620のscstにkernel3.4向けのpatchがあったので、この時点の最新版3.4.3にて再構築};
  cd /usr/src
  wget ftp://ftp.riken.jp/Linux/kernel.org/linux/kernel/v3.x/linux-3.4.3.tar.bz2
  bzip2 -cd linux-3.4.3.tar.bz2 | tar xf -
  cd linux-3.4.3
&nbsp;&nbsp;patch -p1 < /root/scst/scst/kernel/scst_exec_req_fifo-3.4.patch   &color(green){*多少ずれるが適用成功};
&nbsp;&nbsp;cp ../kernels/`uname -r`/.config .    &color(green){*2.6.32-220.23.1.el6.x86_64 の.configを拝借};
&nbsp;&nbsp;make oldconfig     &color(green){*linux-2.6.32の.configの設定内容を踏襲。新規部分は既定値としたいので問われたらリターン};
&nbsp;&nbsp;make menuconfig    &color(green){*微調整};
&nbsp;&nbsp;&nbsp;&nbsp;&color(white,blue){[General setup]->[Enable deprecated sysfs features to support old userspace tools]};を選択
&nbsp;&nbsp;&nbsp;&nbsp;&color(white,blue){[Processor type and features]->[Processor family]->[Core 2/newer Xeon]};を選択
&nbsp;&nbsp;vi Makefile
&nbsp;&nbsp;&nbsp;&nbsp;&color(white,blue){EXTRAVERSION =-scst}; &color(green){*目印として};
&nbsp;&nbsp;time (make clean; make bzImage; make modules; make modules_install; make install) 2>&1 | tee kernel.out  &color(green){*紅茶タイム開始};
終わったら&color(white,red){再起動};を実施して、このカーネルで起動させます。
/boot/grub/grub.conf を調整して再起動さも構いません。

&color(white,red){*スキップ区間終了};

***scstカーネルモジュール [#fc9084f2]
subversion で取得したソースのコンパイルモードを「release」にします。デバックモードが標準らしい。
&nbsp;&nbsp;cd /root/scst
&nbsp;&nbsp;make 2release
その後にscstのフォルダに移り、scstのカーネルモジュールを作成します。
&nbsp;&nbsp;cd scst/src
&nbsp;&nbsp;&nbsp;&nbsp;&color(white,green){前項目「kernel再構築 with scst-patch」をスキップしたなら、追加で};
&nbsp;&nbsp;&nbsp;&nbsp;&color(green){下記コンパイル作業の前に一部ソースの修正が必須です};
&nbsp;&nbsp;&nbsp;&nbsp;&color(green){内容:dev_handlers/scst_vdisk.cの622と623行をコメントアウト};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if (virt_dev->wt_flag && !virt_dev->nv_cache)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;open_flags |= O_DSYNC;
&nbsp;&nbsp;&nbsp;&nbsp;&color(white,green){ここまで};
&nbsp;&nbsp;make all
&nbsp;&nbsp;make install
これで/lib/modules/`uname -r`/extraにscst.ko、/lib/modules/`uname -r`/extra/dev_handlersに
各種関連scstモジュール(.koファイル)がインストールされます。
-scst.ko - SCST itself.
-scst_disk.ko - device handler for disks (type 0).
-scst_tape.ko - device handler for tapes (type 1).
-scst_processor.ko - device handler for processors (type 3).
-scst_cdrom.ko - device handler for CDROMs (type 5).
-scst_modisk.ko - device handler for MO disks (type 7).
-scst_changer.ko - device handler for medium changers (type 8).
-scst_raid.ko - device handler for storage array controller (e.g. raid) (type C).
-scst_vdisk.ko - device handler for virtual disks (file, device or ISO CD image)..
-scst_user.ko - user space device handler.

次に、同じくカーネルモジュールの''QLogic target driver''を作成します
&nbsp;&nbsp;cd /root/scst
&nbsp;&nbsp;BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y \
&nbsp;&nbsp;&nbsp;&nbsp;make -s -C qla2x00t/qla2x00-target install
&color(green){*実態は make BUILD_2X_MODULE=y CONFIG_SCSI_QLA2XXX_TARGET=y \};
&nbsp;&nbsp;&color(green){SUBDIRS=/root/scst/qla2x00t/qla2x00-target/.. -C /root/scst/qla2x00t/qla2x00-target/.. all};
っで、つまりは&color(green){ make BUILD_2X_MODULE=y CONFIG_SCSI_QLA2XXX_TARGET=y \};
&nbsp;&nbsp;&color(green){SUBDIRS=/root/scst/qla2x00t -C /root/scst/qla2x00t all};と同義であって、
それで、引き続き&color(green){make -C /lib/modules/3.2.0-scst01/build SUBDIRS=/root/scst/qla2x00t BUILD_INI=m};を実行している
ちなみに&color(green){/lib/modules/3.2.0-scst01/build};は&color(green){/usr/src/linux-3.2};である。
 /lib/modules/3.2.0-scst01/build -> /usr/src/linux-3.2
これで/lib/modules/`uname -r`/extraに qla2x00tgt.ko と qla2xxx_scst.ko がインストールされます。
&color(red){*};くどくど書いてるが、ここでコンパイルエラーが発生して原因が全く分からない時期があったので、メモとして。

***scst関連プログラムのインストール [#ee2a1810]
&nbsp;&nbsp;cd /root/scst/scstadmin
&nbsp;&nbsp;make; make install
/usr/local/sbinに scstadmin が作られます。
加えて/etc/init.d/scstも作られます。自動起動もできそう。

***scstカーネルモジュールの組み込み [#hd68d0e8]
事前に
&nbsp;&nbsp;lsmod | grep "qla\|scst"
にて、既にロードされているかを確認して、されていなければ
modprobeコマンドを使って
&nbsp;&nbsp;modprobe scst
&nbsp;&nbsp;modprobe scst_disk
&nbsp;&nbsp;modprobe scst_vdisk
&nbsp;&nbsp;modprobe scst_user
&nbsp;&nbsp;modprobe qla2x00tgt
&nbsp;&nbsp;modprobe qla2xxx_scst 
にて行う。
&nbsp;&nbsp;&color(red){*};取り外しは rmmod scst とか。

***ブート用RAMdiskの作成 [#e3defc7b]
blacklist.confとqla2xxx_scstが入ったimgを作成します。
&nbsp;&nbsp;mv  /boot/initramfs-`uname -r`.img /boot/initramfs-`uname -r`.im_.bk
&nbsp;&nbsp;mkinitrd -f /boot/initramfs-$(uname -r).img $(uname -r)
もしくは
&nbsp;&nbsp;/sbin/dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
こっちのdracutの方がinitramfsファイルのサイズは小さく作れます。

&color(red){*};zcat /boot/initramfs-3.2.19.img | cpio -i -c にて何がimgに入っているかを確認できます。
&color(green){ここで再起動して、qla2xxxxが抜けてqla2xxx_scstに代わったことを確認します};


**SCST設定 [#e21aa1b4]
iSCSIのtgtに似ています。まず定義ファイルのテンプレートを確認
&nbsp;&nbsp;scstadmin -write_config /etc/scst.conf
&color(red){*};scst関連のモジュールが入っていないとエラーになります。
/etc/scst.confの中身:
 # Automatically generated by SCST Configurator v3.0.0-pre1.
 TARGET_DRIVER qla2x00t {
        TARGET 21:00:00:1b:32:81:49:f7 {
                HW_TARGET
                cpu_mask ff
                enabled 0
        }
        TARGET 21:01:00:1b:32:a1:49:f7 {
                HW_TARGET
                cpu_mask ff
                enabled 0
        }
 }
scstadminでFCとして供するディスクやファイルを定義するとこのファイルに設定内容が書かれる。
っで、FCのデバイスは、
&nbsp;&nbsp;''ファイル''(dd if=/dev/zero of=/mnt/fc/disk01.img bs=1024k count=512)  &color(green){*大体500MB};
と
&nbsp;&nbsp;''パーティション''(/dev/sdb1)
の2つを設定してみます。

まずはデバイスを定義します
ファイル:
&nbsp;scstadmin -open_dev disk01 -handler ''vdisk_fileio'' -attributes filename=/mnt/fc/hdd.img
&nbsp;&nbsp;&nbsp;&nbsp;Collecting current configuration: done.
&nbsp;&nbsp;&nbsp;&nbsp;-> Making requested changes.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Opening device 'DISK01' using handler 'vdisk_fileio': done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Done.
&nbsp;&nbsp;&nbsp;&nbsp;All done.

パーティション:
&nbsp;scstadmin -open_dev disk02 -handler ''vdisk_blockio'' -attributes filename=/dev/sdb1
&nbsp;&nbsp;&nbsp;&nbsp;Collecting current configuration: done.
&nbsp;&nbsp;&nbsp;&nbsp;-> Making requested changes.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Opening device 'disk02' using handler 'vdisk_blockio': done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Done.
&nbsp;&nbsp;&nbsp;&nbsp;All done.

使えるhandlerは、scstadmin -list_handlerにて一覧が取得できます。
 [root@c ~]# scstadmin -list_handler
 Collecting current configuration: done.
        Handler
        -------------
        scst_user
        dev_disk_perf
        vcdrom
        dev_disk
        vdisk_fileio
        vdisk_blockio
        vdisk_nullio
 All done.
 [root@c ~]#
加え、各handlerで使用可能な属性attributesは、scstadmin -list_hnd_attr <handler>で取得可能です
 [root@c7 ~]# scstadmin -list_hnd_attr vdisk_blockio
 Collecting current configuration: done.
  Attribute &#160; &#160; Value &#160; &#160; Writable &#160; &#160; &#160;KEY
  -----------------------------------------
  (none)
  Device CREATE attributes available
  ----------------------------------
  blocksize
  write_through
  rotational
  nv_cache
  thin_provisioned
  filename
  removable
  read_only
 All done.
 [root@c7 ~]#
複数の属性値を持たせたい場合は「-attributes filename=/dev/sdb1,blocksize=1024,nv_cache=1,removable=0」とで指定します。
作ったデバイスを削除するには
&nbsp;&nbsp;scstadmin -close_dev disk01 -handler ''vdisk_fileio''
&nbsp;&nbsp;scstadmin -close_dev disk02 -handler ''vdisk_blockio''
とします。

作ったこの2つのデバイスを1つのターゲットにぶら下げます。
ファイル:
&nbsp;scstadmin -add_lun ''0'' -driver qla2x00t -target 21:00:00:1b:32:81:49:f7 -device disk01
&nbsp;&nbsp;&nbsp;&nbsp;Collecting current configuration: done.
&nbsp;&nbsp;&nbsp;&nbsp;-> Making requested changes.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Adding device 'disk01' at LUN 0 to driver/target 'qla2x00t/21:00:00:1b:32:81:49:f7': done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Issuing LIP on fibre channel driver/target 'qla2x00t/21:00:00:1b:32:81:49:f7' (host6): done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Done.
&nbsp;&nbsp;&nbsp;&nbsp;All done.

パーティション:
&nbsp;scstadmin -add_lun ''1'' -driver qla2x00t -target 21:00:00:1b:32:81:49:f7 -device disk02
&nbsp;&nbsp;&nbsp;&nbsp;Collecting current configuration: done.
&nbsp;&nbsp;&nbsp;&nbsp;-> Making requested changes.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Adding device 'disk02' at LUN 1 to driver/target 'qla2x00t/21:00:00:1b:32:81:49:f7': done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Issuing LIP on fibre channel driver/target 'qla2x00t/21:00:00:1b:32:81:49:f7' (host6): done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Done.
&nbsp;&nbsp;&nbsp;&nbsp;All done.

連携を解除するには
scstadmin -add_lun 0 -driver qla2x00t -target 21:00:00:1b:32:81:49:f7 -device disk01
scstadmin -add_lun 1 -driver qla2x00t -target 21:00:00:1b:32:81:49:f7 -device disk02
とする。

他(デバイス/ターゲット)のグループを作成するなどがあるみたいだが、どのような状況でそれが必要になるのか
分からないので未着手。マルチパスI/Oという言葉が闊歩するお話なのかな?

っで、デバイスとターゲットを繋げたので、ここで公開。
&nbsp;scstadmin -enable_target 21:00:00:1b:32:81:49:f7 -driver qla2x00t
&nbsp;&nbsp;&nbsp;&nbsp;Collecting current configuration: done.
&nbsp;&nbsp;&nbsp;&nbsp;-> Making requested changes.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Enabling driver/target 'qla2x00t/21:00:00:1b:32:81:49:f7': done.
&nbsp;&nbsp;&nbsp;&nbsp;        -> Done.
&nbsp;&nbsp;&nbsp;&nbsp;All done.
簡単に
echo "1" > /sys/kernel/scst_tgt/targets/qla2x00t/21:00:00:1b:32:81:49:f7/enabled
でもいいらしい。

停止するには
scstadmin -disable_target 21:00:00:1b:32:81:49:f7 -driver qla2x00t

っで、再度ここで/etc/scst.confを書き出して、/etc/init.d/scstを有効にすれば、再起動時に
自動的にFC-Targetが運用されることになる。
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS