分类:基准测试

来自Lustre文件系统
跳转至: 导航搜索

介绍

基准测试是一个复杂的问题,且在一定程度上具有争议。各相关方之间对基准测试的工具、方法、负载或可接受的结果存在分歧,不太可能达成任何有意义的统一意见。但是,他们都承认基准测试的必要性。

下面将介绍为建立Lustre文件系统及其支持基础架构的总体运行状况而进行的基准测试的概述。这些测试方法旨在运用基础架构(压力测试)来识别故障并建立基线性能,并不对其进行监控。

基准测试的目标是确保系统能按照规范运行,并识别和消除系统缺陷。这也是交付一个新系统,或者在服务等级协议(service level agreement, SLA)中或审计时,作为持续可靠性和性能测试部分的典型验收要求。

基线测量为用户在比较应用程序的性能或效率时提供了参考。

基准测试还能发现环境中的潜在缺陷,例如,如果与已建立的参考相比,结果低于预期,或者根本没有返回结果。

流程框架

基准测试原则上是一项相当简单的工作: 运行一项测试,然后记录一组测量值,并将其与一个已建立的参考值进行比较。测量值与参考值越接近,结果越好。

Lustre的典型目标是提供底层平台测量基准性能的90%以上的流式IO性能。或者换句话说:提供底层系统90%以上的性能(针对大规模流式IO的工作负载)。

Lustre是一个运行在软件中的虚拟文件系统(尽管是在Linux内核中),因此它的性能取决于底层平台——硬件、网络和操作系统——的能力。

因此,为了确定Lustre是否能够达到性能目标,必须先确定运行Lustre的平台的能力。再通过对计算机、存储和网络进行基准测试,将结果与供应商提供的规格进行比较。

Lustre健康是按如下框架分层构建的:

  1. 建立基础操作平台
    • 物理集成、布线和供电
    • 固件更新
    • 存储配置
    • 操作系统安装和配置
    • 设备驱动的安装
    • 应用软件安装(包括Lustre)
  2. 对网络进行基准测试
  3. 对单个存储设备或逻辑单元(LUN)进行基准测试
  4. 对OSS服务器进行基准测试
  5. 对MDS服务器进行基准测试
  6. 用户空间/应用基准

网络

使用基于网络技术的相关工具,建立独立于Lustre或LNet的网络性能基线。一旦基线建立,并且确定网络环境是安全的(可选的),则可使用lnet_selftest运行LNet基准测试。

本节将跳过基本的连通性测试,并假设读者已经对traceroute, ping, ip {addr, link, route}等都有所了解。所有的工具基本上都依赖于能够在主机之间建立连接这一基本的先决条件。为了简洁起见,也省略了诊断工具。

这些基准测试的目的是建立一个点对点的性能基线,因此可能无法扩展到非常大的集群,至少在没有一些脚本自动化该过程的情况下是如此。

以太网 / TCP

netperf实用程序为TCP网络提供了全面的带宽和延迟性能测试。该程序在GitHub上的地址:

https://github.com/HewlettPackard/netperf

Netperf有两个组件: 服务器守护进程和客户端。服务器进程是客户端将要连接的目标进程。

可以从命令行访问服务器,如下所示:

netserver

netserver进程将返回它正运行在哪个端口上,例如12865。

以下是运行Netperf客户端的两个简单示例:

# Measure request / response (latency)
netperf -H <target IP addr> -p <remote port> -t TCP_RR -f B -l 60 -v 2

# Measure bulk transfer
netperf -H <target IP addr> -p <remote port> -t TCP_STREAM -f M -l 60 -v 2

例如:

netperf -H 10.73.2.22 -p 12865 -t TCP_RR -f B -l 60 -v 2

netperf -H 10.73.2.22 -p 12865 -t TCP_STREAM -f M -l 60 -v 2

InfiniBand

IB基准测试库中最简单的工具是ib_read_bwib_write_bw, 或者ib_send_bw。它们随着InfiniBand性能工具包一起发布,提供了一个简单的点对点性能计算工具。

每个工具都有相似的命令行参数,并以相似的方式调用。这些工具都有接收方(服务器)和发送方(客户端)两种模式。

例如,要启动一个服务器进程:

ib_read_bw [-F] [-d <hca dev>] [-i <ib port>]

要启动一个客户端进程:

ib_read_bw [-F] [-d <hca dev>] [-i <ib port>] <server>

关于更多参数的详细信息,请参考手册。

Omni-Path

对于Omni-Path结构的网络,hfi1-diagtools包中的hfi1_pkt_test命令是最容易使用的。该命令有服务器和客户端两种模式。按如下方式启动服务器/客户端进程:

hfi1_pkt_test -r

启动服务器将输出该服务器正在监听的LID和相关内容(上下文)。

要启动一个客户端进程:

hfi1_pkt_test -L <lid> -C <context>

LNet Selftest (lnet_selftest)

LNet Selftest是一个内核模块和应用程序,用于对Lustre网络(LNet)协议的性能进行基准测试。有关LNet Selftest的专门介绍请参考LNET_Selftest

存储设备/单元

虽然对于大规模的安装来说,对所有存储设备进行单个基准测试可能很繁琐的,但还是建议这样做。至少,在将任何需要永久保存的生产数据提交到存储之前,应该考虑对最终是用来创建Lustre OSDs(MGT, MDT, OST)的所有存储单元进行基准测试。这将有助于在早期识别生产缺陷,并建立存储子系统的基线性能。

对存储进行基准测试是至关重要的,特别是由于文件系统一旦投入生产,存储是基础架构中最难替换的组件之一。一旦系统启动,个别存储设备的间歇性故障、性能下降可能很难隔离处理。

VDBench

VDBench是一个成熟的且非常有用的用于做存储基准测试的应用程序。VDBench可以从Oracle免费获取,尽管可能需要一些操作步骤。此外,它是一个Java应用程序,能在各个操作系统运行。有关VDBench的专门介绍请参考:VDBench

除了对低级别的设备进行基准测试之外,VDBench还可以用于通用文件系统的基准测试。它功能多样,可以模拟不同类型的应用程序工作负载。

SGP_DD Survey (sgpdd-survey)

sgpdd-survey是一个IO工作负载生成器,用于对磁盘存储的性能进行基准测试,可在目标存储设备上生成大量连续的IO工作负载。它是SCSI设备工具包(sg3_utils)中的sgp-dd(SCSI Generic Parallel DD,SCSI通用并行DD)命令的包装器。

sgpdd-survey是Lustre IO工具包的一部分。有关sgpdd-survey的专门介绍请参考: SGPDD_Survey

OSS 基准测试

OBDFilter Survey (obdfilter-survey)

OBDFilter-Survey通过模拟客户端IO来测试一个或多个主机的性能。安装中的每个OSS服务器都要单独测试。该脚本是lctl的子命令test_brw的包装器。OBDFilter-survey需要一个功能性的Lustre文件系统,即运行了MGS、MDT和目标OST。有三种执行模式: disk, networknetdisk,但通常只运行disk模式的测试。另外两个可靠性较低,尤其是network模式已经被lnet_selftest取代。

obdfilter-survey 是Lustre IO工具包的一部分。有关obdfilter-survey的专门介绍请参考: OBDFilter_Survey

MDS 基准测试

MDTest (mdtest)

MDTest是一个基于MPI的应用程序,用于评估文件系统的元数据性能,并能测试包括Lustre在内的并行文件系统。

MDTest在Lustre客户端上运行,需要完整配置的Lustre文件系统。mdtest 应该在几个节点上并行运行,以使文件系统达到饱和。该程序可以创建目录树或任意深度的路径,并且可以在引导下创建混合工作负载,包括file-only测试。还可以指定每个客户端要创建多少个线程,以及每个线程要创建多少个文件或目录。

有关MDTest的概述请参考:MDTest

注意:MDTest不是Lustre特定的基准测试,它可以在任何符合POSIX的文件系统上运行。它需要完整配置的文件系统实现才能运行;对于Lustre来说,完整配置意味着安装、配置和运行了MDS服务、OSS和客户端。

应用程序的基准测试

IOR

IOR是一个常用的文件系统基准测试应用程序,特别适合评估并行文件系统的性能。在某些方面,它相当于高性能存储的Linpack。

IOR在Lustre客户端上运行,需要完整配置的Lustre文件系统,它也不是一个特定于Lustre的应用程序。有关如何使用IOR请参考:IOR

其他参考

强烈推荐用于核查Linux性能工具的资源: