谈起 HPC 时, 似乎绕不开 Lustre.Lustre 是 HPC 的代名词, 它是开源 HPC 并行文件系统市场占有率最高的文件系统, 并得到了如 Intel 和 DDN 等厂商的大力支持. 目前, Intel 与 Lustre 相关的业务已经被 DDN 所接手.
鉴于 Lustre 在 HPC 行业的知名度和认可度, 今天, 给读者分享一篇关于 Lustre 调优的文章, 目的是给 Lustre 学习者和爱好者提供些学习参考.
1 Lustre 性能优化参考
1.1 网络带宽
网络带宽往往决定着 lustre 文件系统的聚合带宽. Lustre 是通过多个 OSS 同时读取数据来提高系统整体的读写性能, 然而, 如果网络传输的性能过低, 则无法发挥 lustre 文件系统的性能优势. 从以下几点考虑网络带宽对性能的影响:
网络类型(TCP/IP 网络及 Infiniband 网络)
网卡类型(千兆网 / 万兆网)
网卡数量及绑定方式(网卡绑定一起)
网卡绑定模式
补充:
通常情况下 Infiniband 网络性能远远高于 TCP/IP 网络, 但成本较高
万兆网比千兆网性能高
网卡绑定模式一般为 6.
1.2 Lustre 自身设置
Luster 自身设置主要是条块数 (即 OST 的个数) 及如何条块化, 这两方面也是 lustre 实现 I/O 并发的关键. 条带化能够使系统达到并发的目的, 从而影响了系统的性能. Luster 自身设置对系统性能的影响主要从以下几个方面:
条块大小(stripesize,min=64KB)
条块数(stripecount)
起始块数(start-ost, 即条块起始位置)
补充:
通常情况下 start-ost 默认为 - 1, 不需要进行修改, 该设置即不指定初始位置, 能够很好达到负载均衡的目的
通常情况下 lustre 条块的大小的增加, 聚合带宽总体呈下降趋势, 当条块过大时, 某一时间内的多个 I/O 发生在同一个 OST 上, 造成 I/O 等待, 通常设置为 64KB
通常情况下, 随着条块数增加, 聚合带宽总体呈上升趋势, 在一定的环境下, 合理的配置 OST 可以良好的发挥 lustre 的系统性能.
1.3 客户端设置
Lustre 文件系统中, 客户端生成一个全局存储空间, 用户数据通过客户端存入 lustre 文件系统中, 所客户端的设置也会影响系统的性能.
主要从以下几点:
单个客户端进程数(连接数)
读写块大小
客户端数量
补充:
随着连接数 (进程数) 的增加, 聚合带宽开始呈上升趋势, 到一定程度后稳定(此时系统性能尚未达到饱和), 随着连接数的增加, 带宽开始下降
随着 I/O 读写块的大小增加, 聚合带宽开始呈现上升趋势, 到一定程度后稳定, 随后增加块大小聚合带宽反而下降, 当 64KB~64MB 大小时, 保持稳定
随着客户端数目的增加, 读模式下的聚合带宽明显提高, 而写模式下的聚合带宽则变化不明显.
1.4 存储 RAID
Luster 底层存储设备采用通用存储设备, 可以是单磁盘, 也可以是 RAID, 也可以是 LVP, 大部分采用 RAID 方式, 既能保证聚合存储容量, 又能提供数据保护. 主要从以下几点说明:
RAID 方式(硬 RAID / 软 RAID)
RAID 模式(RAID0/1/2/3/4/5/6/10/01)
硬 RAID 卡类型
做 RAID 的磁盘类型(SATA,SAS,SSD)
补充:
通常情况下, lustre 文件系统底层采用硬 RAID 的方式进行底层存储, 性能远远大于软 RAID, 但成本高
Luster 通常做 RAID6, 提高数据保护
OST 磁盘一般采用低成本的 SATA 盘, 而 MDS 则一般采用 SSD 盘
2 Lustre 小文件优化
2.1 整体设置
1, 通过应用聚合读写提高性能, 比如对小文件进行 Tar, 或创建大文件或通过 loopback mount 来存储小文件. 小文件系统调用开销和额外的 I/O 开销非常大, 应用聚合优化可以显著提高性能. 另外, 可以使用多节点, 多进程 / 多线程尽可能通过聚合来提高 I/O 带宽.
2, 应用采用 O_DIRECT 方式进行直接 I/O, 读写记录大小设置为 4KB, 与文件系统保持一致. 对输出文件禁用 locking, 避免客户端之间的竞争.
3, 应用程序尽量保证写连续数据, 顺序读写小文件要明显优于随机小文件 I/O.
4,OST 采用 SSD 或更多的磁盘, 提高 IOPS 来改善小文件性能. 创建大容量 OST, 而非多个小容量 OST, 减少日志, 连接等负载.
5,OST 采用 RAID 1+0 替代 RAID 5/6, 避免频繁小文件 I/O 引起的数据校验开销.
2.2 系统设置
1, 禁用所有客户端 .NET debug 功能: 缺省开启多种调试信息, sysctl -w .NET.debug=0, 减少系统开销, 但发生错误时将无 LOG 可询.
2, 增加客户端 Dirty Cache 大小: 缺省为 32MB, 增大缓存将提升 I/O 性能, 但数据丢失的风险也随之增大.
3, 增加 RPC 并行数量: 缺省为 8, 提升至 32 将提高数据和元数据性能. 不利之处是如果服务器压力很大, 可能反而会影响性能.
4, 控制 Lustre striping:lfs setstripe -c 0/1/-1 /path/filename, 如果 OST 对象数大于 1, 小文件性能会下降, 因此将 OST 对象设置为 1.
5, 客户端考虑使用本地锁: mount -t lustre -o localflock, 如果确定多个进程从同一个客户端进行写文件, 则可用 localflock 代替 flock, 减少发送到 MDS 的 RPC 数量.
6, 使用 loopback mount 文件: 创建大 Lustre 文件, 与 loop 设备关联并创建文件系统, 然后将其作为文件系统进行 mount. 小文件作用其上, 则原先大量的 MDS 元数据操作将转换为 OSS 读写操作, 消除了元数据瓶颈, 可以显著提高小文件性能.
这种方法应用于 scratch 空间可行, 但对于生产数据应该谨慎使用, 因为 Lustre 目前工作在这种模式下还存在问题, 操作方法如下:
3 文档说明
Lustre 文件系统的性能优化研究 2011(王博, 李先国, 张晓)
基于软 RAID 的 lustre 性能影响要素简析 2008(张丹丹, 姚继峰)
Luster I/O 性能最佳实践
Luster 文件系统 I/O 性能的分析和改进(林松涛, 周恩强, 廖湘科)
来源: http://server.51cto.com/HPC-592710.htm