免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3544 | 回复: 1
打印 上一主题 下一主题

构建分布式文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-27 22:19 |只看该作者 |倒序浏览
[color="#118811"]
[color="#118811"]文 国防科学技术大学计算机学院软件所 董勇 周恩强
关键词:
→Infiniband
由Mellanox公司提出,是一种新的I/O总线技术,用于取代目前的PCI总线。
→Lustre
它是一个开放源码的基于对象存储的高性能分布式文件系统,由Cluster File System(CFS)公司研发。
→Portals
来源于Sandia大学的Puma轻量内核项目,主要用于高性能的消息传递。
既然分布式文件系统能给用户带来更高的性能、扩展性和可用性,那么构建一个高性能的分布式文件系统又该从何处入手呢?基于Infiniband技术构建Lustre的实例可以让你见识到分布式文件系统的强大性能。
存储系统对于高性能计算平台的性能有重要的影响。很多关键应用,如天气预报、洋流模拟等都有很高的I/O吞吐量。分布式文件系统以其高可靠性、高可扩展性、高性能和高性价比成为高性能计算平台存储系统的首选。
Lustre作为新一代的基于对象的分布式文件系统,同一般的分布式文件系统,如NFS、GFS、PVFS等相比,具有独特的优势:
●针对大文件读写进行优化,可以提供高性能的I/O;
●数据独立存储;
●服务和网络失效的快速恢复;
●基于意图的分布式锁管理;
●融合了传统分布式文件系统(如AFS和Locus CFS)的特色和传统共享存储集群文件系统(如Zebra、Berkeley XFS、GPFS、Calypso、InfiniFile 和GFS)的设计思想,具有更加有效的数据管理机制;
●全局数据共享;
●基于对象存储,使存储更具智能化;
●系统可快速配置。
网络技术直接影响分布式文件系统的性能。Infiniband作为一种新的网络类型,其低延迟、高带宽的特点可以为分布式文件系统提供良好的网络支持,提高结点间的通信速度,从而提升整个文件系统的性能。
Lustre的发展
Lustre的组成
Lustre文件系统主要由三个部分组成:客户端(Client)、对象存储服务器(Object Storage
Target,OST)和元数据服务器(MetaData
Server,MDS)。客户端通过标准的POSIX接口向用户提供对文件系统的访问。对于客户端而言,Lustre是一个透明的文件系统。它无需知道具
体数据所在的位置,可以透明地访问整个文件系统中的数据。Client同OST进行文件数据的交互,包括文件数据的读写、对象属性的改变等;同MDS进行
元数据的交互,包括目录管理、命名空间管理等。OST负责对象数据的存储。MDS负责向客户端提供整个文件系统的元数据,管理整个文件系统的命名空间,维
护整个文件系统的目录结构、用户权限,并负责维护文件系统的数据一致性。三个组成部分除了各自的独特功能外,相互之间共享诸如锁、请求处理、消息传递等模
块。Lustre是一个高度模块化的系统,三个组成部分可以在一个节点上工作,也可以在不同的节点上工作。
在Lustre中,OST负责实际数据的存储,处理所有客户端和物理存储之间的交互。这种存储是基于对象(Object
-based)的,OST将所有的对象数据放到物理存储设备上,并完成对每个对象的管理。OST和实际的物理存储设备之间通过设备驱动程序来实现交互。通
过驱动程序的作用,Lustre可以继承新的物理存储技术以及文件系统,实现对物理存储设备的扩展。
在Lustre中,元数据的管理由MDS负责。MDS构造、管理文件分布的视图,允许客户端访问对象。通过MDS的文件和目录访问管理,Lustre可以
控制客户端对文件系统中文件的创建、删除、修改以及对目录的创建、删除、修改等访问控制。通过MDS,客户端得到数据所在的OST,并与其建立连接,此后
的读写操作就在客户端同OST之间进行,除非有对命名空间的修改,将不再同MDS有关系,这样就降低了MDS的负载。在多个客户端的情况下,由于有多个
OST存在,上述的工作模式就把对文件系统的访问转换为并行操作,从而可以较好地提高性能。在Lustre中,客户端使用写回式Cache来保证元数据的
一致性。Lustre系统可以配置两个MDS服务器,其中一个作为备份。两个服务器采用共享存储的方式来存放元数据。当某个MDS出现故障后,备份服务器
可以接管其服务,保证系统的正常运行。为了满足高性能计算系统的需要,Lustre针对大文件的读写进行了优化,为集群系统提供较高的I/O吞吐率。
Lustre的网络通信
对于Lustre而言,其网络堆栈由四部分组成,即设备驱动程序、Portals消息传递层、Niobuf数据移动层、请求处理层。
在Lustre网络堆栈的最下层是设备驱动程序。在大多数情况下,设备的驱动程序都是可用的,但是有时候仍然需要利用RDMA的优势进行消息传递。在设备
驱动程序的上层是消息传递层,在Lustre中,该层使用了轻量消息传递API-Portals。Portals使用NAL(Net
Abstraction
Layer)来屏蔽底层网络的差异,为Lustre提供统一的消息传递接口。在消息传递层的上面是网络数据移动层。网络堆栈的最上层是请求处理层,提供了
用于分发请求以及提供回复的API。
Sandia Portals
Portals来源于Sandia大学的Puma轻量内核项目,主要用于高性能的消息传递。它通过底层的灵活的模块组合,有效地支持高层的协议。它不仅可以支持应用程序级的消息传递接口,如MPI等,更可以满足高性能文件系统的需要。
1.Portals API
Portals可以访问虚拟网络的接口,每个接口都具有一个相关的Portals Table,每个Table中包含n个Match
Entry。Portals
Table使用0到n-1对Entry进行索引,每个Entry都同某个高层的应用协议相对应。实际上,这些Entry同网络的Port相似,可以为不同
的协议提供有效的消息分发协议交换机制。
每个Portals Table上的Entry都连接一个Entry List,提供进一步的消息选择标准。每个到达Portals
Table的消息都要同Entry
List中的Entry进行匹配,如果可以与某个Entry匹配,则接收该消息;如果不能匹配,则会遍历整个Entry
List,如果遍历完成仍然没有Entry成功匹配,此消息会被丢弃。
每个Match Entry都有一个Memory Descriptor。Memory
Descriptor描述了一个逻辑上连续的包括应用程序地址空间的内存区域。这个内存区域由一个地址以及长度来描述。如果Memory
Descriptor为空,那么相关的Memory Descriptor也不能使用。
每个Memory Descriptor都具有一个Event Queue,用来记录Memory
Descriptor上所发生的操作。多个Memory Descriptor可以共享一个单独的Event Queue,但是每个Memory
Descriptor只能有一个Event Queue。
在Event Queue中,所有的Event都保存在应用程序地址空间的一个循环缓冲区中。
2.Portals数据传输过程
在Portals中,数据的传输都具有两个进程,即Initiator和Target。Portals可以使用Put(Read)或者
Get(Write)操作进行数据的传输。Initiator对数据传输进行初始化,Target对操作进行响应。如果为Put操作,它可以接受数据,如
果为Get操作,它可以回复数据。
在Put操作时,Initiator向Target发送一个读请求消息。Target使用本地Portals结构对请求中的Portals地址消息信息进
行翻译,并且准备所需要的数据,将数据向Initiator发送。当请求被处理以后,Target可以选择发送一个确认消息。
在Get操作时,Initiator向Target发送一个Get请求,Target使用本地Portals结构对Portals地址信息进行翻译。在地址翻译完成以后,Target发送请求数据。
3.网络抽象层(Network Abstraction Layer,NAL)
网络抽象层存在于Portals的API以及library中,是Portals的重要组成部分。它可以提供对多种网络类型,如TCP/IP、Elan等的支持,将不同网络的差异进行屏蔽。实际上,NAL是两个虚类,其派生类由具体网络类型的驱动程序实现。
Portals的服务实例由四个组成部分。
Portals API库为应用程序提供Portals API,并且同API NAL进行交互。
Portals库提供了方法表,包括基本函数lib dispatch从API库中执行函数。Lib finalize负责为API库生成事件。Lib dispatch用来发现到达Packets的目的和目标。
NAL为API库提供一个方法表。其中一个是Forward方法。
Lib NAL是最后的组件。它向Portals Library分配API NAL的请求,具有几个其他的函数。它向Portals
Library提供了几个方法:cb_send用来发送Packet;cb_write穿过保护域,向API域中的内存区域发送数据和事件。
从根本上来看,NAL主要负责发送和接收数据,以及NAL保护域上的内存管理和并发控制。
Infiniband
Infiniband是由IBTA(InfiniBand Trade
Association,Infiniband贸易协会)制定的工业标准。它定义了一种新的服务器结点之间进行互联的网络标准,可以通过一个信息交叉网络
来简化并加速服务器与服务器之间的连接,其速度可以达到10Gb/s~30Gb/s。
Infiniband概述
在Infiniband网络中,结点之间通过通道适配器进行互联。通道适配器有两种,包括主机通道适配器(Host Channel
Adapter,HCA)以及目标通道适配器(Target Channel
Adapter,TCA)。整个系统可以通过HCA、TCA、交换机以及路由器组合在一起,构成一个快速网络。HCA和TCA可以提供一个无需CPU干预
的高可靠的点到点连接。HCA驻留在处理器节点,并提供从系统内存到InfiniBand网络的通路。它有一个可编程的直接内存访问(DMA)引擎。该引
擎具有特殊保护和地址翻译特性,从而使DMA操作可以在本地进行,或者通过另一个HCA或TCA远程进行。TCA驻留在I/O单元,并提供I/O设备(如
一个磁盘驱动器)或I/O网络(如以太网或光纤通道)与InfiniBand网络的连接。
交换机放置在通道适配器之间。它们使几个甚至几千个InfiniBand节点可以在任意位置进行互联。交换机对于结点而言是透明的,根据信息包中路由器报头的目的地地址,使信息包完整无损地经过网络到达目的结点。
在Infiniband中,数据沿着两个不同的方向流动,入站数据和出站数据分别位于不同的通道。InfiniBand不同的性能等级对应了Infiniband中实现2.5Gb/s的数据通道宽度,最高可达30Gb/s。
由于InfiniBand硬件从CPU卸载了大部分I/O通信任务,导致系统中多种通信任务可以同时进行,却没有相关的管理开销,这是与现有通信协议,如TCP/IP的一个主要不同之处。
Infiniband的通道适配器向结点提供的接口中使用了基于队列的模型。发送队列包括发送数据的指令,接收队列包括描述如何存放接收数据的指令。应用
程序可以对完成队列(Completion
Queue)进行检查,以查看请求是否已经完成。Infiniband同时支持通道和内存语义。在通道语义中,使用Send/Receive进行数据的通
信。一个Receiver必须显示发送一个描述符来接收消息。在内存语义中,RDMA操作使得操作的发起者可以直接从对方结点中写入或者读取数据,而不需
要对方结点的干预。
Infiniband对IP的支持
为了能更好地支持现有的网络,Infiniband使用IPOIB提供了对IP网络的支持。IPOIB通过一个Link Driver同IP网络堆栈的底层进行交互,从而实现对IP数据的封装,同时在数据传输过程中使用IB的不可靠传输服务。
IPOIB驱动程序作为linux网络堆栈的一个二层网络驱动程序,主要功能之一是执行IP地址向Infiniband UD地址矢量的映射,并对多播成员进行管理。
当IP层需要把数据放到网络上时,它要从内部的同Link
Driver相关邻居程序中获得硬件地址。如果目标IP的硬件地址未知,那么该程序将调用Link相关的地址解析协议来找到该地址。IPOIB的RFC定
义了一个将IPv4地址或者IPv6地址映射为IBA地址矢量的地址解析协议。这个协议由linux标准地址解析机制实现,同时具有一些额外的对
IPOIB驱动程序的“Shadow”支持。在得到硬件地址以后,IP层调用Link相关的Entry Point,将数据放到网络上。
当IPOIB驱动程序初始化时,创建一个内核net_device结构来保存IPOIB子网相关的状态和上下文,并在内核中注册一个网络适配器,所有相关
的通信由该适配器执行。当底层的Infiniband接口不再可用时,IPOIB将删除该网络适配器的实例,停止相关的工作。
以Infiniband构建Lustre文件系统
由于Infiniband在响应时间、传输速度上的优势,利用其构建高速分布式文件系统将极大地提高文件系统的性能。
由于Lustre的Portals目前还无法直接支持Infiniband NAL,可以利用Infiniband的IPOIB功能,在Lustre的Portals中使用TCP/IP NAL,从而达到间接利用Infiniband的效果。
在安装了Infiniband硬件以及驱动程序以后,利用IPOIB可以为系统提供一个新的网络接口,其地址以普通的IPv4地址的形式出现,与此同时,还可以为每个IPOIB地址配置一个主机名,利于Lustre使用。
完成每个结点上Infiniband及相关IPOIB配置后,再创建Lustre配置文件,每个结点以IPOIB的主机名来标识。将配置文件放到各个结点
都可以访问的地方,使用Lconf启动Lustre。当MDS及OST启动完成后,计算结点就可以加载客户端,完成Lustre在Infiniband的
部署。(E5)

                                
Portals关系图

                           
Portals NAL结构图
Lustre文件系统
Infiniband技术出现以后,就一直是业界研究的热点。Murali
Rangarajan等人利用Infiniband构建了DAFS,吴杰生等人则利用Infiniband构建了PVFS。从上述两种结构来看,都验证了
Infiniband技术在分布式文件系统上可以成功应用。此外,又有人利用Infiniband网络实现了基于RDMA的MPI,Vijay
Velusamy等人在Infiniband基础上建立了消息传递系统。
Lustre来源于卡耐基梅隆大学的Coda项目,由Cluster File
System公司开发。Lustre针对传统分布式文件系统中存在的高性能、高可用性以及可扩展性问题,综合了开放标准以及linux操作系统,利用
linux操作系统提供标准的POSIX兼容文件系统,采用基于意图的分布式锁管理机制,以及元数据同存储数据相分离的方式,融合了传统分布式文件系统
(如AFS和Locus CFS)的特色和传统共享存储集群文件系统(如Zebra、Berkeley
XFS、GPFS、Calypso、InfiniFile 和GFS)的设计思想,形成一个可靠的和网络无关的数据存储以及恢复方案。 (E5)
相关链接
基于Infiniband的Lustre性能测试
为了测试Lustre在Infiniband IPOIB连接上的性能,我们使用如下平台对Lustre进行测试,并同千兆以太网条件下的Lustre性能进行了对比。
客户端每台机器为双安腾1.4G CPU、8GB内存、RedHat Advanced Server
2.1、Lustre版本为1.0.4。OST端共有两台机器,每台机器均为AMD Opteron 1.8G
CPU、内存4GB,可以运行两个OST服务。每个OST服务使用由两块SCSI磁盘构成的RAID
0。MDS端位于其中一台OST结点上。每台机器均有千兆网卡、Infiniband网卡。测试工具为Iozone。为了保证测试结果的准确性,减少内存
对测试的影响,每次测试过程中,客户端每次读写的测试文件大小为16GB。
1.网络速度
要测试整个系统的性能,首先要获取两种网络的速度。使用Netpipe测试两种网络类型的速度。
2.本地磁盘速度
使用Iozone测试RAID 0的本地写速度,文件系统为ext3,其中读为144769kB/s,写为132184kB/s。
3.测试结果
首先测试一台机器作为OST,分别测试Lustre在千兆以太网以及Infiniband IPOIB条件下从1到5个客户端情况下的性能。
在千兆以太网条件下,网络速度是限制Lustre速度的重要因素。随着客户端的增加,Lustre性能在逐渐提升。而在Infiniband
IPOIB条件下,由于网络已经不再是限制Lustre性能的瓶颈,所以在1个客户端时,由于只有一个OST,其性能明显高于以太网条件下的数据。随着客
户端的不断增加,其聚合写性能随之缓慢上升。在读性能方面,随着客户端的不端增加,IPOIB条件下的聚合读性能是随之缓慢下降的。尽管如此,其性能仍然
要比千兆以太网条件下的性能高。
在多个OST情况下,Lustre的性能将随之发生变化。
由上面的测试结果可以看出,使用Infiniband IPOIB方式构建Lustre文件系统,写性能有很大提高,在4个OST情况下,4个客户端聚合写性能可以达到250MB/s,读性能可以达到230MB/s。
在千兆以太网条件下,4个客户端在4个OST上的聚合读带宽可以达到95MB/s,相同条件下聚合写带宽可以达到103MB/s。同以太网条件下相
比,Infiniband IPOIB条件下的Lustre性能有了巨大的提高,
4个客户端在4个OST上的聚合读带宽有230MB/s,聚合写带宽有250MB/s。测试结果验证了,Infiniband技术可以极大地提高
Lustre的性能。
在1个和两个OST条件下,Lustre的聚合读性能并不是随着客户端增加而增加的,只有在4个OST时,其聚合读性能随着客户端的增加而增加,这说明Lustre在大规模条件下更能体现其性能优势。
在写性能上,无论是随着OST的增加还是客户端的增加,Lustre的聚合写性能都在不断增长,这也表明了Lustre作为分布式文件系统所具有的可扩展性优势。         (E5)

                           
单个OST写性能对比

                           
单个OST读性能对比
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5737/showart_1342152.html

论坛徽章:
0
2 [报告]
发表于 2010-05-14 15:48 |只看该作者
最近正在研究这个,很有参考价值,感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP