我有一个关于测量程序 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 时间的标准做法?
提前致谢,圣诞快乐!
测量 CPU 外部 I/O(磁盘、网络)时,指令重新排序不是问题;指令需要纳秒,磁盘 I/O 需要毫秒 - 慢 106 倍。
外部 I/O 重要的是传输的数据总量、传输块大小和队列深度。
此外,磁盘 I/O、读/写和顺序/随机访问也发挥作用。
测量磁盘 I/O 的标准方法是让系统尽可能空闲,并运行多次测试迭代,在改变块大小的同时传输足够多的数据,然后计算每次迭代的平均时间。
根据生成的将传输时间映射到块大小的 2D 数据集,计算 I/O 指标 - 吞吐量和延迟。