Protoss

千金散尽还复来,莫使金樽空对月


« 用kmdb调试系统panic一例 | Main
星期四 十一月 20, 2008

NPort ID Virtualization

What is NPort ID Virtulation
N_Port ID Virtualization (NPIV) is a technology that allows one physical HBA to login multiple times to a switch, with different WWN.
This is useful especially for virtualized server environments, such as xVM, LDom or VMWare.
By using virtual N Ports for each virtual server, the administrator can use traditional zoning and LUN masking techniques for SAN management.
However, it can also be useful for non xVM environment. In this way, one application could be given its own WWN.
A complimentary project is to do quality of service for the different NPIV ports.
This would allow one physical port to be fairly shared among devices.

Why use NPIV
1. Leverage Existing Fabric tools for storage management. For example: switch zoning, lun masking based on WWN
2. Broken HBA - no problem, replace HBA, and use the old WWN in the new HBA
3. Migrate virtual Severs from one physical server to another, zoning just works, because WWN follows virtual server. Currently, xVM must use open zoning, or at least zoning which includes all HBAs.
4. QOS. Use tools to segregate traffic based on WWN. Another implementation is to do per virtual port throttling - guarantee certain bandwidth to a certain port. This could be very useful in some environments, for example if a ISP sells a "virtual server"
5. Why do we need to access at SCSI layer This is important, because today xVM does not support SCSI access; in particular there is no easy way to use tape devices.

Hardware Support
Emulex : 4 Gb
Qlogic : 4 Gb, some 2 Gb
Brocade, Cisco, McData switches with recent firmware

How to use
You can use new user command fcadm to configure npiv port
# fcadm
Usage:  fcadm -?,-V,--help
Usage:  fcadm create-npiv-port [-?]
Usage:  fcadm delete-npiv-port [-?]
Usage:  fcadm hba-port [-?]
Usage:  fcadm remote-port [-?]
Usage:  fcadm create-port-list [-?]
For more information, please see fcadm(1M)

1. create a virtual port with random WWN
First we need check if the HBA card supports NPIV feature, we cann't create virtual port on a HBA card without supporting NPIV.
HBA port information shows "NPIV Not Supported" if it does not support NPIV,
otherwise it will show the maximum number of npiv ports it can support.

show physical ports on this system
bash-3.2# luxadm -e port            
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,emlxs@1/fp@0,0:devctl    CONNECTED
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@0,0:devctl      CONNECTED

show physical ports info on this system
bash-3.2# fcadm hba-port
HBA Port WWN: 10000000c96dff32
        Port Mode: Initiator
        Port ID: 20a00
        OS Device Name: /dev/cfg/c4
        Manufacturer: Emulex
        Model: LP11002-S
        Firmware Version: 2.72a2 (B3F2.72A2)
        FCode/BIOS Version: 1.50a9
        Serial Number: 0999BG0-07460001HN
        Driver Name: emlxs
        Driver Version: 2.31j (2008.07.22.16.03)
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 2Gb
        Node WWN: 20000000c96dff32
        NPIV Not Supported
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:

show physical ports attach point link to the devices path
bash-3.2# ls -l /dev/cfg/c3
lrwxrwxrwx   1 root     root          62 Sep  5 11:53 /dev/cfg/c3 -> ../../devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@0,0:fc
bash-3.2# ls -l /dev/cfg/c4
lrwxrwxrwx   1 root     root          64 Sep  5 11:53 /dev/cfg/c4 -> ../../devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,emlxs@1/fp@0,0:fc

create a virtual port with random WWN (no WWN assigned)
bash-3.2# fcadm  create-npiv-port 210000e08b84e3ea
bash-3.2# fcadm hba-port
HBA Port WWN: 10000000c96dff32
        Port Mode: Initiator
        Port ID: 20a00
        OS Device Name: /dev/cfg/c4
        Manufacturer: Emulex
        Model: LP11002-S
        Firmware Version: 2.72a2 (B3F2.72A2)
        FCode/BIOS Version: 1.50a9
        Serial Number: 0999BG0-07460001HN
        Driver Name: emlxs
        Driver Version: 2.31j (2008.07.22.16.03)
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 2Gb
        Node WWN: 20000000c96dff32
        NPIV Not Supported
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:
          Virtual Port1:
                Node WWN: c0007d5dc67c75f9
                Port WWN: c0007d5dc67c75f8

show new created virtual port info
bash-3.2# fcadm hba-port c0007d5dc67c75f8
HBA Port WWN: c0007d5dc67c75f8
        Port Mode: Initiator
        Port ID: 10301
        OS Device Name: /dev/cfg/c6
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: c0007d5dc67c75f9
        NPIV Not Supported
bash-3.2# luxadm -e port
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,emlxs@1/fp@0,0:devctl    CONNECTED
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@0,0:devctl      CONNECTED
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@1,0:devctl      CONNECTED
bash-3.2# ls -l /dev/cfg/c6
lrwxrwxrwx   1 root     root          62 Sep  5 14:18 /dev/cfg/c6 -> ../../devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@1,0:fc

2. create a virtual port with assigned WWN
bash-3.2# fcadm  create-npiv-port -p 1000000000000021 -n 1000000000000020 210000e08b84e3ea
bash-3.2# fcadm hba-port 210000e08b84e3ea
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:
          Virtual Port1:
                Node WWN: 1000000000000020
                Port WWN: 1000000000000021

3. delete a virtual port
bash-3.2# fcadm hba-port 210000e08b84e3ea
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:
          Virtual Port1:
                Node WWN: c0007d5dc67c75f9
                Port WWN: c0007d5dc67c75f8
