AIX

 View Only



LinkedIn Share on LinkedIn

Performance improvements for IBM AIX FC and FCoE device driver stacks

By YADAGIRI RAJABOINA posted Wed October 04, 2023 05:48 AM

  

                        Performance improvements for IBM AIX FC and FCoE device driver stacks

Note: This is a re-post of article that was published on IBM developerworks on January 06, 2017.

Contributors: Yadagiri Rajaboina , Kiran K Anumalasetty,  Vinod Kumar Boddukuri, Prashantha Subbarao

Introduction

This article describes performance improvements for IBM® AIX® Fibre Channel (FC) / Fibre Channel over Ethernet (FCoE) device drivers stack for 16 Gb FC (Feature Code: EN0A) and10 Gb FCoE (Feature Code: EN0H) HBAs. The AIX FC driver stack includes an initiator mode Small Computer System Interface (SCSI) protocol driver and an adapter driver. The existing AIX FC adapter driver maintains a SCSI I/O queue for submitting all I/O requests to the FC HBA. Scaling issues have been observed with the existing FC stack with extreme I/O transactions per second (IOPS) and small I/O sizes. This is due to I/O serialization through a single I/O queue.

To improve the number of IOPS on smaller block size I/O requests, the multiqueue functionality is introduced with the 16 Gb FC or 10 Gb FCoE adapter driver starting from:            

    • AIX releases – AIX 7.2 TL01 SP1, AIX 7.1 TL04 SP3 and AIX 6.1 TL09 SP8 
    • VIOS release – VIOS 2.2.4.30 and VIOS 2.2.5.0

Figure 1 depicts how I/O is parallelized on multiple I/O queues with the improvements discussed in this article. 

Figure 1: A traditional FC driver stack versus an improved FC driver stack

Configuration details

The following configuration is used for the performance analysis of  random read operations with a block size of 4 KB

·       IBM Power® System E870 server with 64 processors at a frequency of 4.350 GHz

·       IBM FlashSystem® 900 with eight storage FC ports

·     With FC:        

  • PCIe2 two-port 16 Gb FC adapter (Feature Code: EN0A) 
  • Brocade 16 Gb FC Switch: 2498-B24 

·    With FCoE:    

  •  PCIe2 10 Gb four-port FCoE adapter (Feature Code: EN0H)
  •  Brocade 10 Gb FCoE Switch

·   With Native (stand-alone) AIX configuration:

  • Operating system:  AIX 7.2 TL01 SP1
  •  Number of processors: 32

·   With N_ Port ID Virtualization (NPIV) configuration:

  • VIOS release: 2.2.5.0
  • NPIV client OS: AIX 7.2 TL01 SP1
  • Number of processors on VIOS host: 32
  • Number of processors on each NPIV client: 4

Implementation details

To support multiple I/O queue feature, a new Object Data Manager (ODM) attribute, num_io_queues, is introduced for FC/FCoE devices (fcs) to indicate the number of I/O queues configured in the FC adapter driver. Each I/O queue is associated with a hardware work queue in the FC HBA. All the I/O requests issued to a particular hdisk will be mapped to the same SCSI I/O queue. Each SCSI I/O queue can service multiple hdisks, However, I/O request to a given hdisk cannot be distributed to multiple SCSI I/O queues.

 Example: For a 16 Gb FC HBA, the ODM stanza for num_io_queues attribute is shown below:

# lsdev | grep fcs

fcs0       Available 00-00       PCIe2 2-Port 16Gb FC Adapter (df1000e21410f103)

fcs1       Available 00-01       PCIe2 2-Port 16Gb FC Adapter (df1000e21410f103)

             

# odmget -q name=fcs0 CuDv

CuDv:

        name = "fcs0"

        status = 1

        chgstatus = 0

        ddins = "pci/emfcdd"

        location = "00-00"

        parent = "pci0"

        connwhere = "0"

        PdDvLn = "adapter/pciex/df1000e21410f10"

#

# odmget -q uniquetype="adapter/pciex/df1000e21410f10" PdAt | grep -p num_io_queues

