SAN和pipe理程序之间的iSCSI性能非常慢

在运行iSCSI-Target的1U Ubuntu服务器中,我们有一个可怜的SAN设置,在RAID-0中有两个300GB的驱动器。 然后,我们将它用于虚拟机的块级存储。 pipe理程序通过专用VLAN和接口上的千兆位连接到SAN。

我们只有一个虚拟机设置和一些基准testing。 如果我们从虚拟机运行hdparm -t /dev/sda1 ,则从虚拟机到SAN的75MB / s的“正常”性能。 然后我们基本上用./configuremake编译一个包。 事情开始确定,但突然之间,SAN上的平均负载增长到了7+,事情变得缓慢。 当我们SSH进入SAN并运行最高时,确定负载是7+,但CPU使用率基本上是没有什么,也有服务器有1.5GB的可用内存。 当我们终止虚拟机上的编译时,SAN上的LOAD慢慢回到1以下的数字。

世界上正在造成什么? 我们如何进一步诊断呢?

以下是高负载下SAN的两个屏幕截图。

 1> Output of iotop on the SAN: 

View post on imgur.com

 2> Output of top on the SAN: 

View post on imgur.com

在对目标启用写caching之后,您应该看到性能显着提高(细节取决于实现 – 您正在使用什么,tgt?)和您的磁盘

 hdparm -W 1 /dev/sda hdparm -W 1 /dev/sdb 

但是有一个代价:在停电或SAN系统挂起的情况下,这会危及数据的完整性(尤其是在运行数据库的情况下),因为被认为是永久写入磁盘的数据只能驻留在volatile DRAM。 为了减轻这种风险,您应该使用带有BBWC(电池支持的写入caching)的控制器,数据在断电后保持一段时间(通常为1-2天)。

ESXi的主要“问题”是不断同步()磁盘。 将元数据写入VMFS(如果有的话)的需求使其变得更糟。 当人们使用没有写入caching的控制器时,vmware社区论坛充满了“我的磁盘很慢”的post。

在虚拟机中运行iometer。

随着只有两个7.2K rpm的驱动器随机存取将会伤害你。 你只能从他们那里得到很多的iops。

尝试使用iometer运行两个场景:

1)顺序读/写 – 这应该给不错,胖的数字。 2)随机访问驱动器 – 在这里你应该在一个受到伤害的土地。

设置足够大的testing文件,强制将其从虚拟机的caching中移出。

我会build议尝试几件事情:

  1. 尝试使用非iSCSIstream量进行一些吞吐量testing(例如dd if=/dev/zero bs=1M | nc ... ),并查看负载是否以相同的方式(比较负载和CPU%s)。 你可能应该只用一个连接来testing,并且同时运行大约8个这样的testing。 尝试在两个方向上发送和接收数据。
  2. 尝试使用不同的目标软件(例如tgt Ubuntu软件包)
  3. 将您的SAN内核更新到更新的版本,以防万一遇到内核错误。
  4. 在iSCSI-Target邮件列表中报告这个问题,或者如果没有运气,可能是linux-kernel邮件列表 ?
  5. 如果一切都失败了,如果这是一个选项,尝试NexentaOS或NexentaStor,看看你是否得到更好的结果。

最近我也偶然发现了一些iSCSI性能调整指南 ,尽pipe这些build议可能无法解决您遇到的特定问题,但您可能会发现这些指南很有帮助。