我有以下testing设置:HP Microserver N36L(双核低功耗Athlon64)8GB ECC内存2端口Intel千兆网卡4x3TB WD Green(5400 RPM?)1个用于操作系统映像(FreeBSD 10.1)的SATA磁盘
交换机是HP v1910-24G(pipe理型二层交换机,24个千兆端口)
客户是:DH67BL主板上的Core i5 2400 24GB RAM 1个Intel千兆位(板载)
FreeBSD机器通过iSCSI公开其zvols,发起者是Windows。 在Windows上,iSCSI卷格式化为NTFS,VMWare Workstation将其用作其他VM的磁盘(在这种情况下,也是Windows 7 VM)。
我已经尝试了zvols的几个configuration,主要是从4k到64k的不同值的volblocksize,以及4到64k的NTFS簇大小。 我尝试过blocksize = cluster size和block size> cluster size的组合。
在所有情况下,我基本上都是一样的:
连续读取速度为110-120MB / s(千兆位以太网限制)。 随机读取<5MB / s
在VM之外或之内复制大文件是可以接受的。 启动窗口的速度非常缓慢(全新安装login屏幕需要3分钟以上,桌面更多1分钟)
这是预期的行为?
这种configuration有很多组件和devise决定,导致其糟糕的performance。
惠普微服务器是低性能的项目。 RAM受限和低端CPU。
西部数据绿色驱动器是低RPM ,需要特别考虑他们的4k扇区格式。 这可能是主要的问题。
看起来你可能在三个磁盘上使用RAIDZ1。 该设置下的随机读取/写入性能也相当低。 预计在这两种情况下都会看到单个磁盘的性能。
没有写caching/ ZIL设备。
1GbE iSCSI到Windows软件的发起者并不好。
VMware Workstation肯定没有帮助。
某些ZFS属性在这里可能对您不利:重复数据删除是不好的。 gzip压缩不好(lz4是好的)。 分配给ARC的RAM过多是不好的。
机械硬盘随机I / O访问。
4倍的WD Green可以提供5 MB / s的随机读取性能,甚至比我预期的要好。
一些math:在5400转每分钟,一个单一的旋转需要11毫秒,所以一个半旋转需要约5.5ms。 这是旋转延迟 。 追加约8ms的寻道时间 (执行器需要正确定位读/写头的时间)会使总时间达到〜13ms。 这意味着每个单个磁盘的IOPS为1000ms(1秒)/ 13ms =〜76 IOPS。 在4K随机读取,这翻译在〜300 KB /秒
考虑到ZFS RAIDZ本身在IOPS方面本身是非常糟糕的(它的devise:ZFS为了数据安全而牺牲了IOPS,请阅读这里了解更多细节)我感到惊讶的是,您有5 MB / s的随机读取性能。 你用4KB随机读取还是更大的(例如:64KB)来testing?
回到你原来的问题:我认为这是一个小的iSCSI volblocksize / recordsize,RAIDZ卷和4K磁盘的组合。 在RAIDZ Vols中,每个读/写按数据磁盘的数量分解,然后转发到物理磁盘。 例如,在您的设置中,单个8K写入将在多个〜3KB写入(3x 3KB写入数据和1x 3KB写入奇偶校验)中被破坏,这将触发磁盘本身的读取 – 修改 – 写入(因为它们是4K基于磁盘)。 由于Windows启动随机写入很重,因此可能会受到磁盘行为的影响。
试试这个:如果你有能力摧毁你的ZPOOL / ZDEV,把它破坏并用16K或32K的volblocksize重新创build(见这里 )。 然后重新安装Windows机器并重新尝试您的scheme。