GPFS文件系统分析

时间:2021-11-11 08:00:28

什么是GPFS文件系统
GPFS(General Parallel File System)是IBM公司开发的高性能集群文件系统,从1998年
开始首先应用于AIX集群,2001年后应用于Linux集群。
在集群的环境中,GPFS文件系统允许集群中所有的节点访问同一文件的数据,并提供统一的文
件存储空间。应用可以使用标准的UNIX文件系统接口访问文件的内容。GPFS支持32位和64位的应
用,经过测试的文件系统的大小为100TB。GPFS可以动态的增加或减少文件系统的容量。
GPFS提供了标准的POSIX应用开发接口,支持缓存方式的I/O(buffered I/O)、同步I/O操作(文件打
开时使用O_SYNC或O_DSYNC标示符)、核心级的异步I/O(kernel asynchronous I/O,通过使用异步I/O系统
调用实现)和直接I/O(Direct I/O,没有缓存的I/O)。直接I/O可以在文件级,使用O_DIRECT标识打开文件,
也可以在文件系统级使用dio参数挂接文件系统。
直接I/O的特点是执行I/O操作时忽略文件系统的缓存,这样可以节省处理器的消耗,避免数据从文件系
统的缓存拷贝到应用的缓存。
GPFS并行文件系统区别于其他的集群文件系统的特点是,在多个AIX、Linux节点中,为应用提供并发的、
高速的文件访问,提供突出的性能,尤其是大数据量的顺序操作,尽管典型的GPFS应用适用于多个节点,但
对单个节点也能提供有益的性能。

GPFS文件系统适用于AIX和Linux节点的异构集群
从GPFS版本2.2开始,允许集群中同时存在AIX和Linux的节点。GPFS的AIX版本和GPFS的Linux版本基于同样的源
代码,只是适应于不同的硬件环境和不同的操作系统环境。

GPFS使用共享硬盘的模式(Shared Disk Model)
GPFS使用共享硬盘的方式,可以通过多种方式实现硬盘的共享:
1)基于硬件的SAN结构,集群中的所有节点物理的连接到所有的存储
2)使用单独的软件驱动VSD(Virtual Shared Disk),对集群节点体统虚拟的共享硬盘,通过VSD调度I/O操作
3)使用NSD(Network Shared Disk),是有GPFS本身提供的,通过NSD调度I/O操作
在VSD或NSD的环境中使用GPFS,为增强GPFS的性能,建议存储和节点之间通过高速的通道互连,增加数据的带宽。

提高GPFS性能的关键点
以下GPFS的特点可以帮助GPFS文件系统取得高性能的I/O:
- 跨越多个硬盘和多个节点的条带化数据
- 高效的客户端数据缓存
- 允许管理员配置大的数据块,满足应用的特点
- 使用预读(read-ahead)和后台写(write-behind)技术
- 使用字节级(byte-range)的锁技术,提供数据的一致性要求,可以使多个应用节点并发访问同一文件

GPFS元数据(GPFS metadata)
在集群中,GPFS在所有的节点上处理元数据(metadata)。这是GPFS文件系统的架构和设计区别于其他集群
文件系统的显著特点,需要集中的元数据服务器处理文件系统的边界(fixed region)。在大量的元数据操
作下,元数据服务器将是潜在的性能瓶颈,另外,如果没有配置备份服务器,元数据服务器将变成一个单点故障。

高可靠性的GPFS
GPFS是高可靠性的文件系统,即使是在下列失败的情况下,仍可以配置为不间断的数据访问:
- 计算节点
- I/O服务器节点
- 硬盘的连接
可以配置GPFS的多个备份,即使在丢失硬盘路径,或者硬盘自身不可访问的情况下,仍可以保持操作的连续性。

另外,GPFS也可以与RAID或者其他硬件冗余的功能协同使用,提供商业的连续性(business continuity)。要
达到这一目的,需配置多个I/O服务器,当某一I/O服务器失败时,I/O请求仍可以通过备份服务器实现。

在GPFS的环境中,某一节点的硬盘连接丢失,不会影响到其他的节点,GPFS使用RSCT的功能持续的监控不同文件
模块的健康状态,当任一错误被检测到时,相应的恢复动作将自动执行。GPFS还提供了额外的日志和恢复功能,
可以维持元数据的一致性。

GPFS顺序读写的性能
建议

在配置高性能GPFS文件系统的过程中,从性能方面考虑,有几种配置和优化的方法,在考虑GPFS的配置的同时,
应当考虑应用对性能的影响。

