Сравнение дедупликации Windows 2012 R2, ZFS, BTRFS и SDFS на базе Ubuntu 16.04

Условия тестирования

К виртуальным машинам на базе Windows 2012 R2 и Ubuntu 16.04 прицеплены диски 50Gb.
В Windows 2012 R2 просто создан том и включена дедупликация.
В Ubuntu включаются различные варианты настроек файловых систем.
После этого тома заполняются одинаковым набором данных - архивы и дистрибутивы. То есть типичная файлопомойка. На BTRFS дедупликация выполняется после записи данных с помощью duperemove.

Если отдельно не указано - на всех файловых системах используются дефолтные настройки.

ZFS + deduplication

Перед заполнением данными на ZFS включена дедупликация со сжатием:

zfs set compression=on zroot
zfs set dedup=on zroot
sudo zfs get used,available,logicalused testdedup
NAME       PROPERTY     VALUE  SOURCE
testdedup  used         47.1G  -
testdedup  available    4.65G  -
testdedup  logicalused  47.0G  -

df -h
Filesystem    Size  Used Avail Use% Mounted on
testdedup     52G   47G  4.7G  91% /testdedup

ZFS + deduplication + compression

sudo zfs get used,available,logicalused testdedup
NAME       PROPERTY     VALUE  SOURCE
testdedup  used         44.0G  -
testdedup  available    6.96G  -
testdedup  logicalused  46.4G  -

df -h
Filesystem  Size  Used Avail Use% Mounted on
testdedup   51G   44G  7.0G  87% /testdedup

ZFS + deduplication, recordsize=4k

sudo zfs set dedup=on testdedup
sudo zfs set recordsize=4k testdedup

Производительность на запись упала очень сильно. С recordsize=4k ZFS как файлопомойка не эффективна.

ZFS + deduplication + compression , recordsize=64k

sudo zfs set dedup=on testdedup
sudo zfs set compress=on testdedup
sudo zfs set recordsize=64k testdedup

Результат:

sudo zfs get used,available,logicalused,compressratio testdedup
NAME       PROPERTY       VALUE  SOURCE
testdedup  used           44.1G  -
testdedup  available      6.85G  -
testdedup  logicalused    46.4G  -
testdedup  compressratio  1.05x  -

df -h
Filesystem  Size  Used Avail Use% Mounted on
testdedup   51G   44G  6.9G  87% /testdedup

BTRFS + duperemove v0.11.beta4

Связка BTRFS + duperemove

sudo btrfs filesystem df -h /mnt
Data, single: total=48.73GiB, used=43.96GiB
System, single: total=4.00MiB, used=16.00KiB
Metadata, single: total=264.00MiB, used=56.44MiB
GlobalReserve, single: total=32.00MiB, used=0.00B

df -h
Filesystem  Size  Used Avail Use% Mounted on
/dev/xvdb   50G   45G  5.8G  89% /mnt

BTRFS + compress-force=zlib + duperemove v0.11.beta4

BTRFS смонтирован с опцией compress-force, дедупликация выполнена duperemove.

sudo btrfs filesystem df -h /mnt
System, single: total=4.00MiB, used=12.00KiB
Data+Metadata, single: total=45.01GiB, used=40.50GiB
GlobalReserve, single: total=512.00MiB, used=0.00B

df -h
Filesystem   Size  Used Avail Use% Mounted on
/dev/xvdb    50G   42G  9.5G  82% /mnt

ext4 + SDFS default settings

wget http://www.opendedup.org/downloads/sdfs-latest.deb
sudo dpkg -i sdfs-latest.deb
sudo apt-get -f install 
sudo su
sudo mkfs.ext4 /dev/xvdb
sudo mkdir --parents /opt/sdfs/
sudo mount /dev/xvdb /opt/sdfs/

Вот объем незанятного места:

df -h

Filesystem   Size  Used Avail Use% Mounted on
/dev/xvdb    50G   52M   47G   1% /opt/sdfs

Создаем том:

sudo mkfs.sdfs --volume-name=pool0 --volume-capacity=50GB
sudo mount.sdfs pool0 /mnt

Настройки по-умолчанию получились такие:

io chunk-size="256" 
dedup-files="true"
hash-type="VARIABLE_MURMUR3"

hash-type=“VARIABLE_MURMUR3” означает, что используется переменный размер блока для дедупликации, вычисляемый автоматически.

Вот результаты после заливки файлов:

df -h
Filesystem                                  Size  Used Avail Use% Mounted on
/dev/xvdb                                   50G   41G  6.2G  87% /opt/sdfs
sdfs:/etc/sdfs/pool0-volume-cfg.xml:6442    51G   39G   12G  77% /mnt

И статистика по тому:

sdfscli --volume-info
Files : 3578
Volume Capacity : 50 GB
Volume Current Logical Size : 46.84 GB
Volume Max Percentage Full : 95.0%
Volume Duplicate Data Written : 8.76 GB
Unique Blocks Stored: 38.3 GB
Unique Blocks Stored after Compression : 38.4 GB
Cluster Block Copies : 2
Volume Virtual Dedup Rate (Unique Blocks Stored/Current Size) : 18.22%
Volume Actual Storage Savings (Compressed Unique Blocks Stored/Current Size) : 18.02%
Compression Rate: -0.25% 

