磁盘读取速度间歇性变慢是否是由操作系统本身引起的?

Mik*_*e B 1 virtualization linux performance hard-drive centos

我注意到我的 CentOS 5.x 虚拟机上的磁盘读/写速度间歇性变慢。

有时 hdparm 会报告:

/dev/sda3:
 Timing buffered disk reads:    6 MB in  3.03 seconds =   2.04 MB/sec
Run Code Online (Sandbox Code Playgroud)

其他时候,它会报告:

/dev/sda3:
 Timing buffered disk reads:   80 MB in  3.53 seconds =  22.34 MB/sec
Run Code Online (Sandbox Code Playgroud)

我倾向于怀疑 VMWare 主机系统负担过重,但在向 VMWare 管理员提出此问题之前,我想排除任何其他特定于操作系统的可能导致此行为的情况。

我可以运行任何其他区域或测试吗?任何类型的虚拟机/操作系统损坏都会导致此类行为吗?重建/更换虚拟机有帮助吗?

Mat*_*Ife 5

根据手册页:

   -t     Perform timings of device reads  for  benchmark  and  comparison
          purposes.   For  meaningful  results,  this  operation should be
          repeated 2-3 times on an otherwise  inactive  system  (no  other
          active  processes)  with  at least a couple of megabytes of free
          memory.  
Run Code Online (Sandbox Code Playgroud)

所以,是的,其他进程可能会干扰这些结果。

我可以运行任何其他区域或测试吗?

您可以查看其他进程是否正在使用该磁盘的一种方法是从此处的sysstat主页下载。当然,Sysstat 已经可以从存储库中获得,但不幸的是,它不包含检查这一点所需的命令。pidstat

自 EL5.4 以来,EL5 内核将磁盘记帐向后移植到内核中,但没有提供使用它的接口,但一旦完成此操作,pidstat 就会起作用。

然后运行该pidstat -d命令来生成磁盘 I/O 的有用指标,特别是其他进程正在对磁盘执行的操作。您还可以用来pidstat -d <interval> <count>获取正在使用的磁盘的更实时的争用指标。

任何类型的虚拟机/操作系统损坏都会导致此类行为吗?

操作系统损坏的可能性很小(我猜系统调用以某种方式被搞砸了)。hdparm 不利用文件系统进行测试,这消除了该区域的任何减速,包括碎片整理问题。如果您使用 LVM,则存在从碎片区读取数据的风险。然而你的例子并没有表明这一点。

虚拟机损坏,我想这一切都是游戏,这取决于我能立即想到的许多因素,但可能包括更多因素:

  • 磁盘的映像格式是什么。
  • 该数据如何分配到底层存储机制(它本身是具有扩展的逻辑卷吗?)
  • 如果磁盘控制器内部正在进行 raid 重建或其他一些块级维护。IE,如果控制器实际上是执行某种形式的 raid 重新平衡的 SAN。
  • RAID 中的磁盘故障迫使进行奇偶校验计算。
  • 数据实际上是否由 FusionIO 等“快速”缓存、SAN 中存在的数据缓存或电池支持的 raid 卡读取。
  • 底层媒体是否以某种方式对您的存储进行分层。
  • 虚拟机管理程序的磁盘争用会导致 I/O 请求排队时间更长。
  • SAN 的磁盘争用会导致 I/O 请求排队时间更长(虚拟机驻留在共享存储上很常见)。
  • 精简配置的卷会带来很高的碎片风险。这如何影响您的测试完全取决于您为精简配置范围分配了多少块。例如,在 Linux 中的 LVM 精简配置中,盘区大小默认为 32M,因此在磁盘上传递 32M 标记可能会产生额外的查找,从而扰乱您的计时。

重建/更换虚拟机有帮助吗?

我猜运气是好还是坏。请参阅上述可能有帮助/有阻碍的环境因素。

归根结底,如果您在写入介质的数据流中的任何点(在您的主机上、在您的虚拟机级别、在 SAN/控制器级别)使用卷管理软件或精简配置软件,您可以没有可靠的期望,即您正在执行的顺序读取确实是顺序的,或者您正在写入的介质是一致的(如果它是快速磁盘或数据已移动到慢速磁盘)。

虚拟化之所以如此强大,是因为它为主机添加了一个逻辑抽象层。但由于该抽象层,对它们执行任何可靠程度的容量管理也可能是可怕的。