Linux数据移动器的I / O瓶颈
我有一台24核机器,运行Ubuntu服务器10.04的94.6GiB RAM.该盒子正在经历高%iowait,不像我们拥有的另一台服务器(4个核心)运行相同类型和数量的进程.两台机器都连接到VNX Raid文件服务器,24核机器通过4个FC卡,另一台通过2千兆位以太网卡连接. 4核机器目前优于24核机器,具有更高的CPU使用率和更低的iowait%.
在9天的正常运行时间内,%iowait平均为16%,并且通常高于30%.大多数时候CPU使用率非常低,约为5%(由于iowait很高).有充足的空闲记忆. 我不明白的一件事是为什么所有数据似乎都是通过设备sdc而不是直接通过数据移动器: avg-cpu: %user %nice %system %iowait %steal %idle 6.11 0.39 0.75 16.01 0.00 76.74 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 1232 0 sdb 0.00 0.00 0.00 2960 0 sdc 1.53 43.71 44.54 36726612 37425026 dm-0 0.43 27.69 0.32 23269498 268696 dm-1 1.00 1.86 7.74 1566234 6500432 dm-2 0.96 1.72 5.97 1442482 5014376 dm-3 0.49 9.57 0.18 8040490 153272 dm-4 0.00 0.00 0.00 1794 24 dm-5 0.00 0.00 0.00 296 0 另一个难题是任务经常进入不间断的睡眠模式(在顶部),也可能是由于io持有. 我能看到什么来帮助诊断问题?为什么所有数据都通过/ dev / sdc?这是正常的吗? 更新: 网络连接和VNX读/写容量已被排除为瓶颈.使用4个绑定的NIC(循环),我们可以达到800MB / s的速度.光纤通道卡尚未使用. VNX能够处理IO(两个池中的每个池的RAID6,30x2TB 7.2kRPM磁盘(总共60个磁盘),大约60%读取). 忽略上面关于dm和sdc,它们都是内部磁盘,而不是问题的一部分. 我们认为问题可能出在nfs挂载或TCP上(我们在VNX上有5个挂载到5个分区),但不知道到底是什么.任何建议? 解决方法
首先,如果你的CPU(并且该死的!那就是很多24)比提供数据存储的速度更快地吃数据,那么你就得到了iowait.那是内核在阻塞io期间暂停进程(读取速度太慢或同步写入).
因此,请检查存储是否可以为24个核心提供足够的吞吐量. 例如,假设您的存储可以提供500MB / s的吞吐量,您通过2千兆以太网线路(绑定)连接,网络已经将最大吞吐量限制在100-180 MB / s左右.如果您的进程以50 MB / s的速度使用数据,并且您在4核计算机上运行4个线程:4 x 50 MB / s = 200 MB / s消耗.如果网络可以持续180MB / s,那么你将没有太多的延迟,你的CPU将被加载.这里的网络是一个小瓶颈. 当谈到io等待时,瓶颈可能无处不在.不仅在物理层上,而且在软件和内核空间缓冲区中.这实际上取决于使用模式.但由于软件瓶颈难以识别,因此在调查软件堆栈之前,通常最好检查硬件上的理论吞吐量. 如上所述,当进程进行读取并且数据需要时间到达时,或者当它进行同步写入并且数据修改确认花费时间时,就会发生iowait.在同步写入期间,进程进入不间断睡眠状态,因此数据不会被破坏.有一个方便的工具可以看到哪个调用使进程挂起:latencytop.它不是唯一的一种,但你可以尝试一下. 注意:对于您的信息,dm代表设备映射器而不是数据移动器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |