本文介绍了针对16 Gb FC(功能代码:EN0A)和10 Gb FCoE(功能代码:EN0H)HBA的IBM®AIX®光纤通道(FC)/以太网光纤通道(FCoE)设备驱动程序堆栈的性能改进。 AIX FC驱动程序堆栈包括启动程序模式小型计算机系统接口(SCSI)协议驱动程序和适配器驱动程序。 现有的AIX FC适配器驱动程序维护一个SCSI I / O队列,用于将所有I / O请求提交给FC HBA。 现有的FC堆栈具有每秒最大I / O事务(IOPS)和较小I / O大小的扩展问题。 这是由于通过单个I / O队列进行的I / O序列化。
为了在较小的块大小的I / O请求上提高IOPS的数量,多队列功能与16 Gb FC或10 Gb FCoE适配器驱动程序一起引入,从以下位置开始:
AIX发行版– AIX 7.2 TL01 SP1,AIX 7.1 TL04 SP3和AIX 6.1 TL09 SP8 VIOS版本– VIOS 2.2.4.30和VIOS 2.2.5.0图1描述了如何在多个I / O队列上并行化I / O,以及本文中讨论的改进。
以下配置用于块大小为4 KB的随机读取操作的性能分析
IBMPower®System E870服务器,带有64个处理器,频率为4.350 GHz 具有八个存储FC端口的IBMFlashSystem®900: 带FC Brocade 16 Gb FC交换机:2498-B24 PCIe2两端口16 Gb FC适配器(功能代码:EN0A) 使用FCoE: PCIe2 10 Gb四端口FCoE适配器(功能代码:EN0H) Brocade 10 Gb FCoE交换机 使用本机(独立)AIX配置: 操作系统:AIX 7.2 TL01 SP1 处理器数量:32 使用N_端口ID虚拟化(NPIV)配置: VIOS版本:2.2.5.0 NPIV客户端操作系统:AIX 7.2 TL01 SP1 VIOS主机上的处理器数量:32 每个NPIV客户端上的处理器数量:4为了支持多个I / O队列功能,为FC / FCoE设备(fcs)引入了新的对象数据管理器(ODM)属性num_io_queues ,以指示在FC适配器驱动程序中配置的I / O队列数。 每个I / O队列都与FC HBA中的硬件工作队列关联。 发出到特定hdisk的所有I / O请求都将映射到相同的SCSI I / O队列。 每个SCSI I / O队列可以为多个hdisk服务,但是,给定hdisk的I / O请求不能分配给多个SCSI I / O队列。
示例:对于16 Gb FC HBA, num_io_queues的ODM节如下所示:
# 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 #可以使用chdev命令或系统管理界面工具(SMIT)界面来更改此属性的值。 可能的值为:
# lsattr -l fcs0 -a num_io_queues -R 1...16 (+1)要启用多个I / O队列,HBA的直接内存访问(DMA)资源应足以在多个队列之间分配I / O请求。 现有的ODM属性io_dma控制着适配器驱动程序在配置HBA时请求的I / O DMA区域的数量。
本部分提供与多个I / O队列功能相关的ODM属性的默认值。
所述的缺省值num_io_queues属性被设置为8,并具有足够的DMA资源,所述的缺省值io_dma属性增加到256,开始与AIX 7.2 TL01 SP1和VIOS 2.2.5版本。
# 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对于AIX 7.1 TL04 SP3,AIX 6.1 TL09 SP8和VIOS 2.2.4.30版本, num_io_queues属性的缺省值设置为1, io_dma设置为64。
# 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如本文前面所述,应该有足够的DMA资源来支持多个I / O队列。 因此, io_dma属性的值应从64增加到256。如果用户仅更改num_io_queues的值而未将io_dma值增加到256,则适配器实例将配置有单个SCSI I / O队列,并且以下信息错误将与AIX错误日志一起记录。
# errpt | grep fcs0 29FA8C20 0629173616 I O fcs0 Additional FC Adapter Information您需要执行以下步骤来使用chdev命令针对16 Gb FC HBA调整num_io_queues属性:
取消配置设备实例。 #rmdev -Rl fcs0 将属性更改为所需的值(例如16)。 # chdev -l fcs0 -a num_io_queues=16 fcs0 changed 配置设备实例。 # cfgmgr -l fcs0 验证属性是否设置为必需值。 # 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以下结果适用于AIX本机[即逻辑分区(LPAR)拥有的物理HBA]案例。 I / O请求并行使用默认的FlashSystem 900存储目标运行shortest_queue上的hdisk设备算法。
以下结果适用于NPIV(即VIOS拥有物理HBA和在VIOS上调整的num_io_queues )。 使用Flash System 900存储磁盘上的默认shortest_queue算法,每个NPIV客户端上给定磁盘的所有I / O路径上并行运行的I / O请求。
在本机配置中,使用改进的FC堆栈,对于单个FC HBA端口情况,用于块大小为4KB的随机读取操作的IOPS数量增加了约2.5倍,这是一个重大改进。 IOPS达到390,000,非常接近单个FC HBA端口的线速度。
在客户端数量为六个或更多的情况下,NPIV配置中块大小为4 KB的随机读取操作的IOPS增益几乎等同于本机配置。
翻译自: https://www.ibm.com/developerworks/aix/library/au-aix-performance-improvements-fc-fcoe-trs/index.html
相关资源:微信小程序源码-合集6.rar