首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fio中,碘深度究竟是什么?

问在fio中,碘深度究竟是什么?
EN

Unix & Linux用户
提问于 2018-07-28 12:22:36
回答 2查看 24.5K关注 0票数 8

fio的输入深度和存储的队列深度是否相同?那么,如何使用fio命令中的iodepth参数来控制队列深度呢?这是否是在创建并行作业,但还是有一种选择,可以并行运行作业(这不是一个琐碎的或冲突的问题吗?)

我很难理解fio是如何控制它的工作负载的(特别是关于这个to深度的)。有谁能详细解释一下碘深度参数吗?

更新#1

我的问题也是在灵活的I/O测试者论坛上被问到。这就是我在那里得到的答案。

嗨,2018年7月28日14时26分,杰万·帕特奈克写道:嗨,Is的深度和队列的存储深度都一样吗?然后,如何才能从fio fio深度和I/O实现提交I/O到存储的深度来控制队列深度,但当然不一定是相同的,而且这种关系高度依赖于操作系统/存储/使用的fio引擎/fio参数。基本上,fio向操作系统提交一种特定的I/O方式。根据您将I/O提交到操作系统的方式,它可以选择以更优化/不同的方式进一步提交I/O (例如,将请求批次在一起,将太大的请求分解成较小的部分,延迟I/O等)。此外,正如在何图中所指出的,in深度只会影响异步ioengines (请注意,文本中包含关于需要在Linux上使用direct=1的警告)。指挥部?这是否是在创建并行作业,但还是有一种选择,可以并行运行作业(这不是一个琐碎的或冲突的问题吗?)我将给出一个简短的总结,但注意到我并不试图讨论缓存/readahead/插件/块设备层(例如RAID/LVM)等:同步的fio I/O引擎向操作系统提交一个I/O,等待它被“确认”为已被接收,然后发送另一个I/O等。如果一个fio I/O引擎能够以真正异步的方式向操作系统提交I/O (参见上面的链接),那么关键是它不需要等待更早的I/O在提交新I/O之前被“确认”。如果I深度仅为1时,它将必须以类似于同步I/O引擎的方式运行。但是,假设一个作业指定一个32深度为32。在这种情况下,有多达32个未完成的I/O将在提交更多I/O之前选择等待(水印是什么,每次提交多少由iodepth_batch_*选项控制。这可以更有效,实现更高的吞吐量,但通常需要更高的延迟时间。fio不会仅仅因为so深度而创建并行fio作业,但是使用并行fio作业是增加在任何给定时间(通过使用不同的线程/进程)同时提交I/O的数量的另一种方式,而在同一设备上使用这两种任务将是同步的(因此,如果有两个fio作业在碘深度为16,则每个操作系统实际上在任何给定时间都会收到32个I/O )。合并这两者可能有原因(例如,您有多个设备,它们速度太快,以至于一个CPU甚至在异步提交I/O时也无法跟上)。我很难理解fio是如何控制它的工作负载的(特别是关于这个to深度的)。有谁能详细解释一下碘深度参数吗?我要指出的是,您也在stackexchange (在fio中,碘深度究竟是什么?)上问过这个问题。您可能希望从那里链接到https://www.spinics.net/lists/fio/msg07190.html以帮助其他可能有类似问题的人.

EN

回答 2

Unix & Linux用户

发布于 2018-07-29 07:33:48

这不是微不足道的事吗?

根据iodepth=的工作要求,假定直接IO。

使用iodepth=2的连续作业一次将提交两个顺序的IO请求。

numjobs=2的顺序作业将有两个线程,每个线程都提交顺序IO。

这些是不同的IO模式。后者将在IO总线上产生2倍的带宽,即使物理IO由于设备缓存而减少到1倍。(我怀疑由于设备缓存,这两个工作将保持同步状态,除非您使用多个文件和一个随机的file_service_type=)。如果IOs是同步写入(sync=true),那么物理IO就根本不会减少,除非设备正在进行异常数量的优化(可能是一个去复制的SSD控制器)。

票数 7
EN

Unix & Linux用户

发布于 2018-07-28 20:58:48

根据Linux内核文档:

。。选项: iodepth=int数量的I/O单位,以保持飞行对文件。请注意,超过1的碘深度增加不会影响同步碘引擎(除了在使用:verify_async时的小程度外)。即使异步引擎也可能施加操作系统限制,导致无法达到所需的深度。当使用libaio而不设置:direct:\=1时,可能会发生这种情况,因为在该操作系统上缓冲的I/O不是异步的。注意fio输出中的I/O深度分布,以验证所达到的深度是否与预期的相同。违约: 1。

本教程的标题为:Fio输出解释有以下示例:

Fio有一个it深度设置,可以控制它在任何给定时间向操作系统发出多少个IOs。这完全是应用程序端,这意味着它与设备的IO队列不一样。在这种情况下,碘深度被设置为1,所以IO深度总是1100%的时间。提交: 0=0.0%、4=100.0%、8=0.0%、16=0.0%、32=0.0%、64=0.0%、>=64=0.0%完成: 0=0.0%、4=100.0%、8=0.0%、16=0.0%、32=0.0%、64=0.0%、>=64=0.0% submit和complete表示fio每次提交的IOs数量和一次完成的数量。在用于生成此输出的震荡测试中,so深度为默认值1,因此100%的IOs一次提交1次,将结果放入1-4桶中。基本上,只有当碘深大于1时,这些才是重要的。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/459045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档