I gave it a spin today.
Installation - trivally easy. Install build-essential, dkms, git and the kernel headers. Instrtuctiosn from source:
https://github.com/stec-inc/EnhanceIO/blob/master/Install.txt
Setup by far the easier and less error prone compared to dm-cache. I love that it sets up udev rules for auto mounting of the cache on reboot - with dmcache and flashcache you have to write your own init scripts. Being able to cache existing partions on the fly with no prep is *exteremely* usefull. Overall it feels much safe than fiddling with dm-cache, also status and stats are easy to extract.
Performance - tricky to measure and I'm using it to speed up gluster disks which complicates things. If you hav suggests for bench marks I'd appreciate it.
I ran tests several times so as to populate the cache. Inital reads were limited by sata disk i/o (150 MB/s), but subsequent reads would be up to 400 MB/s.
dd if
I was trying crystaldiskmark inside a VM. Read preformance increased by about 300%, raw write perfomance actually dropped, even with writeback enabled. By random read/write was greatly improved.
OTOH actual application usage varied. A long build process still took around 10 min, Eclipse (Java IDE) startup time stayed the same.
Interesting article here:
http://www.sebastien-han.fr/blog/2014/10/06/ceph-and-enhanceio/
Suggests using it in writethrough mode in combination with an external ssd journal for improved write performance.
Also I never thought of using the /dev/disk/by-id links, much safer than /sda etc.
Thanks for the detailed report, we will try EnhanceIO in the near future and post our experience here.
I have a couple of questions that came to mind reading your writeup:
1. Did you use LRU or FIFO?
2. If you were to backup your entire server every night, I assume FIFO would have to rebuild the entire cache next morning, but an LRU cache would still contain useful data? Do we know anything about the "recentness" in LRU, do you think it spans a few days?
3. If you were to combine EnhanceIO-writethrough with an external SSD-based journal for your ext4 filesystem, could you do it on the same SSD (different partitions for journal and cache)? How would you partition this SSD (read cache relative to write journal)?
4. Based on your recent experience with ZFS, which way would you go? EnhanceIO writethrough + external SSD journal for ext4 or ZFS with L2ARC/ZIL on SSD?
Last edited: