ZFS in the past
Today I have to share this information to ZFS community about another port of ZFS on Linux, since we are at crossroads for ZFS repository consolidation. Originally from OpenSolaris ONNV , and later using illumos-gate, this port was started a decade ago primarily for the purpose of enterprise-class storage engine to iSCSI and FC target solution on Linux. Later for NFS file storage I have to port the file system operations too because Zfsonlinux project was not ready at that time for my use.
With quality and not quantity in mind the work was done for a single distribution only (RedHat/Centos) and permit kernel patches if needed. At that time I could validate the success of my port to Linux with rsync, SpecSFS benchmark, while LLNL zfsonlinux.org project had issues with untamed growth of ARC caching and inode table. But I am sure things must have changed a lot after numerous contributions to ZOL project.
Here are some noteworthy points on ZFS port done by me.
- Uses same code structure as in illumos-gate maintaining VFS/VNODE layer with Linux super/inode layer on top of it.
- Easy to merge changes from upstream with the hope that Oracle may change and again open source their latest ZFS .
- There is NO separate SPL module; just one zfs.ko and zpool,zfs tools
- Well integrated snapshot access in kernel from hidden .snap control directory, even over NFS, without any helper programs to automount.
- Address the weakness of ZFS not having unified ARC and pagecache, otherwise mmap/sendfile doubles the memory usage.
The above is done by using the ARC loanbuf mechanism, whiich is also used by NFS for zerocopy operation.
- Tighter iSCSI integration with direct interface to ZVOL APIs with zerocopy. Also needed for UNMAP to function with thin provisioning.
- High performance ZVOL block layer without using any additional kernel threads.
- udev support long ZVOL dataset names instead of symbolic links with zvol0…n
Never got the time to cleanup the attic and release it as repository but promise to change this and release here pretty soon. But here is the demo on Crossmeta ZFS solving the double caching problem with mmap/sendfile/splice