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

Ric*_*Art 6 python linux bash performance

在Python程序中,我需要获得主机上所有磁盘的累计读/写速度.我这样做是subprocess.check_output()为了调用以下Linux shell命令:

$ sudo hdparm -t /dev/sda
Run Code Online (Sandbox Code Playgroud)

这给出了结果:

/dev/sda:
 Timing buffered disk reads: 1488 MB in  3.00 seconds = 495.55 MB/sec
Run Code Online (Sandbox Code Playgroud)

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

但是在我的手册页上hdparm找到了这个-t标志的解释,基本上说在执行测量时没有其他进程应该同时读/写磁盘:

执行设备读取的时间以进行基准测试和比较.为了获得有意义的结果,此操作应在其他非活动系统(没有其他活动进程)上重复2-3次,并且至少有几兆字节的可用内存.这将显示通过缓冲区高速缓存读取磁盘的速度,而无需事先缓存数据.此测量表明驱动器在Linux下可以维持顺序数据读取的速度,而不会产生任何文件系统开销.为确保准确测量,在使用BLKFLSBUF ioctl处理-t期间刷新缓冲区高速缓存.

问题是:

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

Hub*_*iak 4

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

但说实话,由于您在主机上拥有 sudo 权限,因此您可以使用任何流行的系统监控工具自行检查是否正在执行任何 IO 密集型任务。如果你的测量结果不疯狂,你就无法有效地杀死所有 IO。尽管如此,随着时间的推移,测量结果仍会给出合理的结果,因为偏差会趋向于稳定的背景噪声。

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