如何在Python中获得读/写磁盘速度?

时间:2016-10-18 12:18:42

标签: python linux bash performance

在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下可以维持顺序数据读取的速度,而不会产生任何文件系统开销。为确保准确测量,在使用BLKFLSBUF ioctl处理-t期间刷新缓冲区高速缓存。

问题是

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

1 个答案:

答案 0 :(得分:3)

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

但严重的是,由于您在主机上拥有sudo权限,因此您可以自行检查是否有任何IO密集型任务正在使用任何常用的系统监视工具。如果没有您的测量结果,您也无法有效地杀死所有IO。在较长的时间内,测量应该给你合理的结果,因为偏差会收敛到稳定的背景噪声。

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