Linux数据移动器的I / O瓶颈

前端之家收集整理的这篇文章主要介绍了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将被加载.这里的网络是一个小瓶颈.
现在,如果将其扩展到24个内核和24个线程,则需要1200 MB / s,即使您更改布线以允许此类吞吐量,您的存储系统也不会提供超过500 MB / s的速度,它就会成为瓶颈.

当谈到io等待时,瓶颈可能无处不在.不仅在物理层上,而且在软件和内核空间缓冲区中.这实际上取决于使用模式.但由于软件瓶颈难以识别,因此在调查软件堆栈之前,通常最好检查硬件上的理论吞吐量.

如上所述,当进程进行读取并且数据需要时间到达时,或者当它进行同步写入并且数据修改确认花费时间时,就会发生iowait.在同步写入期间,进程进入不间断睡眠状态,因此数据不会被破坏.有一个方便的工具可以看到哪个调用使进程挂起:latencytop.它不是唯一的一种,但你可以尝试一下.

注意:对于您的信息,dm代表设备映射器而不是数据移动器.

猜你在找的Linux相关文章