在运行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:
在对目标启用写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议尝试几件事情:
dd if=/dev/zero bs=1M | nc ... ),并查看负载是否以相同的方式(比较负载和CPU%s)。 你可能应该只用一个连接来testing,并且同时运行大约8个这样的testing。 尝试在两个方向上发送和接收数据。 最近我也偶然发现了一些iSCSI性能调整指南 ,尽pipe这些build议可能无法解决您遇到的特定问题,但您可能会发现这些指南很有帮助。