我正在使用FIO(灵活I / Otesting器)testingZFS镜像,以了解ZFS镜像的随机读取可扩展性。 主要和次要caching已经被设置为none,因为我使用的应用程序执行它自己的caching。
出于testing目的,我使用磁盘/dev/sdb和/dev/sdc ,它们具有〜100个随机读取IOPS。 当使用单个磁盘ZFS安装时,单个磁盘数字是从FIO获得的。
我对ZFS镜像的理解应该经历大约200(100 + 100)个随机读取IOPS。 当testing时,我只遇到大约140随机读取IOPS。 完整的结果如下:
test@pc:/mnt/zfs-raid1# fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=8 --runtime=240 --group_reporting randread: (groupid=0, jobs=8): err= 0: pid=4293: Wed Nov 16 21:02:08 2016 read : io=137040KB, bw=584482B/s, iops=142, runt=240091msec slat (usec): min=222, max=2246.9K, avg=56047.94, stdev=85252.98 clat (usec): min=2, max=5142.9K, avg=838922.05, stdev=443521.12 lat (msec): min=5, max=5401, avg=894.97, stdev=460.94 clat percentiles (msec): | 1.00th=[ 75], 5.00th=[ 269], 10.00th=[ 396], 20.00th=[ 529], | 30.00th=[ 619], 40.00th=[ 693], 50.00th=[ 766], 60.00th=[ 848], | 70.00th=[ 947], 80.00th=[ 1090], 90.00th=[ 1336], 95.00th=[ 1614], | 99.00th=[ 2507], 99.50th=[ 2835], 99.90th=[ 3720], 99.95th=[ 3884], | 99.99th=[ 4621] bw (KB /s): min= 1, max= 851, per=12.92%, avg=73.67, stdev=43.13 lat (usec) : 4=0.01%, 10=0.01% lat (msec) : 10=0.11%, 20=0.05%, 50=0.34%, 100=0.85%, 250=3.16% lat (msec) : 500=12.49%, 750=30.99%, 1000=26.12%, 2000=23.48%, >=2000=2.38% cpu : usr=0.02%, sys=0.14%, ctx=99221, majf=0, minf=202 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=99.6%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=34260/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=16 Run status group 0 (all jobs): READ: io=137040KB, aggrb=570KB/s, minb=570KB/s, maxb=570KB/s, mint=240091msec, maxt=240091msec
这个镜像是使用
zpool create zfs-raid1 mirror /dev/sdb /dev/sdc
这是预期的可扩展性水平吗? 还是有什么我失踪?
ZFS不仅将ARC用于文件caching,而且还用于许多性能优化,例如预取和可能最重要的元数据。 如果您没有caching,则ZFS必须每次读取池中的元数据(每次读取或写入时)。
您只能通过设置primarycache=metadata而不是primarycache=all来caching元primarycache=metadata 。
但是,ARC和应用程序级caching不必相互排斥。 预取也可以帮助加快速度。 因此,我会尝试性能改变与primarycache=all 。
这篇文章也许是有趣的: https : //www.patpro.net/blog/index.php/2014/03/19/2628-zfs-primarycache-all-versus-metadata/