基准测试时正确测量 I/O 时间

问题描述 投票:0回答:1

我有一个关于测量程序 I/O 时间(磁盘、互联网网络等)的问题。我怎样才能实现它?

让我告诉你我的想法。假设我有一个具有以下逻辑的 C++ 程序。

...
1: auto start = chrono::now()
2: io_ops()
3: auto duration = (chrono::now() - start).count()
...

该方法存在多个问题。首先,在执行第 3 行指令之前,CPU 可能会拥塞,我不认为这是 I/O 时间(或者我应该吗?)。当 CPU 重新排序指令时,可能会出现第二个问题,因为不存在依赖性或任何数据危险。现在,我想知道是否有测量 I/O 时间的标准做法?

提前致谢,圣诞快乐!

c++ performance io profiling
1个回答
0
投票

测量 CPU 外部 I/O(磁盘、网络)时,指令重新排序不是问题;指令需要纳秒,磁盘 I/O 需要毫秒 - 慢 106 倍。

外部 I/O 重要的是传输的数据总量、传输块大小和队列深度。

此外,磁盘 I/O、读/写和顺序/随机访问也发挥作用。

测量磁盘 I/O 的标准方法是让系统尽可能空闲,并运行多次测试迭代,在改变块大小的同时传输足够多的数据,然后计算每次迭代的平均时间。

根据生成的将传输时间映射到块大小的 2D 数据集,计算 I/O 指标 - 吞吐量和延迟。

© www.soinside.com 2019 - 2024. All rights reserved.