As of Solaris 11, and formerly open solaris, the dedup option is available as a standard feature of a zfs pool. To enable dedup it is just a quick parameter adjustment. Below is an example of how to enable dedup and a quick test to verify it works.
root@solaris:~# zfs list NAME USED AVAIL REFER MOUNTPOINT pool 233K 357M 41.4K /pool pool/share 40.6K 100M 40.6K /pool/share ... root@solaris:~# zfs set dedup=on pool/share root@solaris:/pool/share# zfs get dedup pool/share NAME PROPERTY VALUE SOURCE pool/share dedup on local root@solaris:/pool/share# dd if=/dev/zero of=testfile bs=1K count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB) copied, 10.7363 s, 977 kB/s root@solaris:/pool/share# zfs list NAME USED AVAIL REFER MOUNTPOINT pool 10.2M 356M 41.4K /pool pool/share 10.0M 90.0M 10.0M /pool/share
Notice the pool available is 357M starting, after writing 10MB worth of zeros to a file on pool/share using the dd command we notice the pool size is 356M. Since deduplication works at a block level it is of reasonable speed. For what you get, it is a good option to conserve pool space in solaris.