FIO延迟百分位数随时间变化

时间:2017-10-31 10:08:42

标签: linux io benchmarking

我想测量并绘制SSD的延迟百分位随时间的变化。如果有人做了类似的事情,请分享您可能有的任何建议。我对如何运行FIO以及如何处理结果感兴趣。

我将首先描述我想要使用的测试方法,然后描述我到目前为止所做的工作(并且工作不完美),最后提出几个问题。

目标:

  • 我希望跟踪延迟平均值和95%,99%,99.9%的延迟百分位数。显然,这些措施是在一个时间窗口中隐式定义的,我希望能够将其设置为10-60s间隔。

  • 我想比较这些延迟百分位数如何随着我在恒定设备负载下改变IO模式而改变。我需要能够控制总负载(发送到设备的数据量)以确保百分位数实际上是可比较的。一个简单的例子是:a)有一个线程按顺序写入200MB / s而b)2个线程写入100MB / s。如果两个实验之间的总吞吐量不同,那么比较百分位数将毫无意义。

到目前为止我尝试了什么:

  • 自定义版本的FIO可提高延迟直方图的分辨率。这可能不需要。

  • 我打开了json +输出,以便获得漂亮的延迟直方图。但是,这些直方图聚合了整个FIO运行,所以我无法测量随时间推移的延迟变化。

  • 为了让延迟随时间而变化,我想到了一个接一个地开始许多小型FIO工作。例如,如果我希望延迟超过1小时,我将启动120个FIO运行30秒并将每个输出保存到不同的文件。每个输出都会给我超过30秒的延迟百分位数。但是,这种方法存在两个问题:

    1. FIO启动需要很长时间(约15-20秒),这些允许SSD执行GC并修复写入性能。

    2. 对于顺序写入,写入偏移量在每个FIO作业开始时复位。这意味着新的FIO运行实际上并没有继续按顺序写入,更糟糕的是,设备的某些部分可能根本没有写入。

问题:

  • 是否有一种方法可以使用FIO来跟踪延迟随时间的变化。如果是这样,你能提供一个例子吗?

  • 对于顺序写入,如何提高吞吐量?默认情况下,顺序写入的FIO使用iodepth 1(队列深度1)。我没有看到提高吞吐量的明确方法。增加iodepth似乎没有帮助。

  • 我看到FIO git repo中有一些python脚本用于绘图。这些都有用吗?有人能指出一些类似于我想做的例子吗?

1 个答案:

答案 0 :(得分:1)

@Radu - 你在错误的网站上问这个问题(Stack Overflow更多是编程问题)。 Serverfault或超级用户可能更合适。无论如何我会采取刺伤(但答案可能是低质量的,因为你同时问了很多问题,所以我有时间回答):

  

FIO启动需要很长时间

当fio启动时,如果文件不存在,则必须创建您要求的文件。如果平台支持,fio所做的另一件事(如果你的平台支持它)是invalidate the cache of the file。如果您已经排队了许多尚未发送到磁盘的缓存写入,则可能需要花费一些时间来刷新所有写入以及删除缓存。由于我看不到你的工作档案,我真的不能再说了......

  

是否有一种方法可以使用FIO来跟踪延迟随时间的变化。如果是这样,你能提供一个例子吗?

正如您找到的fio's summary output is cumulative所以在您的案例中并没有那么有用。但是,您可以使用fio's latency loggingrecord latency periodically(默认情况下,fio会为每个I / O创建一个条目,因此也请参阅log_avg_msec选项和Log File Formats section)并执行后续操作稍后处理你自己(你甚至可以使用fiologparser_hist.py)。

  

对于顺序写入,我怎样才能提高吞吐量?

这本身就是一个很大的话题,我不能在这里做到公正。您可以尝试一些起点:尝试切换到libaio之类的异步发动机并增加iodepth(例如设置为32)并设置direct=1。较大的block size(例如64k而不是4k)通常也有助于吞吐量。请重新阅读帮助页面/ HOWTO,即使它很大,因为您遇到的一些问题都在其中描述(在这种情况下,灵活也意味着复杂......)。

  

FIO git repo for plotting中的任何[python脚本]是否有用?

是?还有一些基于shell的脚本(如fio2gnuplot)。 http://tfindelkind.com/2015/09/16/fio-flexible-io-tester-part9-fio2gnuplot-to-visualize-the-output/举了一个例子。但是,如果您了解创建的延迟文件,您可能会发现很容易在您选择的任何电子表格或统计工具中绘制它们。

另一个提示 - 尝试确保您使用的是最新版本的fio(请参阅https://github.com/axboe/fio/releases了解版本,一旦您拥有所需的依赖项,这是一个相当简单的构建 - https://github.com/axboe/fio/blob/fio-3.2/README#L130)。链接的在线HOWTO仅适用于最新版本的fio,并修复了许多错误,这些错误不在fio的陈旧版本中......

祝你好运!