Sun Solaris 10 ZFS offers blazing filesystem performance

The new Sun filesystem ZFS represents a previously unseen breakthrough in filesystem performance and management. All HELIOS UB based products and tools have successfully passed performance and reliability testing using the new Sun ZFS filesystem. Important tasks like working with many small files and re-indexing the HELIOS Desktop database work many times faster compared to the standard UFS filesystem. In addition, ZFS offers disk/filesystem/reliability features that are missing in other standard server operating systems. Our engineers are delighted and we feel that the latest Sun options like supporting AMD-CPUs, offering OpenSolaris on multiple platforms – and especially the new ZFS – bring unmatched performance benefits for customers.

Sample ZFS performance

For the following test run, a directory tree is created, rebuilt and then removed. Click here to see performance test details.

[min.] = minutes
Task (tested with 3 million files) ZFS [min.] UFS [min.] ZFS:UFS performance ratio
Create 3,75 93,75 25 x faster
Rebuild HELIOS Desktop 25,30 116,75 4,6 x faster
Remove 16,75 217,30 13 x faster

ZFS feature overview

ZFS requirements

What is the performance advantage of running HELIOS file services on ZFS?

HELIOS file servers use the AFP 3 file service (EtherShare UB) for Mac files and SMB/CIFS (PCShare UB) for Windows files. A Mac file is comprised of a data fork and a resource fork and Windows files can contain metadata and file streams. That means that each file in the filesystem can have several forks. Since ZFS can handle many small files way faster than UFS, HELIOS file services benefit from this performance boost.

ZFS "HOWTO" HELIOS samples

In our example we will use a complete disk "c0t3d0" and later add another disk "c0t4d0" for the ZFS pool "testpool". For this pool, a filesystem container "myprojects" will be created and a few properties set, which are inherited by the individual filesystems "project1" and "project2".

1. Create a ZFS pool via
Format: zpool create poolname *storage
zpool create testpool c0t3d0

* storage can be diskname (c0t3d0), partitionname(c0td0s5), or filepath(/data/bigfile)

2. Create two filesystems "project1" and "project2" on this pool
Format: zfs create poolname/filesystemname

First create a filesystem hierarchy, which acts as a container for the individual filesystems that will be created later, and set required properties:
# zfs create testpool/myprojects
# zfs set mountpoint=/export/myprojects testpool/myprojects

Then create your individual project filesystem(s):
# zfs create testpool/myprojects/project1
# zfs create testpool/myprojects/project2

Both filesystems "project1" and "project2" will automatically be mounted below "/export/myprojects".

Note: Where to define HELIOS volumes: at least one level below filesystem mount point!

Example: For the "/export/myprojects/project1" filesystem the HELIOS mount point could be at "/export/myprojects/project1/project1_volume" but must NOT reside on the "project1" directory itself. This is required due to the way ZFS stores its snapshot information from a ZFS file system.

2a) Additional storage can be added via
Format: zpool add poolname storage

Add a second disk "c0t4d0":
# zpool add testpool c0t4d0

3. Create a snapshot of the filesystem "project"
Format: zfs snapshot poolname/filesystemname@snapshotname
# zfs snapshot testpool/myprojects/project1@snap

4. Create a clone read-write filesystem of the snapshot
Format: zfs clone poolname/filesystemname@snapshotname poolname/filesystemname
# zfs clone testpool/myprojects/project1@snap testpool/myprojects/clone_p1

The clone of "project1" is available at: "/export/myprojects/clone_p1".

5. List all ZFS filesystems
zfs list

NAME USED   AVAIL   REFER    MOUNTPOINT
testpool/myprojects/project1 29,2M   53,8G   28,7M   /export/myprojects/project1
testpool/myprojects/project2 329,2M   53,8G   328,8M   /export/myprojects/project2
testpool/myprojects/project1@snap   505K   -   28,7M   -
testpool/myprojects/clone_p1   806K   53,8G   28,7M   /export/myprojects/clone_p1

