在OpenSolaris上使用ZFS时,磁盘吞吐量显着降低?

我正在为我工​​作的小型企业构build一个简单的ZFS文件服务器。 该服务器是戴尔Poweredge 840,具有1GB的RAM。 操作系统(OpenSolaris 2009.06)安装在一个SATA驱动器上,另外还有三个SATA驱动器用于存储:1x1TB,1×1.5TB和1x2TB。 当我将三个驱动器添加到一个raidz zpool,吞吐量不是很好:

#zpool create -m /export/pool pool raidz c7d1 c8d0 c8d1 #zfs create pool/fs #time dd if=/dev/zero of=/export/pool/fs/zerofile bs=1048576 count=1024 1024+0 records in 1024+0 records out real 0m12.539s user 0m0.002s sys 0m0.435s 

那大概是81.6 MB / s。 这不是可怕的,但我尝试创build一个只包含其中一个驱动器的池:

 #zpool create -m /export/disk-c7d1 disk-c7d1 c7d1 #zfs create disk-c7d1/fs #time dd if=/dev/zero of=/export/disk-c7d1/fs/zerofile bs=1048576 count=1024 1024+0 records in 1024+0 records out real 0m21.251s user 0m0.002s sys 0m0.552s 

好,48.19 MB / s的吞吐量顺序写入一个驱动器? 这似乎很低。 特别是当我格式化驱动器为UFS并尝试相同的写:

 #newfs /dev/dsk/c7d1s2 <snip> #mount /dev/dsk/c7d1s2 /mnt/c7d1 # time dd if=/dev/zero of=/mnt/c7d1/zeroes bs=1048576 count=1024 1024+0 records in 1024+0 records out real 0m10.372s user 0m0.002s sys 0m1.720s 

这几乎是速度的两倍,98.73 MB /秒。 这更接近我期望的这些驱动器(尽pipe它们只是便宜的SATA驱动器)。

我在这里做错了什么? 我知道在使用RAIDZ写入奇偶校验数据时会有额外的开销,但是如果从单个驱动器创build一个池,则不应该将吞吐量减半。 这似乎很糟糕。

谢谢大家。

ZFS性能可以通过添加读写caching固态盘(我知道我知道他们是昂贵的)可以大大提高检查此链接了解更多信息。

如果你想要表演,请远离raidz,而不是使用镜子。

“我应该configurationRAIDZ,RAIDZ-2,RAIDZ-3还是镜像存储池?

“何时(而不是)使用RAID-Z”

请记住,使用ZFS每个写入都有更多,因为一些数据是元数据。 有趣的是,如果你用dd写async,你的性能应该会更好,因为应该有一些caching在进行。 随着您开始扩展存储池,您将看到性能的提高,如果您通过SSD作为caching设备,并且作为ZIL设备,假设您有大量的同步写入,那么这一点将非常令人惊奇。 高速cachingSSD是您的读取高速caching,ZIL SSD是您的同步写入高速caching。 首先,我会尝试,虽然你的设置显然不是理想的,但是使用与你的文件系统块大小相匹配的块大小,这可能是128K。 看看会是什么样子。

最后,不要比较ZFS和UFS–苹果和橘子。 其他人提供了很好的参考资料。 当然值得一读。