配置硬盘
GPFS可以使用VSD或者AIX物理卷,一段时间内,VSD在一些大的集群中是一个比较好的选择,
在使用HPS(High Performance Switch)的系统中,VSD可充分利用HPS高性能的特点。VSD是建立在逻辑卷组
(Logical Volume)之上的,I/O大小是有卷组(Volume Group)的LTG(Logical Track Group)的大小决定
的。LTG的性能将影响到GPFS,比较来看,GPFS 2.2只允许128KB的LTG大小。

数据条带
在AIX环境下,GPFS顺序I/O要取得较高的性能,配置使用RAID5,可以考虑三种方式:
a.GPFS条带,每一个RAID5组成一个GPFS的逻辑盘,这是配置GPFS的最典型的方法,对大数据量顺序读写,
可以充分利用GPFS预读和延迟写(pre-fetch/wirte-behind)的功能。
b.AIX逻辑卷(Logical Volume Manager)条带,条带化的逻辑卷可以使用部分或全部的RAID5组,构成GPFS
的逻辑盘。
c.GPFS和AIX逻辑卷条带的组合。推荐使用方式a,可充分发挥GPFS的预取功能。但是,在单节点的情况下,
如果系统存在数量较多的硬盘,方式b和方式c也能提供较好的性能,可以从系统级充分发挥物理卷的并发操作。

GPFS块大小
影响GPFS文件系统顺序I/O性能的另一个重要因素是GPFS文件系统的块大小,GPFS 2.2版本支持最大块为1MB。

使用连续的数据存储块
创建GPFS文件系统时在每一个独立的逻辑盘上申请使用连续的存储块,也是影响GPFS性能的重要因素,在GPFS
后续的版本中,将是一个新的功能。相反的GPFS 2.2仍然是随机的在每一个逻辑盘上申请存储块

GPFS优化
在GPFS的参数配置中,有些可优化的参数会影响到GPFS的性能,部分可调整的参数如下:
- pagepool :GPFS缓存可申请使用的容量
- prefetchThreads:配置GPFS服务进程可使用的读写线程数,此参数配置GPFS可使用的最大并发请求数
- maxMBpS:基于I/O的响应时间,动态的调整prefetchThreads的数量
- maxBuddyBufferSize:设置最大的VSD通讯数据包大小

应用方面的建议
考虑GPFS的性能时,应当考虑到应用方面的影响,有些I/O比较敏感的应用使用单个线程执行大数据量
的顺序读写操作,通常情况下,GPFS能很好的执行读或者写系统调用,GPFS会使用多个线程调度I/O操作
到多个磁盘,这种操作方式使用GPFS文件系统的缓存存储被切割的数据。在单节点,I/O密集的负载中,
处理器的使用可能会占用较多的处理器时间,影响到系统的性能。
在处理器瓶颈的情况下,为提高I/O的性能,应用可以考虑使用直接I/O(Direct I/O),避免数据在文
件系统缓存和应用缓存之间拷贝数据,处理器可以节省时间处理额外的I/O请求。尽管直接I/O的使用节省了处
理器的时间,但会要求应用使用固定缓存(pinned)。使用固定缓存可保证系统不会将I/O请求的内存换页出去。
固定(pining)缓存的操作比较消耗处理器时间,如果应用的缓存的固定(pin)操作在初始化过程中完成,
可以节省处理器的时间,这要求文件系统存在一种机制知道应用的缓存已经被固定,因而不需要在调度I/O时
再固定同样的缓存。
GPFS 2.2版本不存在这种识别应用缓存是否被固定(pin)的能力,但在后续的GPFS版本中将会增加这
一新的功能。应用可以通知GPFS,相应的使用直接I/O(direct I/O)的应用缓存已经被固定(pinned),
因而GPFS不需要重新固定缓存。
注意:直接I/O(Direct I/O)的目的是直接读或写数据到应用缓存,这种方式会限制GPFS的预取功能,
可以从异步I/O或者多线程读写的方式弥补性能的损失。

GPFS read-behind-write性能
Read-behind-write技术常被一些高端用户采用,目的是降低延迟,提高性能。Read-behind-write技术意味
着一旦写者(writer)开始写操作,读者(reader)立刻开始读操作,思想是重叠写和读的时间,对一些I/O
性能较差的服务器而言,优势是明显的,但对高性能的机器,例如P690,相应的操作可能会演化为并行写整
个文件,然后再并行读回数据。
实施read-behind-write这种方式,可以有很多种方式,例如写者(writer)写完纪录后,等待读者(reader)
读取纪录,然后再处理此项纪录,尽管这种策略只是时写者和读者在纪录级保持同步,仍然需要消耗系统时间处
理读者和写者间的同步锁。
如果应用并不关心读者和写者之间存在的未读的纪录差,也可以采取这样的策略,写者可以尽可能快的写,而不
用关心读者的问题,写者可以在一定数量的纪录写完后更新相应的标示量,写者可以根据此标示量确定有多少纪录未读。