bash-3.2# fcadm delete-npiv-port -p c0007d5dc67c75f8 210000e08b84e3ea
bash-3.2# fcadm hba-port 210000e08b84e3ea
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:
bash-3.2# luxadm -e port
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,emlxs@1/fp@0,0:devctl    CONNECTED
/devices/pci@7c0/pci@0/pci@1/pci@0,2/SUNW,qlc@2/fp@0,0:devctl      CONNECTED

NPIV and Sun xVM Server
Generally, and for most efficient operation, xVM requires device drivers to be modified to support xVM.
Device drivers operate either in the guest domain (called DOMU) or the device driver domain (usually DOM0).
Device drivers communicate between DOMU and DOM0 via descriptor rings.
These rings, or circular queues, are similar to what device drivers traditionally use to access hardware.
It's important to note that there is no way to directly call between DOM0 and DOMU.
The layer we're choosing is NPIV implemented entirely in DOM0.
The advantage is that it exposes a SCSI interface to DOMU, so devices such as tape can be used.
Issues (only cover NPIV in DOM0) DOMU does not have visibility into FC layer - hence no fcinfo, luxadm, cfgadm. However, DOM0 would have all this information.
1. Multipathing is simpler. All multipathing is done by Solaris DOM0. Could potentially be a negative, if customer wants to use a device for which Solaris does not support multipathing.
2. FCIP maybe is more complicated - have to interact with xVM networking?
3. Code should be simpler - no complicated interface. No need for agreement with other xVM operating systems on interface. Also, Leadville driver is identical between xVM and non xVM implementations. See

npiv&xVM

How to play it with xVM
For xVM supported NPIV, we use virsh to attach a LUN of FC target to the guest domain as a disk.

Attach a LUN of FC target to the guest domain.
virsh attach-disk <domian-name> <npiv:physical port wwn/virtual port wwn/array port wwn/LUN number> <target>
On Dom0 run
bash-3.2# virsh attach-disk 4632dom  npiv:210000e08b84e3ea/1000000000000020/20030003ba13f3fa/1 5
bash-3.2# fcadm hba-port 210000e08b84e3ea
HBA Port WWN: 210000e08b84e3ea
        Port Mode: Initiator
        Port ID: 10300
        OS Device Name: /dev/cfg/c3
        Manufacturer: QLogic Corp.
        Model: 375-3294-01
        Firmware Version: 04.04.01
        FCode/BIOS Version:  BIOS: 1.4; fcode: 1.11; EFI: 1.0;
        Serial Number: 0402F00-0549112906
        Driver Name: qlc
        Driver Version: 20080617-2.30
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 200000e08b84e3ea
        Max NPIV Ports: 63
        NPIV port list:
          Virtual Port1:
                Node WWN: 1000000000000020
                Port WWN: 1000000000000021
On Domain 4632dom run format, you can find new LUNs attached to this domain
bash-3.2# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c0d5 <DEFAULT cyl 1024 alt 0 hd 128 sec 32>
          /xpvd/xdf@5
       1. c0t0d0 <DEFAULT cyl 2559 alt 0 hd 128 sec 32>
          /xpvd/xdf@51712
Specify disk (enter its number):

Detach a LUN of FC target to the guest domain.
bash-3.2# virsh detach-disk 4632dom 5

Enjoy it :)

评论:

祝贺!

看来你们使用了最简单,最有效的一种方式。不知有没有在尝试使用最新的pvSCSI来实现?

从设计来看,pvSCSI应该有一定的性能优势。

发表于 zhigang 在 2008年11月27日, 07:43 下午 CST #

make the system notify me in case you have some response ;-)

发表于 zhigang 在 2008年11月27日, 07:53 下午 CST #

Hi ZhiGang, 谢谢你的关注.
我们在做这个PROJECT的时候也考虑过采用scsi split driver的方式来实现,但是因为资源有限,所以最后实现利用了SUN xVM现有的Disk split driver.现在的实现方式与pvSCSI就是在不同的层面做virtulization, pvSCSI是在SCSI层做Virtulization, 而且可以支持Tape(目前我们还不能支持Tape),性能应该也会更好一些. 不过我们目前还没有考虑采用pvSCSI的方式来实现, 因为新的IOV项目正在研发中,此技术可以让guest OS可以直接进行设备访问从而抛开软件的SCSI Passthrough, ,性能也可以得到更大的提升,如果有兴趣你可以到http://www.pcisig.com了解I/O Virtulization的相关文档

发表于 Allan Ou 在 2008年11月28日, 04:48 下午 CST #

使用SR-IOV是有一些前提条件的:

* Hardware support
* OS support
* Hypervisor support
* Management tool support

但是也有很多好处:

* performance
* no need to implement pv driver (reuse native HBA driver)

Sun生产所有的东西,有机会不受任何限制的第一个实现这样一个系统;但是需要自己去实现所有的方面。哪一方面拖了后腿都要命。

还好,SUN选择开源,尽量减少重复工作。

你公开的代码和文档对我使用的OS(Linux)和虚拟话工具的实现都很有帮助,在此表示感谢。

发表于 zhigang 在 2008年12月12日, 07:37 下午 CST #

I created a page on xenwiki: http://wiki.xensource.com/xenwiki/XenNPIV

if you have some interest, you can contribute by make correction & add contents.

发表于 zhigang 在 2008年12月12日, 07:41 下午 CST #

发表一条评论:
  • HTML语法: 禁用

今日点击: 131