在运行iSCSI-Target的1U Ubuntu服务器中,我们有一个穷人的SAN设置,在RAID-0中有两个300GB的驱动器。 然后,我们将它用于虚拟机的块级存储。 pipe理程序通过专用VLAN和接口上的千兆位连接到SAN。
我们只有一个虚拟机设置和一些基准testing。 如果我们从虚拟机运行hdparm -t /dev/sda1 ,则从虚拟机到SAN的性能可以达到75MB / s。 然后我们基本上用./configure和make编译一个包。 事情开始确定,但突然之间,SAN上的平均负载增长到了7+,事情变得缓慢。 当我们SSH进入SAN并运行最高时,确定负载是7+,但CPU使用率基本上是没有什么,也有服务器有1.5GB的可用内存。 当我们终止虚拟机上的编译时,SAN上的LOAD慢慢回到1以下的数字。
世界上正在造成什么? 我们如何进一步诊断呢?
以下是高负载下SAN的两个屏幕截图。
1> Output of iotop on the SAN:

2> Output of top on the SAN:

这看起来非常像一个典型的存储不足的情况。 虚拟机pipe理程序(尤其是ESXi / vSphere)将比使用裸机安装Linux操作系统更频繁地发出同步写入操作 – 绝大多数写入请求都是asynchronous的(除非您已经搞乱了文件系统设置)。 再次同步写入将需要存储器来确认操作已完成并且已被提交到永久存储器。 如果你只有2个磁盘,这将是一个艰难的游戏 – 你看到的结果。
您的select:
IOMode=wb为您的LUN定义在ietd.conf 请注意,不推荐使用后者,因为这可能会导致系统停机或存储服务器崩溃(甚至偶尔会导致IET崩溃),导致系统pipe理程序的数据存储,访客文件系统和事务数据库损坏,但是非常适合作为一个快速检查,如果同步写入是什么导致你的负载和编译时糟糕的性能数字。
瓶颈。 可以在发起方,双方networking,目标软件或目标磁盘子系统上。 通过描述,我会开始与networking,确保卸载closures(ethtool -K {tso,gso,lro}closures)
hdparm是衡量IO性能的一个非常糟糕的工具。 你应该考虑使用bonnie++ ,或者更多的特定于应用程序的工具之一。
当你做./configure; make ./configure; make过程,你将最终进行一系列的读写操作,其大小可能不是遍布在整个磁盘上,而是在连续的区域中。
一旦您对IO系统性能有了更好的了解,您可以查看确定根本原因。
在直接写入磁盘时,iSCSI目标上的性能是否正常,但在通过iSCSI进行通信时不正常? 如果是这样,可能与networking有关(卸载,MTU,双工/速度不匹配等)。 如果不是,可能与控制器/磁盘相关(写入caching等)