【问题标题】:How to get read/write disk speed in Python?如何在 Python 中获得读/写磁盘速度?
【发布时间】:2017-02-27 17:12:45
【问题描述】:

在 Python 程序中,我需要获取主机上所有磁盘的累积读/写速度。我正在使用subprocess.check_output() 调用以下 Linux shell 命令:

$ sudo hdparm -t /dev/sda

结果如下:

/dev/sda:
 Timing buffered disk reads: 1488 MB in  3.00 seconds = 495.55 MB/sec

然后我可以解析 495.55。好的,到目前为止一切顺利。

但在hdparm 的手册页上,我发现了-t 标志的解释,它基本上说在执行测量时,其他进程不应同时读取/写入磁盘:

出于基准和比较目的执行设备读取计时。为了得到有意义的结果,这个操作应该在一个至少有几兆字节空闲内存的非活动系统(没有其他活动进程)上重复 2-3 次。这显示了通过缓冲区缓存读取到磁盘的速度,而无需任何事先缓存数据。该测量值表明驱动器在 Linux 下能够以多快的速度支持顺序数据读取,而没有任何文件系统开销。为确保测量准确,在处理 -t 期间使用 BLKFLSBUF ioctl 刷新缓冲区缓存。

问题是

如何确保在执行测量的同时没有其他进程正在访问磁盘?

【问题讨论】:

  • 是否可以选择多次运行hdparm 的最小值/中值/平均值?
  • ...你不能?如果用户正在运行其他进程,您不能直接杀死它们。另外:每个操作系统都有总是一些定期做某事的守护进程,即使这可能不需要磁盘访问......
  • @M.T:这似乎是一个不错的选择。我想过,但我希望有另一种方式来获得价值。
  • @Bakuriu:是的,这听起来很合理。但我只是想在“查询”期间拒绝访问磁盘 IO,而不是杀死其他进程。不可能吗?
  • 现代磁盘是否在 SMART 数据中提供了规定的 r/w 估计值?

标签: python linux bash performance


【解决方案1】:

根据https://unix.stackexchange.com/questions/55212/how-can-i-monitor-disk-io,最有用的解决方案包括工具 sysstat 或 iostat(同一个包)。

但是说真的,由于您对主机具有 sudo 权限,因此您可以使用任何流行的系统监控工具检查自己是否正在进行任何 IO 密集型任务。如果你的测量结果也发疯了,你就不能有效地杀死所有的 IO。尽管如此,随着时间的推移,测量结果仍应为您提供合理的结果,因为偏差会趋于稳定的背景噪声。

除此之外,您还需要人工测量什么?如果您只是想在没有任何 RL 上下文的情况下测试硬件功能,不要挂载磁盘并以二进制模式进行测试。在实际流量进行时进行的测量通常会为您提供更接近您在加载时间的实际预期的结果。

【讨论】:

  • 感谢您的回答。在用sariostats 做了一些测试后,我认为这不是我想要的。或者至少它并不比hdparm 好,因为hdparm 给出了我必须从sariostats 的输出计算的值。我的意思是 MB/sec 是正确的值。但我想让它尽可能公正。需要人工测量,因为我需要有一个“理论”基础来进行进一步的计算。
猜你喜欢
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2019-06-23
  • 2020-02-06
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多