未解决
此帖子已超过 5 年
Community Manager
•
6.1K 消息
0
943
SmartPools:数据布局和预取
SmartPools:数据布局和预取
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese
介绍
正如我们所看到的,Smartpool在OneFS的各个版图都有所涉猎- 从分层,多租户,SSD使用,元数据策略,保护等。对于本系列的最后一篇文章,我们将快速浏览在SmartPools对数据布局和预取的影响...
在文件池(甚至单个文件)级别,数据访问设置可以配置为优化访问它的应用程序类型的数据访问。 数据可以针对并发,流,随机或自适应访问进行优化。 这可以通过WebUI导航到文件系统>存储池>文件池及编辑所需的文件池策略来完成。
或者也可以从CLI:
#isi set -a streaming
这些数据访问设置通常会影响文件在磁盘上的物理布局,以及预取和缓存。
数据访问设置 |
描述 |
磁盘布局 |
高速缓存 |
并发 |
优化群集上的当前负载,具有许多同时的客户端。 此设置为混合工作负载提供最佳行为。 |
在实现为文件配置的数据保护设置所需的最少驱动器数据之间条带化数据。 |
适度预取 |
流 |
优化单个文件的高速流式传输,例如使用单个客户端实现非常快速的读取。 |
在大量驱动器上分割数据。 |
积极的预取 |
随机 |
通过执行几乎没有缓存预取来优化对文件的不可预测的访问。 |
在实现为文件配置的数据保护设置所需的最少驱动器数据之间条带化数据。 |
很少到没有预取 |
自适应(默认) |
优化简化。 根据文件的实际读取模式自动调整预取量。 当I/O是顺序和随机混合时,处于最优。 |
不影响磁盘布局。 |
自适应预取 |
随机访问设置执行很少甚至没有读缓存预取,以避免浪费磁盘访问。这对小文件(<128KB)和随机小块访问的大文件最有效。
流式访问最适合顺序读取中到大文件。此访问模式使用积极的预取来提高整体读取吞吐量,并且磁盘布局将文件扩展到大量磁盘以优化访问。
并发访问是适度预取的中间地带。将其用于随机和顺序访问的混合文件集。
自适应预取自动调整对文件发生的实际读取模式的预取量。顺序读取可以通过增加预取来提高,而随机读取可以通过预取更少来提高。自适应预取将文件分离成固定大小的区域。当发生文件读取时,从区域A读取数据。一旦区域A看到一定数量的读取,OneFS从区域B开始预取等。多个读取器可以各自启动预取。
自适应预取的最大好处是对于具有混合I/O访问模式的文件,可以连续调整每个单独文件读取器预取的数据量 - 其中一些可能是随机的,而其他流式传输。
然而,与其他数据访问设置不同,自适应预取不影响磁盘文件布局,只是访问方面的事情。另外,由于需要首先学习文件的访问模式,所以在顺序I/O上的预取可能不是绝对即时的。此外,对于小的,顺序访问的文件,流访问可能是优选的。
OneFS还提供了基于文件名的预取机制,用于加速生成顺序命名文件的特定工作流。例如,几个媒体应用程序执行单线程IO到中等大小的顺序命名的文件:说,一个媒体渲染应用程序,其中帧被存储为单独的文件,名为“movie00001.dat”,“movie00002.dat”,“movie00003 .dat“等等。
文件名预取的基本前提是:
· 当文件被打开时检查文件名称。
· 猜测下一个文件名的语法是什么。
· 按顺序预读下一个文件。
因此,OneFS基于文件的预取启发式可以大大优化这种顺序读取工作流程。为了工作,文件名预取器在许多后台线程中运行,这被告知由客户机读取请求预取的内容。
文件名预取通过OneFS sysctls配置,具体如下:
efs.bam.fnprefetch.enable_streaming: 1
efs.bam.fnprefetch.lookahead_streaming: 9
efs.bam.fnprefetch.prefetch_l1_all: 1
efs.bam.fnprefetch.prefetch_l1_size_limit: 67108864
通常,用户希望使用isi set -l streaming 在目录和文件上设置流传输位。 然后,在客户端访问节点上,应该设置sysctl efs.bam.fnprefetch.enable_streaming = 1。 这将导致节点尝试对流文件的所有访问的文件名预取。 lookahead_streaming设置可用于控制文件名预取将要寻找的距离。
使用prefetch_l1_all off(value = 0),预取器将读取文件的第一个32k。 使用prefetch_l1_all(value = 1;默认值),它将把整个文件预取到L1缓存中,直到l1_size_limit。 请注意,相关的fnprefetch sysctl应该仅在需要文件名prefetch的节点上启用。
SmartPools文件池规则还允许针对性能和保护来优化数据。 如我们所见,SSD也可以以各种方式使用,加速数据的组合,元数据读取和写入,以及其他层级的元数据读取性能。
基于位置的性能的另一个应用是性能隔离目标。使用SmartPools,特定的节点池可以与除最高性能数据之外的所有其他节点隔离,文件池策略可用于将除了最重要数据的所有数据远离此节点池。这种方法有时被用来隔离集群中某一类型的几个节点,用于激烈的工作。由于节点池可以轻松配置,因此可以拆分较大的节点池,从而为两个不同的工作负载提供性能隔离。随时可以将拆分池轻松地重新配置成更大的节点池。
除了可以使用SmartPools来增强性能的领域之外,重要的是要注意,任何分层方法都将有一些情况下,由于数据位置,分层数据移动活动等而导致性能受损。
上面我们讨论了数据位置和性能隔离作为SmartPools的性能增强功能。如预期的那样,如果数据位于较慢的驱动器介质上,则通常访问速度较慢。
横向扩展NAS的另一个架构属性是数据可能驻留在一个节点上,而访问该数据的客户端的网络接入点可能很好地连接到另一类节点上,或负载均衡。该接入节点可能具有不同的前端IO能力,高速缓存等,但性能特征仍将主要由数据所在的存储类决定。
一个好的经验法则是,尽管SAS在大多数情况下要比SATA快,但主轴数也可以产生非常重要的影响。例如,假设在网络侧没有瓶颈,流媒体应用程序通常可以看到在具有较少CPU功率的SATA节点上的数据与具有更多CPU功率的SAS节点之间的数据之间的性能差异很小,只要其连接到集群通过节点池,其中节点具有大量缓存。类似地,对于具有随机访问模式的应用,只要连接到它们的节点池具有足够的CPU,实际的驱动器类型通常不会在性能上产生巨大的差异。
分层存储环境中的另一个重要的性能考虑是数据移动本身对整个系统资源的影响。显然,将数据从一个节点池移动到另一个节点的动作使用系统资源。 SmartPools尝试通过利用作业引擎的并行执行和影响管理框架来减轻数据移动的影响。
为了获得最佳的集群性能,我们建议您遵循以下OneFS SmartPools最佳做法:
· 定义每个层的性能和保护配置文件,并进行相应配置。
· 启用SmartPools虚拟热备件至少10%的空间分配。
· 在可能的情况下,避免为文件创建硬链接,这将导致文件匹配不同的文件池策略
· 如果节点池被组合成层,则文件池规则应该针对层级而不是层级中的特定节点池。
· 避免创建使用和不使用SSD组合节点池的层。
· 启用了L3缓存的节点池对于GNA目的是无效的。所有GNA比率计算专门用于没有启用L3缓存的节点池。
· 在节点池上启用元数据写入策略之前,请确保SSD占该池可用容量的6-10%。
· 对于元数据读取,请确保SSD至少占节点池可用容量的2%。
· 如果启用GNA,请确保总集群可用容量至少为2%,SSD至少分散在20%的节点上。
· 确定特定工作负载的元数据操作是否偏向于读取,写入或甚至混合,并选择最佳的SmartPools元数据策略。
· 建议每个群集最多使用三十个文件池策略(较少=更好)。
· 确保nodepool和总体集群容量利用率(HDD和SSD)保持在90%以下。
原文作者: Trimbn
本文翻译自英文博客文章:
https://community.emc.com/community/products/isilon/blog/2017/04/05/smartpools-data-layout-prefetch