PdAt:

        uniquetype = "adapter/pciex/df1000e21410f10"

        attribute = "num_io_queues"

        deflt = "8"

        values = "1-16,1"

        width = ""

        type = "R"

        generic = "DU"

        rep = "nr"

        nls_index = 67

#

The value of this attribute can be changed using the chdev command or the System Management Interface Tool (SMIT) interface. The possible values are:

# lsattr -l fcs0 -a num_io_queues -R

1...16 (+1)

To enable multiple I/O queues, the HBA’s direct memory access (DMA) resources should be sufficient to distribute I/O requests across multiple queues.  The existing ODM attribute, io_dma, controls the amount of I/O DMA region that the adapter driver requests while configuring the HBA.

Default ODM attribute values

This section provides the default values for the ODM attributes related to the multiple I/O queue feature.

For AIX 7.2 TL01 SP1 and VIOS 2.2.5 releases

The default value of the num_io_queues attribute is set to 8 and to have sufficient DMA resources, the default value of the io_dma attribute is increased to 256, starting with AIX 7.2 TL01 SP1 and VIOS 2.2.5 releases.

# lsattr -El fcs0 | grep -e num_io_queues -e io_dma

io_dma                256        IO_DMA                                                         True

num_io_queues   8            Desired number of IO queues               True

For AIX 7.1 TL04 SP3, AIX 6.1 TL09 SP8 and VIOS 2.2.4.30 releases

The default value of the num_io_queues attribute is set to 1 and io_dma is set to 64 for the AIX 7.1 TL04 SP3, AIX 6.1 TL09 SP8 and VIOS 2.2.4.30 releases.

# lsattr -El fcs0 | grep -e num_io_queues -e io_dma

io_dma                64          IO_DMA                                                         True

num_io_queues   1            Desired number of IO queues              True

As mentioned earlier in this article, there should be sufficient DMA resources to enable support for multiple I/O queues. Therefore, the value of the io_dma attribute should be increased from 64 to 256. In case the user changes only the num_io_queues' value without increasing the io_dma value to 256, the adapter instance will be configured with a single SCSI I/O queue and the following informational error will be logged with the AIX error log.

# errpt | grep fcs0

29FA8C20   0629173616 I O fcs0           Additional FC Adapter Information

Steps for tuning the num_io_queues attributes using the chdev command:

You need to perform the following steps to tune the num_io_queues attributes using the chdev command for 16 Gb FC HBAs:

1. Unconfigure the device instance.

 #rmdev -Rl fcs0

2. Change the attribute to the required value (say 16).

# chdev -l fcs0 -a num_io_queues=16

fcs0 changed

3. Configure the device instance.

# cfgmgr -l fcs0

4. Verify if the attribute is set to the required value.

#  lsdev | grep fcs0

fcs0       Available 00-00       PCIe2 2-Port 16Gb FC Adapter (df1000e21410f103)

# lsattr -El fcs0 | grep num_io_queues

num_io_queues           16         Desired number of IO queues                        True

Performance results – random read operations with a block size of 4 KB

The following results are for AIX native [that is, physical HBAs owned by the logical partition (LPAR)] case. I/O requests are running in parallel on the

FlashSystem 900 storage targets using the default shortest_queue algorithm on the hdisk devices.

Figure 2: AIX (native) results for 16 Gb FC HBA

Figure 3: AIX (native) results for 10 Gb FCoE HBA

The following results are for the NPIV (that is, VIOS owning physical HBAs and num_io_queues tuned on VIOS) case. I/O requests are running in parallel on all the I/O paths for a given disk on each NPIV client using the default shortest_queue algorithm on the Flash System 900 storage disks.

Figure 4: NPIV results for 16 Gb FC and 10 Gb FCoE HBA

Conclusion

In native configuration, the number of IOPS for random read operations with a block size of 4KB, for a single FC HBA port case increased by approximately 2.5 times with the improved FC stack, which is a significant improvement. The achieved IOPS count of 390,000 is very close to the line speed for a single FC HBA port.

The IOPS gain for random read operations with a block size of 4 KB in the NPIV configuration is almost equivalent to that of the native configuration when the number of clients is six or more.

0 comments
41 views

Permalink