【IT168 技术】目前存储行业中很多公司都在开发与存储优化相关的产品和技术,既有优化主机端访问的方案,也有提升SAN存储性能的技术,这是一个很有潜力的领域。在这里,本文将要介绍一些能够有效提升存储性能的方法,而以往我们却经常忽视它们。
首先,排除故障
网络存储的应用环境是相当复杂的,各种不同的硬件和软件要能够顺利的实现互操作。所以,导致存储系统性能不佳的最常见的原因可能是配置错误,也可能是一个或多个组件发生故障。因此,优化存储性能的第一步就是要看看现有的存储I/O堆栈是不是有问题。
检查服务器和存储阵列的日志,看看是否有物理设备故障告警、I/O重传、路径切换以及超时等明确的提示。再试着去逐个分析故障组件,从与线缆相关的连接组件开始。收发端口以及线缆的问题不容易发现,但通常会严重的影响性能。在遭受物理冲击的时候,这些东西经常会损坏,因此,在数据中心里安装、迁移或搬走设备时要特别的小心。
1. 更新固件和驱动程序
厂商会不断的通过软件升级来修复产品中的bug并增加新功能。聪明的做法是把存储网络中所有组件的驱动程序和固件都升级到最新版本,定期做,提前测试、调试和升级。我们看到Microsoft和VMware都在积极地为其产品 — Windows和vSphere的存储部分增加新的性能增强特性,但通常我们看不到太多的宣传。比如Microsoft推出的SMB 2.0和2.1,可以明显的提升Windows文件共享的性能,尤其是在低带宽的网络环境中。还有新版的VMFS和 NTFS文件系统在性能和可扩展性方面也有改善。所以,平时要多浏览存储方面的博客和媒体,以便了解最新的相关动态。
要注意的是,并不是所有的版本升级都值得我们花费时间和精力,而且有时候升级的风险还很高。所以,首先要确保所有相关的厂商能够支持你现有的设备及配置,并且有充分的测试,绝对不能在生产系统中使用测试版代码。作为一个系统管理员,我倾向于保守一些,我会等到有其他人出了相关验证报告之后,自己才会尝试升级,以免冒险。
2.降低负载
大多数调优的方法都着眼于定位和消除存储的性能瓶颈,但是换一个角度,也许我们还应该考虑如何减少I/O负载的产生。比如,同数据库管理员一起对查询的效率和性能进行调优,就可以节省大量的查询等待时间。
所以,减少I/O负载对每个人和每个应用来说都是有好处的。
3.消除备份的瓶颈
传统的备份应用极其耗费存储资源,以每天或者一周为时间计划去备份一个大的数据卷的话,会产生大量的I/O负载。改善备份系统的性能,让备份工作在有限的时间窗口内完成已经成为数据保护流程中需要优先考虑的事情。解决备份问题的同时也有助于我们提升存储系统的整体性能。
一个有效降低备份压力的办法是使用CDP (continuous data protection)技术,很多虚拟机备份产品都使用了CDP。CDP连续的从服务器中拷贝数据,而不是在某个时间点集中执行备份操作。在虚拟机应用环境中这一点特别有用,因为传统的夜间备份模式会同时在多个服务器上产生大量的负载,从系统总线到HBA卡或者网卡,再到磁盘阵列,这样会导致存储系统的响应速度急剧下降。Microsoft和VMware也提供了一些技术,通过将备份过程中原本由操作系统执行的快照任务转交给存储设备执行,数据流不再经过服务器,大大提高了数据处理的效率。
4. 通过VAAI转移虚拟机的I/O负载
VMware发布的vSphere 4.1中包含了很多新特性,但其中最重要的一个就是VAAI(vStorage API for Array Integration)。VMware ESX利用这个新的接口程序,可以将某些I/O负载转给支持VAAI的FC或iSCSI存储系统硬件来处理。通过VAAI,hypervisor和存储阵列可以紧密且高效的集成在一起。
VAAI主要包括三个“功能”:
1. 使用高效的SCSI命令“write_same”实现精简配置,释放未使用的存储资源,增加空间利用率并降低I/O开销。
2. 将快照和镜像操作交给存储硬件来执行,最大程度降低网络、hypervisor和操作系统的I/O处理压力。
3. 提供比LUN级别粒度更细的访问控制锁,减少虚拟机之间的I/O冲突和I/O等待时间。
VAAI尽管不是直接用来提高存储性能,但实际应用效果显示hypervisor的I/O负载明显降低,而且通过SAN网络的数据流量也明显减少。业内分析师预计VMware还会在下一个vSphere版本中进一步改进VAAI,包括增加对NFS的支持。我们可以想象,Microsoft也正在为Hyper-V开发类似的集成接口。
5. 利用SIOC控制虚拟机的I/O负载
VMware vSphere的SIOC(Storage I/O Control)本质上不是一个性能加速技术,而是保证QoS(quality of service)的机制。SIOC可以增加I/O性能的可预测性。SIOC会跟踪VMFS文件系统的响应延迟,通过控制优先级较低的虚拟机的I/O流量来保证其他虚拟机的I/O性能。实际上,SIOC的作用是减少了虚拟机之间因为I/O资源争用而引起的冲突,从而提升了虚拟机的响应速度。应用程序开发人员和管理者会喜欢这个功能,虽然总体带宽保持不变,但却可以带来更好的性能表现。
${PageNumber}6. 优化服务器端
今天,采用多核处理器的服务器在CPU处理能力上是过剩的,但网卡和HBA卡通讯处理却仍然只能使用一个处理器内核。RSS(Receive-side scaling,接收端调节)技术的出现解决了这个问题,I/O卡可以将数据流分给多个CPU内核做并行处理,从而提高性能。
Hypervisors还有一个工作是对I/O进行队列排序,并且将I/O定向给相应虚拟机,这个过程使用到了Intel VMDq(virtual machine device queues)技术。VMDq允许网络适配器与Microsoft Hyper-V 或VMware ESX之类的hypervisor进行通讯,可以将发往同一个虚拟机的多个数据包集中在一起处理。
在服务器虚拟化应用环境中使用RSS和VMDq这样的技术有助于实现I/O流量的优化,而且能够产生惊人的加速效果。通过使用这些技术,Microsoft和VMware已经展示了他们的虚拟机产品在性能优化方面的有效性。
7. 使用主动多路径(Active Multipathing)技术
在服务器和存储系统之间设置多路径是保证高可用的传统方法,但在使用了高级的主动多路径技术之后,性能也会有提升。
基本的多路径软件只能提供容错功能,当发生连接丢失故障时,执行通道切换操作。而所谓的双活“dual-active”配置能够将不同的I/O负载分配给每一条链路,虽然提升了利用率,但局限是每一个连接只能走一个通道。有些存储阵列支持将多个连接绑定在一起,或者采用active-active的配置,多个链路聚合在一起,可以充分发挥多通道带宽的潜力。
新一代的多路径服务框架,比如Microsoft的MPIO和VMware的PAS,都可以通过添加存储阵列专用的plug-in插件来实现主动多路径功能。用户可以问问自己的存储供应商是否提供这样的插件,但如果它是单独收费或者需要一个特殊的企业级license,也是意料之中的事儿。
8. 部署8 Gb光纤通道
自从1Gbps的光纤通道产品出现以来,光纤通道的带宽一直是以双倍的速率在增长,不过在增长的同时仍然保持着向后兼容和可互操作的特性。将光纤通道升级到8Gbps带宽是一个加速存储I/O的最简单而且能负担得起的方法。目前,市场上8Gbps光纤交换机和HBA卡的种类非常丰富,而在价格方面与4Gbps的产品也基本没有差异。当我们需要对SAN网络进行扩展,购买新的服务器和存储阵列时,选择8Gbps而不是4Gbps的光纤通道是很自然的事情。而不久之后我们还会看到下一代的16Gbps光纤通道设备。
请记住,吞吐量(通常以字节/秒表示)并不是衡量存储性能的唯一指标,响应延迟也非常关键,通常用IOPS(I/O operations per second)或响应时间(以毫秒或微秒为单位)衡量,延迟指标可以衡量单个I/O请求被处理的速度。目前,延迟已经成为描述服务器虚拟化环境性能的关键指标。当多个虚拟服务器的流量通过一个单独的I/O端口时,该端口需要快速的处理数据包,而不只是能够处理大量的顺序数据流。
每次光纤通道产品升级,不仅仅是带宽翻倍,处理一个I/O操作的时间也会减半。因此,8Gbps光纤通道技术与原来的4Gbps技术相比,不仅仅是实现了双倍的MB/s数值,I/O请求的处理能力也增加了一倍。对服务器虚拟化应用来说,这才是真正有价值的地方。
9. 利用10 Gbps以太网
光纤通道并不是唯一一个不断升级的通道技术。以太网最近也进行了重大的升级跨入了万兆时代。随着10GbE以太网越来越普及,用户也逐渐能够承受相关的成本。但是,10GbE的存储阵列的发展速度要落后于万兆网卡和交换机。如果能够将现在的iSCSI或NAS(SMB和NFS)协议存储环境迁移到10GbE以太网,那么总体性能会有大幅度的提升。
如果没有端到端的10GbE以太网,那么替代方案可以选择在1GbE的链路上使用LACP(link aggregation control protocol)聚合。用这种方法,我们能够创建一条N个Gbps的带宽聚合通道,在主机、交换机和存储等一系列千兆设备之间实现互联。在没有10GbE以太网的时候,这个方案能够解决千兆以太网速度太慢的问题。
最新出现的FCoE (Fibre Channel over Ethernet)技术将光纤通道和以太网这两个世界联系到了一起,并且承诺有更好的性能和更大的灵活性。尽管有一种声音认为FCoE使用的10GbE以太网通道的带宽只比8Gbps光纤通道快了20%,但数据吞吐量的差距却惊人地达到了50%,这都要归功于更加有效编码方式。FCoE还承诺可以减少I/O延迟,而传统的光纤通道SAN或存储阵列要通过使用桥接器才能做到这一点。以长远的眼光看,FCoE可以提升存储性能,而且现在我们已经能够使用它了。
10. 增加缓存
虽然最快速的I/O请求永远不会出现,但作为一个提高性能的手段,使用缓存是最直接的方法。在I/O通路的各个环节都可以使用缓存,通过把最近频繁使用的信息驻留在缓存中,设备可以明显的提高响应速度。这不是什么新技术,但好消息是随着价格的下降,我们现在能用得起更大容量的NAND flash memory。
${PageNumber}目前,我们基本上可以看到三种类型的缓存:
1.主机端缓存。将NVRAM或者NAND flash放在服务器中,常见的是高性能PCI Express卡,仅在服务器内部使用,I/O不经过网络。
2.放在网络中的专用缓存装置,可以帮助存储阵列降低负载。缓存装置可以同时响应多台服务器的请求,但在发生电力故障时,可用性以及数据一致性是个需要考虑的问题。
3.存储阵列内置的缓存,以及常见的分级存储解决方案。此类设备包括NetApp的Flash Cache cards,以前叫 Performance Acceleration Module或 PAM; EMC的 Fully Automated Storage Tiering (FAST) 以及Hitachi Data System的 Dynamic Tiering (DT)等。
没有“银弹”
改善存储性能有许多的选择,但不会有功能较多钥匙。尽管存储厂商马上就会反驳说他们的最新技术(从分级存储到FCoE)能够解决数据存储性能的问题,但没有人会傻到只去关注某一个领域。最有效的性能优化策略应该从分析现有系统的瓶颈开始,最终制定相应的计划去解决它们。
并非所有的方法都有效
除了知道应该怎样保证存储网络的性能之外,我们还需要了解一些对改善性能不那么有效的方法。通过测试我们可以看到一些有趣的结果:比如在以太网上打开Jumbo Frame,通常不会看到性能有明显的改善。
另一个常见的问题是如何看待不同存储协议的优点。用户通常会认为光纤通道就是比iSCSI、NFS或SMB速度快。其实这个答案并不一定正确,要看实施和配置的具体环境。一般情况下,采用同样的硬件架构,不同协议表现出的性能基本在同一水平,因此,性能与协议本身没有太大关系。
还有一个要注意的事情是关于在虚拟化环境中使用裸金属架构技术,包括paravirtualized driver驱动、直接direct I/O(比如VMDirectPath)以及RDM(raw device mapping),都不会带来太多的性能提升,而且还会影响VMotion等功能的使用。