2012年12月8日土曜日

iSCSIパケットをWireSharkで見てみる

VMware ESXiサーバからiSCSI経由のストレージが見えなくなる現象が発生していたので、WireSharekでパケットを取り中身を確認してみました。

iSCSIで接続されているストレージは10Gイーサで接続されているので、

正直パケットがちゃんと取れるのか不安なところでしたが、、、1Gイーサにミラーリングして無理やり取ってみました。

http://www.ietf.org/rfc/rfc3720.txt のサイトでiSCSIコマンドのコードを確認すると以下のようになっています。


Some of the status codes defined in [SAM2] are:


0x00 GOOD
0x02 CHECK CONDITION
0x08 BUSY
0x18 RESERVATION CONFLICT
0x28 TASK SET FULL
0x30 ACA ACTIVE
0x40 TASK ABORTED


取ったパケットの量は当然膨大なので、フィルタ機能でソートをかけないと見れたものではありません。。

上記のコードでフィルタをかけてみます。

ストレージが見えなくなるということは、SCSI Reservationが発生しているのだろうということで、コード 0x18 でフィルタをかけてみます。

フィルタの箇所で、iscsi.scsiresponse.status == 0x18 と入力すれば、 SCSI Reservation conflict が発生している箇所だけ抜き出せます。







2200 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Write(10)) (Reservation Conflict)
2201 10.1.4.200 10.1.4.1 iSCSI SCSI: Reserve(6) LUN: 0x03
2202 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Reserve(6)) (Reservation Conflict)
2203 10.1.4.200 10.1.4.1 iSCSI SCSI: Reserve(6) LUN: 0x03

というように、LUN の番号が確認できるので、どのディスクで Conflict が発生しているか確認できます。

iscsi.opcode == 0x21 でフィルタをかけると以下のようにSCSI Reserve して書き込みして、 Release する一連の動きが確認できます。

フィルタをすると、 Reserve なしで Write のみのパケットも多数あります。

Conflictが多発している状態では、このReseve Good 状態をみんな目指して競合状態になっているようですね。。

そもそもなんでなんだ??という話ですが。

ネットでいろいろ調べると、スペックだったり、ストレージのFirmwareをアップデートしてなおったりと色々なようです。


下の例は、Wiresharkから抜き取ったもの。

一番左から、パケット番号、取得開始,経過時間、ソースアドレス、デスティネーションアドレス、パケット種別、パケットの詳細の内容です。



1142 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Reserve(6)) (Good)


1146 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Write(10)) (Good)


1148 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Release(6)) (Good)


11114 10.1.4.200 10.1.4.1 iSCSI SCSI: Response LUN: 0x03 (Write(10)) (Good)


Reservationをかけにいって、Reserve Good ,
書き込みをして Write Good ,
その後解放 Release Good でGoodづくめです。