BTRFS + compression=zlib + SDFS

Данные SDFS размещены на томе BTRFS, на котором включена компрессия zlib.
SDFS:

io chunk-size="256" 
dedup-files="true"
hash-type="VARIABLE_MURMUR3"
df -h
Filesystem                                 Size  Used Avail Use% Mounted on
/dev/xvdb                                   50G   37G   13G  75% /opt/sdfs
sdfs:/etc/sdfs/pool0-volume-cfg.xml:6442    51G   39G   12G  77% /mnt
sdfscli --volume-info
Files : 3578
Volume Capacity : 50 GB
Volume Current Logical Size : 46.84 GB
Volume Max Percentage Full : 95.0%
Volume Duplicate Data Written : 8.76 GB
Unique Blocks Stored: 38.3 GB
Unique Blocks Stored after Compression : 38.4 GB
Cluster Block Copies : 2
Volume Virtual Dedup Rate (Unique Blocks Stored/Current Size) : 18.22%
Volume Actual Storage Savings (Compressed Unique Blocks Stored/Current Size) : 18.02%
Compression Rate: -0.25%

Производительность:

dd if=/dev/zero of=/mnt/TEST.ZERO bs=16384
1478190+0 records in
1478190+0 records out
24218664960 bytes (24 GB, 23 GiB) copied, 148.419 s, 163 MB/s

Tasks: 586 total,   2 running, 584 sleeping,   0 stopped,   0 zombie
%Cpu(s): 43.3 us, 34.3 sy,  0.0 ni, 21.8 id,  0.0 wa,  0.0 hi,  0.2 si,  0.4 st
KiB Mem :  4037716 total,  2282464 free,   874880 used,   880372 buff/cache
KiB Swap:  1171452 total,  1154028 free,    17424 used.  3067036 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                      
24084 root      20   0 3943336 768132  23104 S 141.4 19.0   4:29.02 jsvc                                                                                                                                                         
24251 root      20   0    7332    696    620 R  15.1  0.0   0:19.55 dd                                                                                                                                                           
24342 user      20   0   42348   4108   3132 R   0.7  0.1   0:00.09 top 

BTRFS + SDFS + sdfs compression LZ4

sudo mkfs.sdfs --volume-name=pool0 --volume-capacity=50GB --chunk-store-compress=true --compress-metadata=true
sudo mount.sdfs pool0 /mnt

После заливки файлов:

df -h
Filesystem                                 Size  Used Avail Use% Mounted on
/dev/xvdb                                   50G   38G   12G  77% /opt/sdfs
sdfs:/etc/sdfs/pool0-volume-cfg.xml:6442    51G   37G   14G  74% /mnt


sdfscli --volume-info
Files : 3578
Volume Capacity : 50 GB
Volume Current Logical Size : 46.84 GB
Volume Max Percentage Full : 95.0%
Volume Duplicate Data Written : 8.76 GB
Unique Blocks Stored: 38.3 GB
Unique Blocks Stored after Compression : 36.9 GB
Cluster Block Copies : 2
Volume Virtual Dedup Rate (Unique Blocks Stored/Current Size) : 18.22%
Volume Actual Storage Savings (Compressed Unique Blocks Stored/Current Size) : 21.21%
Compression Rate: 3.65%

Производительность:

dd if=/dev/zero of=/mnt/TEST.ZERO bs=16384
497921+0 records in
497921+0 records out
8157937664 bytes (8.2 GB, 7.6 GiB) copied, 52.3913 s, 156 MB/s

Tasks: 582 total,   2 running, 580 sleeping,   0 stopped,   0 zombie
%Cpu(s): 47.4 us, 34.0 sy,  0.0 ni, 16.4 id,  0.0 wa,  0.0 hi,  0.0 si,  2.2 st
KiB Mem :  4037716 total,   206404 free,  1101492 used,  2729820 buff/cache
KiB Swap:  1171452 total,  1152020 free,    19432 used.  2839380 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                      
20824 root      20   0 4020188 1.226g 319568 S 151.3 31.8  20:51.12 jsvc                                                                                                                                                         
23450 root      20   0    7332    688    616 R  15.2  0.0   0:02.28 dd                                                                                                                                                           
23487 user      20   0   42348   3996   3020 R   0.3  0.1   0:00.07 top 

BTRFS + SDFS - no compression

После заливки файлов:

df -h
Filesystem                                 Size  Used Avail Use% Mounted on
/dev/xvdb                                   50G   41G  9.6G  81% /opt/sdfs
sdfs:/etc/sdfs/pool0-volume-cfg.xml:6442    51G   39G   12G  77% /mnt


sdfscli --volume-info
Files : 3578
Volume Capacity : 50 GB
Volume Current Logical Size : 46.84 GB
Volume Max Percentage Full : 95.0%
Volume Duplicate Data Written : 8.76 GB
Unique Blocks Stored: 38.3 GB
Unique Blocks Stored after Compression : 38.4 GB
Cluster Block Copies : 2
Volume Virtual Dedup Rate (Unique Blocks Stored/Current Size) : 18.22%
Volume Actual Storage Savings (Compressed Unique Blocks Stored/Current Size) : 18.02%
Compression Rate: -0.25%

