并行分布式文件系统
什么是并行文件系统
文件是操作系统提供的一个抽象的东西,并行分布式文件系统是在单机的文件系统上再建立一层并行的系统。
§持久存储应用程序数据
- 通常非常大的数据集,不能适合内存
§提供全局共享命名空间(文件,目录)
§专为并行性而设计 - 来自许多客户端的并发(通常是协调的)访问
§专为高性能而设计 - 通过高速网络运营(IB,Myrinet)
- 优化的I / O路径,实现最大带宽
并行文件系统
依旧是树状结构,并行文件系统客户端也是跑在计算节点上,Server端的数目其实要比客户端少的多。并行文件系统侧重于硬件上的冗余(磁盘阵列),分布式文件系统侧重于文件系统层面的冗余。
§提供所有节点都可以看到的目录树(全局名称空间)
§跨多个服务器和驱动器映射数据(访问的并行性)
§协调对数据的访问,以遵循某些访问规则(有用的语义)
数据分布
给用户呈现的还是一个文件,但这一个文件的数据会被切割成小的block,分布存放在不同的server。
策略: Round-robin
循环法(PVFS中的AKA“简单条带”)是一种合理的默认数据分布解决方案 - 适用于各种工作负载
- 适用于大多数系统
Striping Unit:分割后的block的大小
Stripe Size:取决于有多少个server,步长。
客户端在不同区域执行文件的写入/读取
- 通常取决于应用程序工作负载和任务数量。
能够解决实际的情况是,不是完美分割。Round-robin是默认常用的情况,但是不适用于Server很多的情况,很多会导致访问需要去一次找很多次server。
Two-dimensional disribution 策略来解决这个问题。
将众多server分组,限定一个数量的server,图中是两层的情况。不用再去访问那么多server。
POSIX I/O Semantics 语义
当多个进程同时访问的时候,如何解决争用等数据一致性问题。
POSIX是一个可移植操作系统接口。
§20世纪70年代定义的一组接口:
§规范还定义了维护一致性的规则,在多种不同的linux系统里统一指令规范。
- 写入重叠区域的两个进程必须从I / O系统获得一致的结果
- 适用在本地文件系统
- 分布式/并行文件系统必须通过锁来管理一致性
- 存在其他替代方案
重叠区域
POSIX接口/这种强语义如何影响并行文件系统?
重叠区域造成了一个重大问题
PFS如何提供POSIX一致性语义?
需要分布式锁管理器(DLM)以及元数据和存储服务器
锁并行文件系统
§大多数并行文件系统使用锁来管理对文件的并发访问
§文件被分解为锁定单元 Lock Unit
§客户端在I / O发生之前获取将访问的单元的锁定
§也可以在客户端上启用缓存(只要客户端有锁,它就知道缓存的数据有效)
- 客户端可以使用readahead优化小I / O.
§当其他人希望访问时,会从客户端回收锁
§通过分布式锁管理器委派和撤销锁
lock boundary:锁边界。
DLM
并行文件系统必须要使用这种锁的机制,但是也有实施负担
- DLM增加了文件系统的复杂性
- 如果DLM节点出现故障怎么办?
§锁也有成本! - 客户端和DLM之间的往返延迟
- 获得了锁的进程down了,客户端故障会发生什么?
§想法: - 无锁文件系统 - >程序员注意一致性(例如PVFS)
- 让我们不要写入重叠区域
锁的问题
flase sharing:进程涉及了三块unit,,两个进程在没有重叠区域的情况下还会出现竞争问题。
案例:PVFS 并行虚拟文件系统
一个开源的并行文件系统
§“将最先进的并行I / O概念引入生产并行系统“
§“旨在扩展到数PB的存储,并提供100 GB的访问率”
§自1993年起由克莱姆森大学并行结构研究实验室,ANL的MCS和俄亥俄州超级计算机中心开发
§从2.8.4商业化为OrangeFS http://orangefs.org/
PVFS特点
§性能:
- 旨在为并行应用提供高性能,其中并发,大IO和许多文件访问很常见
- 动态分配IO和元数据,避免单点争用
- 优化
§与HPC接口兼容(MPI-IO) - 非连续访问
§轻松部署
§硬件独立(文件系统的基本要求)不能依赖于任何的厂商 - 主要是用户空间(小型Linux内核模块)
- 经过验证的生产环境
§良好的研究平台 - 并行I / O的大量研究使用了PVFS
PVFS架构
§PVFS在所有存储服务器中存储元数据和数据,逻辑层面上来讲有存储元数据的server,也有存储数据的server,但是物理层面上讲只是两种不同的进程,可以存储配置在一个硬件上
§存储服务器数量没有限制
§使用对象(AKA数据文件)在存储服务器上存储文件数据
§数据文件具有64位整数的唯一标识(AKA对象ID,inode等,或者叫handle,或者叫object id,通过这个找到数据起始位置)格式就像报文的头节点。
§每个存储服务器“拥有”一系列handles
§逻辑文件数据跨数据文件进行条带化
PVFS客户端负责截获文件系统的请求,知道自己工作在PVFS系统,文件的mount point是在并行文件系统,计算节点可以有好几个文件系统(自己的文件系统,网络文件系统,并行文件系统)
PVFS服务端管理数据的存储以及给客户端提供并行性,key/valve存放元数据,Object Store存放数据。
客户端和服务端之间的通信需要通过HPC存储网络,pipelining优化自己的通信,double buffer双缓冲。
PVFS Object 配置
§PVFS通过对象列表分发文件数据
§每个对象都有一个对象标识符
§标识是64位整数值
§与inode类似
§将表从inode映射到server节点
- 确定手柄位置
- 限制分配范围
- 静态:允许快速本地计算以查找服务器
PVFS 元数据布局
元数据也是存放在多个不同的server。MetadataServer和IOserver实际上是在一台机器上
PVFS的接口有两类:Blocking和Non-blocking,跟系统调用一样,区别就是blocking这一类必须要等到整个操作完成了再return,Non-blocking是调用完了立即return,用另外的机制去check有没有完成。
优化:
- 减少客户端和服务端的交互,同时有很多个客户端访问同一个服务端的文件,比如打开文件要拿到文件的handle,会产生很多个会话。让其中的一个进程去打开文件,拿到handle,然后广播给其他客户端。
- 减少客户端和服务端的交互,反过来讲也可以通过服务端。服务端开启集体通信,存储记录客户端的行为操作,那么客户端只需要访问一个服务端就能在其他服务端进行相同的操作。
- 减少Metadata的交互,一个写操作更改了文件大小,那么就要去更改metadata的size,优化就是在该文件内容的时候直接IO server的local Stat上更改size
- pipelining:从存储中读出数据到buffer,通过网络传输出去,这时不需要全部读出,分成很多个buffer,读一个的同时送一个到network的客户端,送出后的buffer就可重用。只有两块buffer就是double buffer 实际上可以又很多个buffer。
- 创建一个文件如果需要三个Object,那就同时发送三个IO server请求去存这个文件。
- IOserver提前给metadata server一些allocation的handle,这样客户端请求创建文件时直接能拿到空闲的handle。
PFVS:设计与开发
复杂的并行分布式文件系统基于事件驱动模型,Event-Driven Model,使用状态转换机,使用一些算法和代码去填充,完成一些行为。
Event-Driven对并行文件系统有益的
§网络/磁盘接口具有异步或非阻塞事件驱动的调用
- 网络:Infiniband VAPI,Myricom MX,MPI,非阻塞套接字
- 存储:Posix Async I / O.
§文件系统由事件驱动,例如
§服务器接收请求
§磁盘写操作完成
§发送消息失败
§通常对设备进行轮询以完成操作,推动程序的下一步,MPI_waitall,epoll等。
state Machines 这种语法形式。
网友评论