【发布时间】: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