Производительность:

dd if=/dev/zero of=/mnt/TEST.ZERO bs=16384
401942+0 records in
401942+0 records out
6585417728 bytes (6.6 GB, 6.1 GiB) copied, 41.545 s, 159 MB/s



Tasks: 581 total,   2 running, 579 sleeping,   0 stopped,   0 zombie
%Cpu(s): 44.8 us, 35.8 sy,  0.0 ni, 18.9 id,  0.2 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem :  4037716 total,   119480 free,  2389112 used,  1529124 buff/cache
KiB Swap:  1171452 total,  1157324 free,    14128 used.  1533060 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                      
 3024 root      20   0 4008900 1.273g 320148 S 143.2 33.1  18:12.32 jsvc                                                                                                                                                         
 5337 root      20   0    7332    704    632 R  14.9  0.0   0:03.98 dd                                                                                                                                                           
 5345 user      20   0   42348   4052   2996 R   1.0  0.1   0:00.16 top 

Windows 2012R2 + NTFS + deduplication

В то же время с тем же набором данных на NTFS:

PS C:\Windows\system32> Get-DedupStatus F: | fl


Volume                             : F:
VolumeId                           : \\?\Volume{69c27e73-82e4-4962-bce6-d83d0b7e0616}\
Capacity                           : 49.87 GB
FreeSpace                          : 10.8 GB
UsedSpace                          : 39.07 GB
UnoptimizedSize                    : 48.35 GB
SavedSpace                         : 9.28 GB
SavingsRate                        : 19 %
OptimizedFilesCount                : 1967
OptimizedFilesSize                 : 47.69 GB
OptimizedFilesSavingsRate          : 19 %
InPolicyFilesCount                 : 1967
InPolicyFilesSize                  : 47.69 GB
LastOptimizationTime               : 4/21/2017 10:45:09 AM
LastOptimizationResult             : 0x00000000
LastOptimizationResultMessage      : The operation completed successfully.
LastGarbageCollectionTime          : 4/20/2017 4:44:56 PM
LastGarbageCollectionResult        : 0x00565302
LastGarbageCollectionResultMessage : There are no actions associated with this job.
LastScrubbingTime                  :
LastScrubbingResult                :
LastScrubbingResultMessage         :

Windows 2012R2 + NTFS + compression + deduplication

А вот результат, если применить к тому компрессию NTFS, а затем дедуплицировать данные:

PS C:\Windows\system32> Get-DedupStatus F: | fl


Volume                             : F:
VolumeId                           : \\?\Volume{69c27e73-82e4-4962-bce6-d83d0b7e0616}\
Capacity                           : 49.87 GB
FreeSpace                          : 11.7 GB
UsedSpace                          : 38.18 GB
UnoptimizedSize                    : 47.45 GB
SavedSpace                         : 9.28 GB
SavingsRate                        : 19 %
OptimizedFilesCount                : 1963
OptimizedFilesSize                 : 46.82 GB
OptimizedFilesSavingsRate          : 19 %
InPolicyFilesCount                 : 1963
InPolicyFilesSize                  : 46.82 GB
LastOptimizationTime               : 4/25/2017 9:26:35 AM
LastOptimizationResult             : 0x00000000
LastOptimizationResultMessage      : The operation completed successfully.

Эффективность немного выше, чем без компрессии.

Выводы

Эффективность дедупликации Windows 2012R2 существенно превышает эффективность дедупликации ZFS и BTRFS. На одинаковом наборе данных дедупликация Windows 2012R2 сохраняет больше места, чем ZFS и BTRFS, которые показывают примерно одинаковую эффективность дедупликации.
Конкурировать с дедупликацией Windows может только SDFS - http://www.opendedup.org. Значительно (по сравнениею с Windows 2012R2) сэкономить место позволила конфигурация в которой контейнер SDFS размещен на томе BTRFS. В Windows 2012R2 после размещения файлов осталось свободно около 11Gb, на томе BTRFS с контейнером SDFS осталось свободно около 13Gb.

Важно отметить, что Windows и BTRFS выполняют дедупликацию уже размещенных данных по расписанию, а ZFS и SDFS дедуплицирует данные в момент записи данных in-line. При этом, для нормальной работы дедупликации на ZFS система должна иметь много памяти. По разным оценкам - от 2Gb до 5Gb RAM на 1Tb данных - https://wiki.freebsd.org/ZFSTuningGuide. SDFS расходует память значительно экономичнее.

Даже на плохосжимаемых данных компрессия ZFS дает больший выигрыш, чем дедупликация, а уменьшение recordsize выигрыша в свободном пространстве не дает, но снижает производительность.

В результате лидером по количеству сэкономленного места, по моим наблюдениям, стала связка BTRFS compress-force=zlib + SDFS.

Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/deduplication_win2012r2_vs_ubuntuzfs.txt
  • Last modified: 2019/03/13 08:14
  • by admin