有个客户给我发邮件,告知我,他们曾对自己的板子和现在正在测试的 Marvell 6281 主板 进行对比测试。发现磁盘I/O操作时候的CPU空闲时间有出入。询问是否是6281的IO效率太低 了。
mpstat 数据如下:
Marvell 6281
CPU %usr %nice %sys %iowait %irq %soft %idle
all 0.00 0.00 5.98 93.69 0.00 0.33 0.00
all 0.00 0.00 3.65 96.01 0.00 0.33 0.00
all 0.66 0.00 7.97 89.37 0.00 1.99 0.00
M5000
CPU %usr %nice %sys %iowait %irq %soft %idle
all 17.67 0.00 22.33 0.00 0.00 0.00 60.00
all 11.33 0.00 22.00 0.00 0.00 0.00 66.67
all 7.33 0.00 16.33 0.00 0.00 0.00 76.33
客户认为M5000的 iowait 为0,那么CPU等待IO完成的时间是没有的,因此他的磁盘性能很 好,CPU不去干预;而6281的iowait%太高,CPU都在等,磁盘效率低下。
这里最要命的就是 iowait 概念。参考 mpstat 手册
CPU 的时间片在 mpstat 眼中划分为很多种类,在UP(unique processor)系统中
%usr + %nice + %sys + %iwoait + %irq + %soft + %steal + %guest + %idle = 100%
-
%usr, CPU 运行用户程序的时间比
-
%nice, CPU 运行修改过进程优先级的用户程序时间比
-
%sys, CPU 运行内核程序的时间比
-
%iowait, 显示CPU在拥有磁盘I/O请求时候的_空闲_时间比
-
…
-
%idle,现实CPU没有磁盘I/O请求时候的_空闲_时间比
而其中的 %usr + %nice + %sys 是真正CPU在忙的时间,而其他都属于空闲期。 由上可知, 6281 在磁盘测试的时候使用了
0+0+5.98 = 5.98% 的CPU时间来处理I/O请求, 而 M5000 则使用了 17.63+0+22.33 = 40%,很明显
M5000 的磁盘IO更加占用CPU时间。
%iowait 同样也属于空闲期,但是细分成了属于等待磁盘I/O完成的空闲时间,CPU不会傻等 。一旦CPU有其他请求,他会立刻响应。
高的 iowait 代表 CPU早早完成了IO请求的处理而等待磁盘IO的完成。一旦 iowait 逼近 100%,则代表CPU够闲的同时磁盘IO性能过低,总结为磁盘IO成了系统瓶颈。
而M5000 花费了 40% 的CPU 时间来处理请求,这个时候IO传输已经完成,他根本没有等待 时间。这显得 CPU 性能相对磁盘IO反而心力不足,在密集型IO请求的系统中 CPU 会显得 很吃力。
IO性能的调校有超多的方法
-
硬件形成磁盘阵列 raidx
-
hdparm 微调磁盘性能
-
选用合适的 IO scheduler (/sys/block/sda/queue/scheduler)
同样也可以配合以下工具来试试
-
mpstat,适用于 SMP 系统下的监控工具,包含在 sysstat
-
iostat,可以察看IO都写请求的次数等详细数据,包含在sysstat
-
sar, 可以查看网络 IO 性能数据
-
oprofile,可定制的系统微调工具,工作方式类似与 systemtap
-
fio
-
nmon
-
iozone
分享到:
相关推荐
drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-...
开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2...
同时,为了提高代码的可测试性和可维护性,很可能采用了面向对象的设计,将相关功能封装成类,遵循一定的设计原则和模式。 总结来说,“io0007-find_progress”项目是针对IO操作和HTTP通信的实用工具库,它通过一...
赠送jar包:commons-io-2.8.0.jar; 赠送原API文档:commons-io-2.8.0-javadoc.jar; 赠送源代码:commons-io-2.8.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.8.0.pom; 包含翻译后的API文档:commons-io...
赠送jar包:commons-io-2.11.0.jar; 赠送原API文档:commons-io-2.11.0-javadoc.jar; 赠送源代码:commons-io-2.11.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.11.0.pom; 包含翻译后的API文档:...
赠送jar包:commons-io-2.7.jar; 赠送原API文档:commons-io-2.7-javadoc.jar; 赠送源代码:commons-io-2.7-sources.jar; 赠送Maven依赖信息文件:commons-io-2.7.pom; 包含翻译后的API文档:commons-io-2.7-...
3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-...
4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-...
赠送jar包:commons-io-1.3.2.jar; 赠送原API文档:commons-io-1.3.2-javadoc.jar; 赠送源代码:commons-io-1.3.2-sources.jar; 赠送Maven依赖信息文件:commons-io-1.3.2.pom; 包含翻译后的API文档:commons-io...
赠送jar包:commons-io-2.5.jar; 赠送原API文档:commons-io-2.5-javadoc.jar; 赠送源代码:commons-io-2.5-sources.jar; 赠送Maven依赖信息文件:commons-io-2.5.pom; 包含翻译后的API文档:commons-io-2.5-...
2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1...
`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准IO库的类和方法。这个库为开发者提供了更高效、更便捷的方式来执行常见的文件、目录和流操作。 一、Java IO 基础 Java IO ...
platformio.platformio-ide-2.4.3
1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1...
6. **测试与调试**:配置完成后,进行全面的功能测试,验证PLC与IO-Link从站设备的通信是否正常,以及设备参数是否按预期工作。调试过程中,如有问题,可以通过IO-Link诊断信息快速定位问题原因。 基恩士的IO-Link...
pojie-drawio-confluence-plugin-9.5.8.obr pojie-drawio-confluence-plugin-9.5.8.obr pojie-drawio-confluence-plugin-9.5.8.obr pojie-drawio-confluence-plugin-9.5.8.obr pojie-drawio-confluence-plugin-9.5.8...
赠送jar包:commons-io-2.7.jar 赠送原API文档:commons-io-2.7-javadoc.jar 赠送源代码:commons-io-2.7-sources.jar 包含翻译后的API文档:commons-io-2.7-javadoc-API文档-中文(简体)-英语-对照版.zip 对应...
在给定的“platformio-core-installer-develop.zip”压缩包中,包含了PlatformIO核心安装器的开发者版本。这个安装器是为了在Visual Studio Code (VSCODE) 中集成PlatformIO开发环境而设计的。以下是对这个压缩包...
赠送jar包:commons-io-2.2.jar; 赠送原API文档:commons-io-2.2-javadoc.jar; 赠送源代码:commons-io-2.2-sources.jar; 包含翻译后的API文档:commons-io-2.2-javadoc-API文档-中文(简体)版.zip 对应Maven...