6. Remove the clone, remove the snapshot
Format: zfs destroy poolname/filesystemname
             OR zfs destroy poolname/filesystemname@snapshotname
# zfs destroy testpool/myprojects/clone_p1
# zfs destroy testpool/myprojects/project1@snap

7. Backup a ZFS filesystem snapshot into a disk file
Format: zfs send poolname/filesystemname@snapshotname > filepath
# zfs send testpool/myprojects/project1@snap > /backup/project1_snap.bkp

8. Remote HTTP based ZFS administration via:
"https://hostname:6789/zfs"

Get I/O statistics

With "zpool iostat" you can list io statistics of your pools, with option "-v" also separated for the single disks.
# zpool iostat -v

CAPACITY OPERATION BANDWITH
POOL USED AVAIL READ WRITE READ WRITE
testpool   21,6G 46,4G 11 25 875K 516K
c0t3d0 21,6G 46,4G 11 25 875K 516K

With "fsstat filesystem" you can list I/O statistics per filesystem.
# fsstat /export/myprojects/project1

NEW NAME NAME ATTR ATTR LOOKUP RDDIR READ READ WRITE WRITE
file remov chng get set ops ops ops bytes ops bytes
19,2M 12,3M 43 123M 14,0M 436M 2,63M 28,0M 12,1G 16,8M 15,6G

Tested applications

HELIOS UB products

EtherShare UB

Highest-Performance Server for Mac Clients

PCShare UB

Highest-Performance Server for Windows Clients

WebShare UB

Highest-Performance Server for Real Time Remote File Access

ImageServer UB Server-based Image Processing and ICC Color Transformation

PDF HandShake UB

Create PDF Server - PDF Preflight - PDF Printing - PDF OPI

PrintPreview UB Local and Remote Proofing on Monitor and Printer
PostScript 3/PDF Compatible Preview Rendering

Tools

HELIOS File System Test

Professional tool to test file server compatibility
HELIOS LanTest

Professional tool to test and measure the performance of AppleShare services

HELIOS htar

UNIX batch disk backup utility
HELIOS "dt" tools Allow storing and working with client files on a UNIX server, while ensuring that Mac resource information, Windows file stream information, and meta data are left intact

HELIOS "mkisofs"

HELIOS "winfstest"

"dd" performance testing

Performance test details

Tested configuration:

Create:
A perl script creates a directory tree with 111.000 folders, no folder contains more than 10 folders. Each bottom folder contains 30 files of 512 bytes.

Rebuild:
For this directory tree a desktop database is created with "rebuild -f".

Remove:
The directory tree is removed with "rm -r".

UFS:
UFS (UNIX File System) has been the default Solaris UNIX filesystem for many years. ZFS (Zetabyte File System) is the new Solaris filesystem.

Notes

ZFS does not have user/group quotas, instead file system quotas. As it is very simple to setup a file system per user/project/etc (with quota and other properties as required), this could be a simple mechanism to use.

HELIOS programs will display the "Used" and "Available" disk space on ZFS file systems correctly. On regular file systems, this would add up to the "Capacity" of the file system. Due to the nature of the pooled ZFS file systems, this is not true, and the "Capacity" value will be different, even for ZFS file systems in the same pool.

Copying directly from a snapshot into a HELIOS volume is not supported. First clone the snapshot, which does not require additional disk space, and after you have defined a HELIOS volume for the clone volume, you can mount it through AFP or SMB.

Tests were performed on ZFS filesystem with up to 10 million files.
Tests were performed with HELIOS SQL desktop database.

Additional ZFS links

ZFS documentation
http://docs.sun.com/app/docs/doc/819-5461/6n7ht6qr2?a=view

What is ZFS?
http://www.opensolaris.org/os/community/zfs/whatis/


Search the HELIOS web site: