Sun Solaris 10 ZFS offers blazing filesystem performance
Sample ZFS performance
|
Task |
ZFS [min.] |
UFS [min.] |
|
|
Create |
3.75 |
93.75 |
25x faster |
|
Rebuild HELIOS Desktop |
25.30 |
116.75 |
4.6x faster |
|
Remove |
16.75 |
217.30 |
13x faster |
ZFS feature overview
- 128-bit file system(s); no practical size limit
- Transactional semantics (like journaling, disk is always consistent)
- Dynamic storage management
- Allows growing file system size
- Allows adding disks
- Allows striping and mirroring
- No dedicated file system space reservation required, e.g. two file systems can grow until ZFS pool is full
- Allows growing file system size
- File system snapshot support
- Allows backup of the frozen system without service interrupt
- Allows backup snapshots to allow easy access of older files, e.g. snapshot at 10 a.m., 12 a.m., 2 p.m., 4 p.m., etc.
- Allows replicating a ZFS snapshot (e.g. to a remote disk / server)
- Allows rolling back the file system to an older snapshot version
- Allows backup of the frozen system without service interrupt
- Snapshot cloning allows read-write access of a snapshot
- Disk block checksums will detect data errors
- Disk block compression features
- ZFS disk image compatibility between different platforms (SPARC / AMD)
ZFS requirements
- Sun SPARC / x86 (64-bit is highly recommended!)
- Solaris 10 (edition 11/06) or newer; earlier Solaris 10 ZFS versions will not work reliably
- 512 MB RAM (the more memory the better performance!)
- Any disk or RAID system will work
- HELIOS UB products (arch.: “sol4” and “solx86”)
- Attention: For using ZFS with database applications see TechInfo #106
What is the performance advantage of running HELIOS file services on ZFS?
ZFS “HOWTO” HELIOS samples
- 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) - Create two file systems “project1” and “project2” on this pool
Format: zfs create poolname / filesystemname
First create a file system hierarchy, which acts as a container for the individual file systems 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 file system(s):
# zfs create testpool/myprojects/project1
# zfs create testpool/myprojects/project2
Both file systems “project1” and “project2” will automatically be mounted below “/export/myprojects”.
Note: Where to define HELIOS volumes: at least one level below file system mount point!
Example: For the “/export/myprojects/project1” file system 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.
Additional storage can be added via:
Format: zpool add poolname storage
Add a second disk “c0t4d0”:
# zpool add testpool c0t4d0 - Create a snapshot of the file system “project”:
Format: zfs snapshot <poolname>/<filesystemname>@snapshotname
# zfs snapshot testpool/myprojects/project1@snap - Create a clone read-write file system 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”. - List all ZFS file systems:
# zfs list
NAME
USED
AVAIL
REFER
MOUNTPOINT
test/…/project1
29.2M
53.8G
28.7M
/exp/…/project1
test/…/project2
329.2M
53.8G
328.8M
/exp/…/project2 test/…/project1@snap 505K
–
28.7M
–
test/…/clone_p1
806K
53.8G
28.7M
/exp/…/clone_p1
- 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 - Backup a ZFS file system snapshot into a disk file:
Format: zfs send <poolname>/<filesystemname>@<snapshotname> > filepath
# zfs send testpool/myprojects/project1@snap > /backup/project1_snap.bkp - Remote HTTP based ZFS administration via:
“https://hostname:6789/zfs”
Get I/O statistics
|
|
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 |
|
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
|
Highest-Performance Server for Mac Clients | |
|
Highest-Performance Server for Windows Clients | |
|
Highest-Performance Server for Real Time Remote File Access | |
|
Server-based Image Processing and ICC Color Transformation | |
|
Create PDF Server • PDF Preflight • PDF Printing • PDF OPI | |
|
Local and Remote Proofing on Monitor and Printer |
Tools
|
Professional tool to test file server compatibility | |
|
Professional tool to test and measure the performance of AppleShare services | |
|
HELIOS “htar” |
UNIX batch disk backup utility |
|
HELIOS “dt” tools |
Allows 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
- Sun Fire X4100 Server (two AMD CPUs, 4 GB RAM)
- Two 70 GB disks (one for the OS, second for ZFS)
- Solaris 10 (edition 11/06), all patches installed (as of January 15, 2007)
Notes:
Additional ZFS links







