【发布时间】:2017-10-31 10:08:41
【问题描述】:
我想测量和绘制 SSD 的延迟百分位随时间变化。如果有人做过类似的事情,请分享您可能有的任何建议。我对如何运行 FIO 以及如何处理结果都很感兴趣。
我将首先描述我想使用的测试方法,然后描述我到目前为止所做的(并且工作不完美),最后问几个问题。
目标:
我想随着时间的推移跟踪平均延迟和 95%、99%、99.9% 的延迟百分位数。显然,这些度量是在我希望能够设置为 10-60 秒间隔的时间窗口内隐式定义的。
我想比较当我在恒定设备负载下改变 IO 模式时这些延迟百分位数如何变化。我需要能够控制总负载(发送到设备的数据量)以确保百分位数实际上具有可比性。一个简单的例子是:a) 有一个以 200MB/s 顺序写入的线程与 b) 2 个写入 100MB/s 的线程。如果两个实验之间的总吞吐量不同,那么比较百分位数将毫无意义。
到目前为止我尝试了什么:
自定义版本的 FIO 可提高延迟直方图的分辨率。这可能不需要。
我打开了 json+ 输出,以便获得漂亮的延迟直方图。但是,这些直方图汇总了整个 FIO 运行,因此我无法测量延迟随时间的变化。
-
为了让延迟随时间发生变化,我想到了一个接一个地启动许多小型 FIO 作业。例如,如果我想获得超过 1 小时的延迟,我会启动 120 次 30 秒的 FIO 运行并将每个输出保存到不同的文件中。每个输出都会给我超过 30 秒的延迟百分位数。但是,这种方法存在两个问题:
FIO 启动需要很长时间(大约 15-20 秒),这使得 SSD 可以执行 GC 和修复写入性能。
对于顺序写入,写入偏移量在每个 FIO 作业开始时重置。这意味着新的 FIO 运行实际上不会继续按顺序写入,更糟糕的是,设备的某些部分可能根本不会被写入。
问题:
有没有一种方法可以使用 FIO 来跟踪延迟随时间的变化。如果有,能否举个例子?
对于顺序写入,如何提高吞吐量?默认情况下,顺序写入的 FIO 使用 iodepth 1(队列深度 1)。我没有看到增加吞吐量的明确方法。增加 iodepth 似乎没有帮助。
我看到 FIO git repo 中有一些用于绘图的 python 脚本。这些会有用吗?谁能指出一些类似于我想做的例子?
【问题讨论】:
标签: linux io benchmarking