linux - 如何使 FIO 重播多线程跟踪

标签 linux multithreading io workbench

我正在尝试使用 fio 重放一些 block 痕迹。

我写的作业文件是这样的:

[global]
name=replay
filename=/dev/md0
direct=1 
ioengine=psync

[replay]
read_iolog=iolog.fio
replay_no_stall=0 
write_lat_log=replay_metrics
numjobs=1

这里的关键是我想使用“psync”作为ioengine,并重播iolog。 然而,对于 psync,fio 似乎忽略了“replay_no_stall”选项,该选项忽略了 iolog 中的时间戳。

并且通过将 numjobs 设置为 4,fio 似乎为相同的工作负载制作了 4 个副本,而不是使用 4 个线程来拆分工作负载。

那么,我怎样才能使带有 psync 的 fio 尊重时间戳,并使用多个线程来重放跟踪?

最佳答案

没有看到 iolog 本身的一个小问题片段,我不能说为什么重放总是尽可能快。请注意,等待以毫秒秒为单位,并且 iolog 中的连续等待必须增加,如果后面的等待会产生影响(因为它们是相对于作业本身的开始而不是彼此或前一个 I/O)。有关详细信息,请参阅 HOWTO 的“跟踪文件格式 v2”部分。对于 fio 邮件列表来说,这个问题听起来是个好问题(但作为一个问题,请不要将其放入错误跟踪器中)。

numjobs is documented as only creating clones in the HOWTO因此您的体验与记录在案的行为相符。

遗憾的是,目前(2016 年底)fio 重播无法以单个重播文件可以在多个作业之间任意拆分的方式工作,并且您需要多个作业才能让 fio 使用多个线程/进程。如果您不介意在作业之间丢失 I/O 顺序这一事实,您可以将 iolog 分成 4 个部分并创建一个使用每个新 iolog 文件的作业。

关于linux - 如何使 FIO 重播多线程跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40298513/

相关文章:

linux - Apache 无法启动

c# - 在 .net 中管理高/低优先级线程

java - 如何抛出 IOException?

c# - 从多个程序实例将文本写入文件

regex - 在 awk 中捕获双引号之间的单词

linux - 将接口(interface)上的流量重定向至特定目的地

linux - 将 GAS 与 .intel_syntax 一起使用时出错

c - C、Linux中不同进程线程的同步

java - Android:当 sleep 或等待不起作用时,如何在方法中设置时间间隙

c - 在 C 文件中读取和写入(加倍)